11 template <
typename T,
class TMemInterface >
32 size_t size() {
return array_size; }
40 size_t reserved() {
return array_flags.reserved_size; }
63 template <
typename T,
class TMemInterface >
friend class guarded_write_array_batch_dispenser;
66 size_t reserved_size : 62;
67 size_t read_locked : 1;
68 size_t data_owner : 1;
94 std::atomic< size_t > array_size;
98 template <
typename T,
class TMemInterface >
100 bool _optimize_for_cache_line_size)
104 array_flags.reserved_size = ~0;
105 assert(_reserved_size < array_flags.reserved_size);
106 array_flags.reserved_size = _reserved_size;
107 array_flags.data_owner = 1;
109 data =
new (cache_line_size) T[array_size];
112 template <
typename T,
class TMemInterface >
114 : data(_existing_array)
115 , array_size(_existing_array_size)
117 array_flags.reserved_size = _existing_array_size;
118 array_flags.data_owner = 0;
123 if (array_flags.data_owner)
127 ts_debug_only(data =
nullptr;);
128 ts_debug_only(array_flags = 0;);
129 ts_debug_only(array_size = 0;);
132 template <
typename T,
class TMemInterface >
135 assert(_index < array_size);
136 return data + _index;
140 template <
typename T,
class TMemInterface >
144 assert(array_size <= array_flags.reserved_size);
145 assert(!is_locked());
146 *(data + array_size - 1) = _new_item;
152 assert(!is_locked());
159 assert(!is_locked());
166 assert(!array_flags.read_locked);
167 array_flags.read_locked = 1;
173 assert(array_flags.read_locked);
174 array_flags.read_locked = 0;
180 return array_flags.read_locked;
uint32_t get_cache_line_size()
Gets the size of the cache line.
Definition: cache.h:24
size_t reserved()
Reserveds this instance.
Definition: guardedwritearray.h:40
Definition: guardedwritearray.h:65
Class stl_allocator.
Definition: allocator.h:16
void clear()
Clears this instance.
Definition: guardedwritearray.h:150
~guarded_write_array()
Finalizes an instance of the guarded_write_array class.
Definition: guardedwritearray.h:121
Definition: guardedwritearray.h:12
T & operator[](size_t _index)
Operator[]s the specified index.
Definition: guardedwritearray.h:133
void push_back(const T &_new_item)
Pushes the back.
Definition: guardedwritearray.h:141
size_t size()
Sizes this instance.
Definition: guardedwritearray.h:35
T * operator &()
Operator&s this instance.
guarded_write_array(size_t _reserverd_size, bool _optimize_for_cache_line_size)
Initializes a new instance of the guarded_write_array class.
Definition: guardedwritearray.h:99