@@ -191,11 +191,13 @@ namespace lib_interval_tree
191
191
// ############################################################################################################
192
192
template <
193
193
typename numerical_type = default_interval_value_type,
194
- typename interval_type_ = interval<numerical_type, closed>>
194
+ typename interval_type_ = interval<numerical_type, closed>,
195
+ typename derived = void >
195
196
class node
196
197
{
197
198
protected:
198
- using node_type = node<numerical_type, interval_type_>;
199
+ using node_type =
200
+ std::conditional_t <std::is_same<derived, void >::value, node<numerical_type, interval_type_>, derived>;
199
201
200
202
public:
201
203
using interval_type = interval_type_;
@@ -217,7 +219,7 @@ namespace lib_interval_tree
217
219
friend void increment_reverse (T& iter);
218
220
219
221
public:
220
- node (node * parent, interval_type interval)
222
+ node (node_type * parent, interval_type interval)
221
223
: interval_{std::move (interval)}
222
224
, max_{interval.high ()}
223
225
, parent_{parent}
@@ -265,23 +267,23 @@ namespace lib_interval_tree
265
267
/* *
266
268
* Returns the parent node up the tree.
267
269
*/
268
- node const * parent () const
270
+ node_type const * parent () const
269
271
{
270
272
return parent_;
271
273
}
272
274
273
275
/* *
274
276
* Returns the left node (readonly).
275
277
*/
276
- node const * left () const
278
+ node_type const * left () const
277
279
{
278
280
return left_;
279
281
}
280
282
281
283
/* *
282
284
* Returns the right node (readonly).
283
285
*/
284
- node const * right () const
286
+ node_type const * right () const
285
287
{
286
288
return right_;
287
289
}
@@ -338,9 +340,9 @@ namespace lib_interval_tree
338
340
protected:
339
341
interval_type interval_;
340
342
value_type max_;
341
- node * parent_;
342
- node * left_;
343
- node * right_;
343
+ node_type * parent_;
344
+ node_type * left_;
345
+ node_type * right_;
344
346
rb_color color_;
345
347
};
346
348
// ############################################################################################################
@@ -513,7 +515,7 @@ namespace lib_interval_tree
513
515
throw std::out_of_range (" interval_tree_iterator out of bounds" );
514
516
}
515
517
516
- typename value_type::interval_type* operator ->() const
518
+ typename value_type::interval_type const * operator ->() const
517
519
{
518
520
if (node_)
519
521
return node_->interval ();
0 commit comments