28 #ifndef INCLUDED_MDDS_MULTI_TYPE_VECTOR_CUSTOM_FUNC1_HPP 29 #define INCLUDED_MDDS_MULTI_TYPE_VECTOR_CUSTOM_FUNC1_HPP 31 #include "multi_type_vector_types.hpp" 32 #include "multi_type_vector_trait.hpp" 34 namespace mdds {
namespace mtv {
39 template<
typename _Block>
46 case _Block::block_type:
47 return _Block::create_block(init_size);
52 return element_block_func::create_new_block(type, init_size);
57 switch (get_block_type(block))
59 case _Block::block_type:
60 return _Block::clone_block(block);
65 return element_block_func::clone_block(block);
73 switch (get_block_type(*p))
75 case _Block::block_type:
76 _Block::delete_block(p);
79 element_block_func::delete_block(p);
85 switch (get_block_type(block))
87 case _Block::block_type:
88 _Block::resize_block(block, new_size);
91 element_block_func::resize_block(block, new_size);
97 switch (get_block_type(block))
99 case _Block::block_type:
100 _Block::print_block(block);
103 element_block_func::print_block(block);
109 switch (get_block_type(block))
111 case _Block::block_type:
112 _Block::erase_block(block, pos);
115 element_block_func::erase(block, pos);
121 switch (get_block_type(block))
123 case _Block::block_type:
124 _Block::erase_block(block, pos, size);
127 element_block_func_base::erase(block, pos, size);
133 switch (get_block_type(dest))
135 case _Block::block_type:
136 _Block::append_values_from_block(dest, src);
139 element_block_func_base::append_values_from_block(dest, src);
143 static void append_values_from_block(
146 switch (get_block_type(dest))
148 case _Block::block_type:
149 _Block::append_values_from_block(dest, src, begin_pos, len);
152 element_block_func_base::append_values_from_block(dest, src, begin_pos, len);
156 static void assign_values_from_block(
159 switch (get_block_type(dest))
161 case _Block::block_type:
162 _Block::assign_values_from_block(dest, src, begin_pos, len);
165 element_block_func_base::assign_values_from_block(dest, src, begin_pos, len);
169 static void prepend_values_from_block(
172 switch (get_block_type(dest))
174 case _Block::block_type:
175 _Block::prepend_values_from_block(dest, src, begin_pos, len);
178 element_block_func_base::prepend_values_from_block(dest, src, begin_pos, len);
182 static void swap_values(
185 switch (get_block_type(blk1))
187 case _Block::block_type:
188 _Block::swap_values(blk1, blk2, pos1, pos2, len);
191 element_block_func_base::swap_values(blk1, blk2, pos1, pos2, len);
195 static bool equal_block(
198 if (get_block_type(left) == _Block::block_type)
200 if (get_block_type(right) != _Block::block_type)
203 return _Block::get(left) == _Block::get(right);
205 else if (mtv::get_block_type(right) == _Block::block_type)
208 return element_block_func::equal_block(left, right);
213 switch (get_block_type(block))
215 case _Block::block_type:
216 _Block::overwrite_values(block, pos, len);
225 switch (get_block_type(block))
227 case _Block::block_type:
228 _Block::shrink_to_fit(block);
231 element_block_func::shrink_to_fit(block);
237 switch (get_block_type(block))
239 case _Block::block_type:
240 return _Block::size(block);
242 return element_block_func::size(block);
Definition: multi_type_vector_types.hpp:87
Definition: multi_type_vector_custom_func1.hpp:40
Definition: flat_segment_tree.hpp:46
static void overwrite_values(base_element_block &block, size_t pos, size_t len)
Definition: multi_type_vector_trait.hpp:618