Skip to content

Commit 77b0337

Browse files
committed
Changed tree template parameter so it takes an interval, not the interval parameters.
1 parent a97347e commit 77b0337

File tree

6 files changed

+36
-37
lines changed

6 files changed

+36
-37
lines changed

interval_tree.hpp

Lines changed: 26 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -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)

interval_tree_fwd.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ namespace lib_interval_tree
55
template <typename numerical_type, typename interval_kind_>
66
struct interval;
77

8-
template <typename numerical_type, typename interval_kind>
8+
template <typename IntervalT>
99
class interval_tree;
1010

1111
template <typename numerical_type, typename interval_type>

tests/erase_tests.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class EraseTests
1111
using types = IntervalTypes <int>;
1212

1313
protected:
14-
lib_interval_tree::interval_tree <int> tree;
14+
IntervalTypes <int>::tree_type tree;
1515
std::default_random_engine gen;
1616
std::uniform_int_distribution <int> distSmall{-500, 500};
1717
std::uniform_int_distribution <int> distLarge{-50000, 50000};

tests/insert_tests.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class InsertTests
1313
using types = IntervalTypes <int>;
1414

1515
protected:
16-
lib_interval_tree::interval_tree <int> tree;
16+
IntervalTypes <int>::tree_type tree;
1717
std::default_random_engine gen;
1818
std::uniform_int_distribution <int> distSmall{-500, 500};
1919
std::uniform_int_distribution <int> distLarge{-50000, 50000};

tests/interval_tests.hpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,12 @@ class DistanceTests
3434

3535
TEST_F(IntervalTests, FailBadBorders)
3636
{
37-
EXPECT_DEATH(({
37+
auto f = []()
38+
{
3839
[[maybe_unused]] auto ival = types::interval_type{1 BOOST_PP_COMMA() 0};
39-
}), "low <= high");
40+
};
41+
42+
EXPECT_DEATH(f(), "low <= high");
4043
}
4144

4245
TEST_F(IntervalTests, ShallCreateInterval)

tests/typedefs.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ template <typename ContainedT>
44
struct IntervalTypes
55
{
66
using value_type = ContainedT;
7-
using tree_type = lib_interval_tree::interval_tree <ContainedT>;
7+
using interval_type = lib_interval_tree::interval <ContainedT>;
8+
using tree_type = lib_interval_tree::interval_tree <interval_type>;
89
using iterator_type = typename tree_type::iterator;
9-
using interval_type = typename tree_type::interval_type;
1010
};

0 commit comments

Comments
 (0)