28 #ifndef INCLUDED_MDDS_COLLECTION_HPP 29 #define INCLUDED_MDDS_COLLECTION_HPP 31 #include "mdds/multi_type_vector_types.hpp" 33 #include <type_traits> 37 namespace mdds {
namespace mtv {
39 template<
typename _MtvT>
44 template<
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) {}
71 mdds::mtv::element_t type;
79 template<
typename _Blk>
80 typename _Blk::value_type
get()
const 82 return _Blk::get_value(*__position.first->data, __position.second);
87 const_position_type __position;
90 enum begin_state_type { begin_state };
91 enum end_state_type { end_state };
93 std::vector<mtv_item> m_vectors;
96 size_type m_elem_pos_end;
97 size_type m_index_offset;
101 std::vector<mtv_item>&& vectors, size_type elem_pos, size_type elem_size,
102 size_type index_offset, uintptr_t identity, begin_state_type);
105 std::vector<mtv_item>&& vectors, size_type elem_pos, size_type elem_size,
106 size_type index_offset, uintptr_t identity, end_state_type);
109 typedef node value_type;
113 template<
typename _T>
116 const value_type& operator*()
const 121 const value_type* operator->()
const 142 template<
typename _MtvT>
146 typedef _MtvT mtv_type;
147 typedef typename mtv_type::size_type size_type;
156 range() : start(0), size(0) {}
159 std::vector<const mtv_type*> m_vectors;
160 size_type m_mtv_size;
161 uintptr_t m_identity;
181 template<
typename _T>
190 const_iterator begin()
const;
199 const_iterator end()
const;
208 size_type size()
const;
231 void set_collection_range(size_type start, size_type size);
249 void set_element_range(size_type start, size_type size);
253 void check_collection_range(size_type start, size_type size)
const;
254 void check_element_range(size_type start, size_type size)
const;
256 std::vector<typename const_iterator::mtv_item> build_iterator_state()
const;
258 void init_insert_vector(
const std::unique_ptr<mtv_type>& p);
260 void init_insert_vector(
const std::shared_ptr<mtv_type>& p);
262 template<
typename _T>
263 void init_insert_vector(
const _T& t,
typename std::enable_if<std::is_pointer<_T>::value>::type* = 0);
265 template<
typename _T>
266 void init_insert_vector(
const _T& t,
typename std::enable_if<!std::is_pointer<_T>::value>::type* = 0);
268 void check_vector_size(
const mtv_type& t);
273 #include "collection_def.inl" Definition: collection.hpp:40
detail::side_iterator< mtv_type > const_iterator
collection range.
Definition: collection.hpp:168
Definition: flat_segment_tree.hpp:46
Definition: collection.hpp:45