28#ifndef INCLUDED_MDDS_COLLECTION_HPP
29#define INCLUDED_MDDS_COLLECTION_HPP
31#include "mdds/multi_type_vector/types.hpp"
37namespace mdds {
namespace mtv {
39template<
typename _MtvT>
44template<
typename _MtvT>
47 typedef _MtvT mtv_type;
50 typedef typename mtv_type::size_type size_type;
51 typedef typename mtv_type::const_iterator const_iterator;
52 typedef typename mtv_type::const_position_type const_position_type;
57 const mtv_type* vector;
58 const_iterator block_pos;
59 const_iterator block_end;
61 mtv_item(
const mtv_type* v,
const const_iterator& bp,
const const_iterator& be)
62 : vector(v), block_pos(bp), block_end(be)
72 mdds::mtv::element_t type;
80 template<
typename _Blk>
81 typename _Blk::value_type get()
const
83 return _Blk::get_value(*__position.first->data, __position.second);
88 const_position_type __position;
100 std::vector<mtv_item> m_vectors;
102 size_type m_elem_pos;
103 size_type m_elem_pos_end;
104 size_type m_index_offset;
105 uintptr_t m_identity;
108 std::vector<mtv_item>&& vectors, size_type elem_pos, size_type elem_size, size_type index_offset,
109 uintptr_t identity, begin_state_type);
112 std::vector<mtv_item>&& vectors, size_type elem_pos, size_type elem_size, size_type index_offset,
113 uintptr_t identity, end_state_type);
116 typedef node value_type;
120 template<
typename _T>
123 const value_type& operator*()
const
128 const value_type* operator->()
const
149template<
typename _MtvT>
153 typedef _MtvT mtv_type;
154 typedef typename mtv_type::size_type size_type;
162 range() : start(0),
size(0)
166 std::vector<const mtv_type*> m_vectors;
167 size_type m_mtv_size;
168 uintptr_t m_identity;
187 template<
typename _T>
258 void check_collection_range(size_type start, size_type
size)
const;
259 void check_element_range(size_type start, size_type
size)
const;
261 std::vector<typename const_iterator::mtv_item> build_iterator_state()
const;
263 void init_insert_vector(
const std::unique_ptr<mtv_type>& p);
265 void init_insert_vector(
const std::shared_ptr<mtv_type>& p);
267 template<
typename _T>
268 void init_insert_vector(
const _T& t,
typename std::enable_if<std::is_pointer<_T>::value>::type* = 0);
270 template<
typename _T>
271 void init_insert_vector(
const _T& t,
typename std::enable_if<!std::is_pointer<_T>::value>::type* = 0);
273 void check_vector_size(
const mtv_type& t);
278#include "collection_def.inl"
Definition: collection.hpp:151
const_iterator end() const
detail::side_iterator< mtv_type > const_iterator
collection range.
Definition: collection.hpp:174
void swap(collection &other)
collection(const _T &begin, const _T &end)
void set_element_range(size_type start, size_type size)
const_iterator begin() const
void set_collection_range(size_type start, size_type size)
Definition: collection.hpp:46