12template <
typename T_Container>
20template <
typename T_Container>
39 expected_max_container <=1
64 std::span<T_ContainerPtr> container_list) {
65 unsigned int end_idx=begin_idx+
container.size();
66 assert( end_idx <= container_list.size());
67 for (
unsigned int idx=begin_idx; idx < end_idx; ++idx) {
68 container_list[idx]=&
container[idx-begin_idx];
70 return container_list;
87template <
typename T_Container>
128 const std::size_t new_size=(
m_used+min_elments+1) & (~(min_elments));
134 std::vector<T_Container> &extra_container = container_list.
m_container.back();
135 assert(new_container_list.size()>=container_list.
m_containerList.size());
141 std::span(new_container_list) );
148 unsigned int container_idx =
m_used++;
Helper class which provides a possibly dynamically growing list of containers suitable for a multi-th...
std::vector< std::vector< T_ContainerPtr > > m_containerListHistory
The history of the container lists where each subsequent element is an extended copy of the preceding...
T_Container * T_ContainerPtr
T_ContainerPtr * ContainerPtrList
std::size_t size() const
The number of containers in this list.
std::span< T_ContainerPtr > m_containerList
The current container list.
static std::span< T_ContainerPtr > fillContainerList(unsigned int begin_idx, std::vector< T_Container > &container, std::span< T_ContainerPtr > container_list)
Write pointers to containers in the given vector to a list starting at begin_index.
ContainerList(unsigned int expected_max_container)
Create a container list for a certain number of containers.
T_Container & operator[](unsigned int idx)
Return the container with the given container index (read-write).a.
const T_Container & operator[](unsigned int idx) const
Return the container with the given container index (read-only).
std::vector< std::vector< T_Container > > m_container
All containers.
T_Container * m_singleElementContainerList
A container "list" which can only contain a single container.
Helper which provides a pointer to a container and the index of the container in the container list.
ContainerPtr(ContainerPtr &&a)=default
ContainerPtr(const ContainerPtr &a)=default
const T_Container * operator->() const
ContainerPtr(T_Container *ptr, unsigned int container_idx)
ContainerPtr & operator=(ContainerPtr &&a)=default
T_Container * m_container
T_Container & operator*()
T_Container * operator->()
friend struct DynamicContainerListHelper
unsigned int containerId() const
Get the index of container in the container list.
unsigned int m_containerIdx
const T_Container & operator*() const
ContainerPtr & operator=(const ContainerPtr &a)=default
Helper class which allows to dynamically grow the container list.
std::atomic< unsigned int > m_used
std::mutex m_containerListMutex
T_Container * T_ContainerPtr
void addLargerContainerList(unsigned int container_idx, ContainerList< T_Container > &container_list)
If the specified entry does not exist in the container list create an extended copy which contains th...
ContainerPtr getNewContainer(ContainerList< T_Container > &container_list)
Get an unused container from the given container list.