23 typedef _MtvT mtv_type;
26 typedef typename mtv_type::size_type size_type;
27 typedef typename mtv_type::const_iterator const_iterator;
28 typedef typename mtv_type::const_position_type const_position_type;
33 const mtv_type* vector;
34 const_iterator block_pos;
35 const_iterator block_end;
37 mtv_item(
const mtv_type* v,
const const_iterator& bp,
const const_iterator& be)
38 : vector(v), block_pos(bp), block_end(be)
45 friend class side_iterator;
48 mdds::mtv::element_t type;
56 template<
typename _Blk>
57 typename _Blk::value_type get()
const
59 return _Blk::get_value(*__position.first->data, __position.second);
64 const_position_type __position;
76 std::vector<mtv_item> m_vectors;
79 size_type m_elem_pos_end;
80 size_type m_index_offset;
84 std::vector<mtv_item>&& vectors, size_type elem_pos, size_type elem_size, size_type index_offset,
85 uintptr_t identity, begin_state_type);
88 std::vector<mtv_item>&& vectors, size_type elem_pos, size_type elem_size, size_type index_offset,
89 uintptr_t identity, end_state_type);
92 typedef node value_type;
97 side_iterator(
const _T& begin,
const _T& end);
99 const value_type& operator*()
const
104 const value_type* operator->()
const
109 side_iterator& operator++();
111 side_iterator operator++(
int);
113 bool operator==(
const side_iterator& other)
const;
114 bool operator!=(
const side_iterator& other)
const;
129 typedef _MtvT mtv_type;
130 typedef typename mtv_type::size_type size_type;
138 range() : start(0),
size(0)
142 std::vector<const mtv_type*> m_vectors;
143 size_type m_mtv_size;
144 uintptr_t m_identity;
163 template<
typename _T>
234 void check_collection_range(size_type start, size_type
size)
const;
235 void check_element_range(size_type start, size_type
size)
const;
237 std::vector<typename const_iterator::mtv_item> build_iterator_state()
const;
239 void init_insert_vector(
const std::unique_ptr<mtv_type>& p);
241 void init_insert_vector(
const std::shared_ptr<mtv_type>& p);
243 template<
typename _T>
244 void init_insert_vector(
const _T& t,
typename std::enable_if<std::is_pointer<_T>::value>::type* = 0);
246 template<
typename _T>
247 void init_insert_vector(
const _T& t,
typename std::enable_if<!std::is_pointer<_T>::value>::type* = 0);
249 void check_vector_size(
const mtv_type& t);