28 #ifndef INCLUDED_MDDS_RECTANGLE_SET_HPP 29 #define INCLUDED_MDDS_RECTANGLE_SET_HPP 31 #include "segment_tree.hpp" 36 template<
typename _Key,
typename _Value>
40 typedef _Key key_type;
41 typedef _Value value_type;
55 rectangle(key_type _x1, key_type _y1, key_type _x2, key_type _y2) :
56 x1(_x1), y1(_y1), x2(_x2), y2(_y2) {}
58 rectangle(
const rectangle& r) :
59 x1(r.x1), y1(r.y1), x2(r.x2), y2(r.y2) {}
61 rectangle& operator= (
const rectangle& r)
72 return x1 == r.x1 && y1 == r.y1 && x2 == r.x2 && y2 == r.y2;
75 bool operator!= (
const rectangle& r)
const 80 typedef std::unordered_map<value_type, rectangle> dataset_type;
85 typedef std::pair<key_type, key_type> interval_type;
86 typedef std::map<interval_type, std::unique_ptr<inner_type>> inner_segment_map_type;
89 typedef typename inner_type::search_result_type search_result_type;
99 typedef typename inner_type::search_result_base::res_chains_type res_chains_type;
100 typedef typename inner_type::search_result_base::res_chains_ptr res_chains_ptr;
101 typedef typename inner_type::data_chain_type data_chain_type;
109 iterator(const res_chains_ptr& p) : inner_type::iterator_base(p) {}
111 iterator() : inner_type::iterator_base() {}
120 inner_type::search_result_base::get_res_chains());
128 inner_type::search_result_base::get_res_chains());
166 bool insert(key_type x1, key_type y1, key_type x2, key_type y2, value_type data);
177 bool search(key_type x, key_type y, search_result_type& result);
196 void remove(value_type data);
218 void build_inner_map(
const inner_segment_map_type& r);
219 void build_outer_segment_tree();
221 #ifdef MDDS_UNIT_TEST 223 void dump_rectangles()
const;
224 bool verify_rectangles(
const dataset_type& expected)
const;
233 outer_type m_outer_segments;
238 inner_segment_map_type m_inner_map;
245 dataset_type m_dataset;
250 #include "rectangle_set_def.inl" Definition: segment_tree.hpp:50
Definition: rectangle_set.hpp:105
Definition: rectangle_set.hpp:96
bool search(key_type x, key_type y, search_result_type &result)
bool operator==(const rectangle_set &r) const
bool insert(key_type x1, key_type y1, key_type x2, key_type y2, value_type data)
Definition: rectangle_set.hpp:37
Definition: flat_segment_tree.hpp:46