@@ -26,11 +26,11 @@ namespace lib_interval_tree
26
26
// ############################################################################################################
27
27
using default_interval_value_type = int ;
28
28
// ############################################################################################################
29
- template <typename numerical_type, typename interval_kind_>
29
+ template <typename numerical_type, typename interval_kind_ = closed >
30
30
struct interval
31
31
{
32
32
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_>;
34
34
35
35
public:
36
36
using value_type = numerical_type;
@@ -192,7 +192,7 @@ namespace lib_interval_tree
192
192
using value_type = numerical_type;
193
193
194
194
public:
195
- friend lib_interval_tree::interval_tree <numerical_type, typename interval_type::interval_kind >;
195
+ friend lib_interval_tree::interval_tree <interval_type>;
196
196
friend lib_interval_tree::const_interval_tree_iterator <node <numerical_type, interval_type> >;
197
197
friend lib_interval_tree::interval_tree_iterator <node <numerical_type, interval_type> >;
198
198
@@ -314,9 +314,9 @@ namespace lib_interval_tree
314
314
class basic_interval_tree_iterator : public std ::forward_iterator_tag
315
315
{
316
316
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>;
318
318
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>;
320
320
using value_type = node_type;
321
321
322
322
using node_ptr_t = typename std::conditional <
@@ -377,12 +377,10 @@ namespace lib_interval_tree
377
377
template <typename node_type>
378
378
class const_interval_tree_iterator
379
379
: 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 *>
382
381
{
383
382
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>;
386
384
using iterator_base = basic_interval_tree_iterator <node_type, tree_type const *>;
387
385
using value_type = typename iterator_base::value_type;
388
386
using iterator_base::node_;
@@ -491,12 +489,10 @@ namespace lib_interval_tree
491
489
template <typename node_type>
492
490
class interval_tree_iterator
493
491
: 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>*>
496
493
{
497
494
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>;
500
496
using iterator_base = basic_interval_tree_iterator <node_type, tree_type*>;
501
497
using value_type = typename iterator_base::value_type;
502
498
using iterator_base::node_;
@@ -602,12 +598,12 @@ namespace lib_interval_tree
602
598
}
603
599
};
604
600
// ############################################################################################################
605
- template <typename numerical_type = default_interval_value_type, typename interval_kind = closed>
601
+ template <typename IntervalT = interval < int , closed> >
606
602
class interval_tree
607
603
{
608
604
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;
611
607
using node_type = node <value_type, interval_type>;
612
608
using iterator = interval_tree_iterator <node_type>;
613
609
using const_iterator = const_interval_tree_iterator <node_type>;
@@ -685,15 +681,15 @@ namespace lib_interval_tree
685
681
while (x)
686
682
{
687
683
y = x;
688
- if (z->interval_ .low_ < x->interval_ .low_ )
684
+ if (z->interval_ .low () < x->interval_ .low () )
689
685
x = x->left_ ;
690
686
else
691
687
x = x->right_ ;
692
688
}
693
689
z->parent_ = y;
694
690
if (!y)
695
691
root_ = z;
696
- else if (z->interval_ .low_ < y->interval_ .low_ )
692
+ else if (z->interval_ .low () < y->interval_ .low () )
697
693
y->left_ = z;
698
694
else
699
695
y->right_ = z;
@@ -1151,18 +1147,18 @@ namespace lib_interval_tree
1151
1147
1152
1148
// max fixup
1153
1149
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_ ));
1155
1151
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_ );
1157
1153
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_ );
1159
1155
else
1160
- x->max_ = x->interval_ .high_ ;
1156
+ x->max_ = x->interval_ .high () ;
1161
1157
1162
1158
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_ ));
1164
1160
else
1165
- y->max_ = std::max (y->interval_ .high_ , x->max_ );
1161
+ y->max_ = std::max (y->interval_ .high () , x->max_ );
1166
1162
}
1167
1163
1168
1164
void right_rotate (node_type* y)
@@ -1186,18 +1182,18 @@ namespace lib_interval_tree
1186
1182
1187
1183
// max fixup
1188
1184
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_ ));
1190
1186
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_ );
1192
1188
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_ );
1194
1190
else
1195
- y->max_ = y->interval_ .high_ ;
1191
+ y->max_ = y->interval_ .high () ;
1196
1192
1197
1193
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_ ));
1199
1195
else
1200
- x->max_ = std::max (x->interval_ .high_ , y->max_ );
1196
+ x->max_ = std::max (x->interval_ .high () , y->max_ );
1201
1197
}
1202
1198
1203
1199
void recalculate_max (node_type* reacalculation_root)
0 commit comments