16 template <
typename T,
class TDataType,
class TMemInterface >
35 T *
get_next_batch(
size_t _requested_batch_size,
size_t &_returned_batch_size);
49 std::atomic< size_t > next_batch_index;
53 template <
typename T,
class TDataType,
class TMemInterface >
55 TDataType &_guarded_data_structure)
56 : data(_guarded_data_structure)
57 , locked_data(nullptr)
60 data.lock(locked_data);
64 template <
typename T,
class TDataType,
class TMemInterface >
67 data.unlock(locked_data);
68 ts_debug_only(next_batch_index = 0;);
72 template <
typename T,
class TDataType,
class TMemInterface >
74 size_t &_returned_batch_size)
77 size_t current_batch_index = next_batch_index.fetch_add(_requested_batch_size);
78 size_t array_size = data.size();
79 if (current_batch_index < array_size)
81 _returned_batch_size = std::min(array_size - current_batch_index, _requested_batch_size);
82 return locked_data + current_batch_index;
86 _returned_batch_size = 0;
lock_free_batch_dispatcher(TDataType &_data_type)
Initializes a new instance of the lock_free_batch_dispatcher class.
Definition: lockfreebatchdispenser.h:54
Class stl_allocator.
Definition: allocator.h:16
T * get_next_batch(size_t _requested_batch_size, size_t &_returned_batch_size)
Gets the next batch.
Definition: lockfreebatchdispenser.h:73
Class lock_free_batch_dispatcher.
Definition: lockfreebatchdispenser.h:17
~lock_free_batch_dispatcher()
Finalizes an instance of the lock_free_batch_dispatcher class.
Definition: lockfreebatchdispenser.h:65