@@ -26,11 +26,11 @@ namespace lib_interval_tree
2626// ############################################################################################################
2727 using default_interval_value_type = int ;
2828// ############################################################################################################
29- template <typename numerical_type, typename interval_kind_>
29+ template <typename numerical_type, typename interval_kind_ = closed >
3030 struct interval
3131 {
3232 friend node <numerical_type, interval <numerical_type, interval_kind_>>;
33- friend interval_tree <numerical_type, interval_kind_>;
33+ // friend interval_tree <numerical_type, interval_kind_>;
3434
3535 public:
3636 using value_type = numerical_type;
@@ -192,7 +192,7 @@ namespace lib_interval_tree
192192 using value_type = numerical_type;
193193
194194 public:
195- friend lib_interval_tree::interval_tree <numerical_type, typename interval_type::interval_kind >;
195+ friend lib_interval_tree::interval_tree <interval_type>;
196196 friend lib_interval_tree::const_interval_tree_iterator <node <numerical_type, interval_type> >;
197197 friend lib_interval_tree::interval_tree_iterator <node <numerical_type, interval_type> >;
198198
@@ -314,9 +314,9 @@ namespace lib_interval_tree
314314 class basic_interval_tree_iterator : public std ::forward_iterator_tag
315315 {
316316 public:
317- friend interval_tree <typename node_type::interval_type::value_type, typename node_type::interval_type::interval_kind >;
317+ friend interval_tree <typename node_type::interval_type>;
318318
319- using tree_type = interval_tree <typename node_type::interval_type::value_type, typename node_type::interval_type::interval_kind >;
319+ using tree_type = interval_tree <typename node_type::interval_type>;
320320 using value_type = node_type;
321321
322322 using node_ptr_t = typename std::conditional <
@@ -377,12 +377,10 @@ namespace lib_interval_tree
377377 template <typename node_type>
378378 class const_interval_tree_iterator
379379 : public basic_interval_tree_iterator <node_type,
380- interval_tree <typename node_type::interval_type::value_type,
381- typename node_type::interval_type::interval_kind> const *>
380+ interval_tree <typename node_type::interval_type> const *>
382381 {
383382 public:
384- using tree_type = interval_tree <typename node_type::interval_type::value_type,
385- typename node_type::interval_type::interval_kind>;
383+ using tree_type = interval_tree <typename node_type::interval_type>;
386384 using iterator_base = basic_interval_tree_iterator <node_type, tree_type const *>;
387385 using value_type = typename iterator_base::value_type;
388386 using iterator_base::node_;
@@ -491,12 +489,10 @@ namespace lib_interval_tree
491489 template <typename node_type>
492490 class interval_tree_iterator
493491 : public basic_interval_tree_iterator <node_type,
494- interval_tree <typename node_type::interval_type::value_type,
495- typename node_type::interval_type::interval_kind>*>
492+ interval_tree <typename node_type::interval_type>*>
496493 {
497494 public:
498- using tree_type = interval_tree <typename node_type::interval_type::value_type,
499- typename node_type::interval_type::interval_kind>;
495+ using tree_type = interval_tree <typename node_type::interval_type>;
500496 using iterator_base = basic_interval_tree_iterator <node_type, tree_type*>;
501497 using value_type = typename iterator_base::value_type;
502498 using iterator_base::node_;
@@ -602,12 +598,12 @@ namespace lib_interval_tree
602598 }
603599 };
604600// ############################################################################################################
605- template <typename numerical_type = default_interval_value_type, typename interval_kind = closed>
601+ template <typename IntervalT = interval < int , closed> >
606602 class interval_tree
607603 {
608604 public:
609- using value_type = numerical_type ;
610- using interval_type = interval < value_type, interval_kind> ;
605+ using interval_type = IntervalT ;
606+ using value_type = typename interval_type:: value_type;
611607 using node_type = node <value_type, interval_type>;
612608 using iterator = interval_tree_iterator <node_type>;
613609 using const_iterator = const_interval_tree_iterator <node_type>;
@@ -685,15 +681,15 @@ namespace lib_interval_tree
685681 while (x)
686682 {
687683 y = x;
688- if (z->interval_ .low_ < x->interval_ .low_ )
684+ if (z->interval_ .low () < x->interval_ .low () )
689685 x = x->left_ ;
690686 else
691687 x = x->right_ ;
692688 }
693689 z->parent_ = y;
694690 if (!y)
695691 root_ = z;
696- else if (z->interval_ .low_ < y->interval_ .low_ )
692+ else if (z->interval_ .low () < y->interval_ .low () )
697693 y->left_ = z;
698694 else
699695 y->right_ = z;
@@ -1151,18 +1147,18 @@ namespace lib_interval_tree
11511147
11521148 // max fixup
11531149 if (x->left_ && x->right_ )
1154- x->max_ = std::max (x->interval_ .high_ , std::max (x->left_ ->max_ , x->right_ ->max_ ));
1150+ x->max_ = std::max (x->interval_ .high () , std::max (x->left_ ->max_ , x->right_ ->max_ ));
11551151 else if (x->left_ )
1156- x->max_ = std::max (x->interval_ .high_ , x->left_ ->max_ );
1152+ x->max_ = std::max (x->interval_ .high () , x->left_ ->max_ );
11571153 else if (x->right_ )
1158- x->max_ = std::max (x->interval_ .high_ , x->right_ ->max_ );
1154+ x->max_ = std::max (x->interval_ .high () , x->right_ ->max_ );
11591155 else
1160- x->max_ = x->interval_ .high_ ;
1156+ x->max_ = x->interval_ .high () ;
11611157
11621158 if (y->right_ )
1163- y->max_ = std::max (y->interval_ .high_ , std::max (y->right_ ->max_ , x->max_ ));
1159+ y->max_ = std::max (y->interval_ .high () , std::max (y->right_ ->max_ , x->max_ ));
11641160 else
1165- y->max_ = std::max (y->interval_ .high_ , x->max_ );
1161+ y->max_ = std::max (y->interval_ .high () , x->max_ );
11661162 }
11671163
11681164 void right_rotate (node_type* y)
@@ -1186,18 +1182,18 @@ namespace lib_interval_tree
11861182
11871183 // max fixup
11881184 if (y->left_ && y->right_ )
1189- y->max_ = std::max (y->interval_ .high_ , std::max (y->left_ ->max_ , y->right_ ->max_ ));
1185+ y->max_ = std::max (y->interval_ .high () , std::max (y->left_ ->max_ , y->right_ ->max_ ));
11901186 else if (y->left_ )
1191- y->max_ = std::max (y->interval_ .high_ , y->left_ ->max_ );
1187+ y->max_ = std::max (y->interval_ .high () , y->left_ ->max_ );
11921188 else if (y->right_ )
1193- y->max_ = std::max (y->interval_ .high_ , y->right_ ->max_ );
1189+ y->max_ = std::max (y->interval_ .high () , y->right_ ->max_ );
11941190 else
1195- y->max_ = y->interval_ .high_ ;
1191+ y->max_ = y->interval_ .high () ;
11961192
11971193 if (x->left_ )
1198- x->max_ = std::max (x->interval_ .high_ , std::max (x->left_ ->max_ , y->max_ ));
1194+ x->max_ = std::max (x->interval_ .high () , std::max (x->left_ ->max_ , y->max_ ));
11991195 else
1200- x->max_ = std::max (x->interval_ .high_ , y->max_ );
1196+ x->max_ = std::max (x->interval_ .high () , y->max_ );
12011197 }
12021198
12031199 void recalculate_max (node_type* reacalculation_root)
0 commit comments