API showcase¶
Constructors¶
#include <intervalset.hpp>
void constructors_example()
{
// Create an empty IntervalSet
IntervalSet s1;
// Copy an existing IntervalSet
IntervalSet s2 = s1;
// Create an IntervalSet from one interval
IntervalSet s3 = IntervalSet::ClosedInterval(0,1);
// Create an IntervalSet from one integer
IntervalSet s4 = 2;
}
Set operations¶
#include <intervalset.hpp>
void set_operations_example()
{
IntervalSet s1 = IntervalSet::from_string_hyphen("3,4-7,10-20,22,24-28");
IntervalSet s2 = IntervalSet::from_string_hyphen("4,19-21,23");
// Classical set operations
IntervalSet s_union = (s1 + s2);
IntervalSet s_intersection = (s1 & s2);
IntervalSet s_difference = (s1 - s2);
// In-place operations
s1 += s2; // s1 = s1 ∪ s2
s1 &= s2; // s1 = s1 ∩ s2
s1 -= s2; // s1 = s1 \ s2
}
Accessing elements¶
#include <intervalset.hpp>
void access_example()
{
IntervalSet s = IntervalSet::from_string_hyphen("3,10-16");
s.first_element(); // 3
s.left(1); // 3
s.left(2); // {3,10}
s.left(4); // {3,10,11,12}
s.random_pick(2); // Two different random elements from s
// Access can be done via operator[]
// WARNING: This is very slow! Use iterators if performance matters.
s[0]; // 3
s[4]; // 13
}
Testing membership¶
#include <intervalset.hpp>
void membership_example()
{
IntervalSet s1 = IntervalSet::from_string_hyphen("3,4-7,10-20,22,24-28");
IntervalSet s2 = IntervalSet::from_string_hyphen("5-6,15,19,28");
s1.contains(4); // Does s1 contains 4? Yup.
s1.contains(IntervalSet::ClosedInterval(8,25)); // Nope.
s2.is_subset_of(s1); // Yup, s2 ⊆ s1
}
Iterating elements and intervals¶
#include <intervalset.hpp>
void traversal_example()
{
IntervalSet s = IntervalSet::from_string_hyphen("4,19-21,23");
// The intervals can be traversed
for (auto it = s.intervals_begin(); it != s.intervals_end(); ++it)
{
// Use operator* to retrieve the interval
const IntervalSet::ClosedInterval & itv = *it;
// The two bounding elements can be retrieved this way
int interval_minimum_element = lower(itv);
int interval_maximum_element = upper(itv);
}
// The individual values can also be traversed
// Please DO note that this may be way slower than iterating over intervals
for (auto it = s.elements_begin(); it != s.elements_end(); ++it)
{
// Use operator* to retrieve the element value
int element = *it;
}
}