7 #include "mdds/multi_type_vector/types.hpp"
13 namespace mdds {
namespace mtv {
15 template<
typename _MtvT>
20 template<
typename _MtvT>
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)
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;
99 const value_type& operator*()
const
104 const value_type* operator->()
const
125 template<
typename _MtvT>
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>
172 const_iterator
begin()
const;
181 const_iterator
end()
const;
190 size_type
size()
const;
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);
254 #include "collection_def.inl"
Definition: collection.hpp:16
const_iterator begin() const
const_iterator end() const
detail::side_iterator< mtv_type > const_iterator
collection range.
Definition: collection.hpp:150
void swap(collection &other)
Definition: cref_wrapper.hpp:12
void set_element_range(size_type start, size_type size)
void set_collection_range(size_type start, size_type size)
Definition: collection.hpp:21