11 template <
typename T,
class TDataStructure,
class TMemInterface >
class guarded :
private TDataStructure
13 typedef TDataStructure super;
17 T &operator[](
size_t _index);
21 void push_back(
const T &_new_item);
23 typename TDataStructure::size_type size()
const _NOEXCEPT;
30 std::atomic_bool read_locked;
32 void lock(T *&_locked_data);
33 void unlock(T *&_unlocked_data);
34 void _Reallocate(
typename TDataStructure::size_type _Count);
37 template <
typename T,
class TDataStructure,
class TMemInterface >
39 : TDataStructure(_fixed_size)
45 template <
typename T,
class TDataStructure,
class TMemInterface >
48 bool previous_value = read_locked.exchange(
true);
49 ts_assert(!previous_value);
50 _locked_data = super::data();
53 template <
typename T,
class TDataStructure,
class TMemInterface >
57 ts_assert(super::data() == _unlocked_data);
58 _unlocked_data =
nullptr;
59 bool previous_value = read_locked.exchange(
false);
60 ts_assert(previous_value);
63 template <
typename T,
class TDataStructure,
class TMemInterface >
69 template <
typename T,
class TDataStructure,
class TMemInterface >
72 ts_assert(!is_locked());
75 super::push_back(_new_item);
79 template <
typename T,
class TDataStructure,
class TMemInterface >
82 ts_assert(!is_locked());
89 template <
typename T,
class TDataStructure,
class TMemInterface >
95 template <
typename T,
class TDataStructure,
class TMemInterface >
98 ts_assert(_index < super::size());
99 return super::data() + _index;
102 template <
typename T,
class TDataStructure,
class TMemInterface >
108 template <
typename T,
class TDataStructure,
class TMemInterface >
111 ts_assert(super::size() > 0);
112 return at(super::size() - 1);
115 template <
typename T,
class TDataStructure,
class TMemInterface >
118 ts_assert(!is_locked());
120 super::_Reallocate(_Count);
123 template <
typename T,
class TDataStructure,
class TMemInterface >
126 return super::size();
129 template <
typename T,
class TMemInterface >
Class stl_allocator.
Definition: allocator.h:16
Class lock_free_batch_dispatcher.
Definition: lockfreebatchdispenser.h:17