...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
boost::icl::split_interval_set — implements a set as a set of intervals - on insertion overlapping intervals are split
// In header: <boost/icl/split_interval_set.hpp> template<typename DomainT, ICL_COMPARE Compare = ICL_COMPARE_INSTANCE(ICL_COMPARE_DEFAULT, DomainT), ICL_INTERVAL(ICL_COMPARE) Interval = ICL_INTERVAL_INSTANCE(ICL_INTERVAL_DEFAULT, DomainT, Compare), ICL_ALLOC Alloc = std::allocator> class split_interval_set : public boost::icl::interval_base_set< split_interval_set< DomainT, ICL_COMPARE_INSTANCE(ICL_COMPARE_DEFAULT, DomainT), ICL_INTERVAL_INSTANCE(ICL_INTERVAL_DEFAULT, DomainT, ICL_COMPARE_INSTANCE(ICL_COMPARE_DEFAULT, DomainT)), std::allocator >, DomainT, ICL_COMPARE_INSTANCE(ICL_COMPARE_DEFAULT, DomainT), ICL_INTERVAL_INSTANCE(ICL_INTERVAL_DEFAULT, DomainT, ICL_COMPARE_INSTANCE(ICL_COMPARE_DEFAULT, DomainT)), std::allocator > { public: // types typedef split_interval_set< DomainT, Compare, Interval, Alloc > type; typedef interval_base_set< type, DomainT, Compare, Interval, Alloc > base_type; typedef interval_set< DomainT, Compare, Interval, Alloc > joint_type; typedef type overloadable_type; typedef type key_object_type; typedef DomainT domain_type; // The domain type of the set. typedef DomainT codomain_type; // The codomaintype is the same as domain_type. typedef DomainT element_type; // The element type of the set. typedef interval_type segment_type; // The segment type of the set. typedef exclusive_less_than< interval_type > interval_compare; // Comparison functor for intervals. typedef exclusive_less_than< interval_type > key_compare; // Comparison functor for keys. typedef Alloc< interval_type > allocator_type; // The allocator type of the set. typedef Alloc< DomainT > domain_allocator_type; // allocator type of the corresponding element set typedef base_type::atomized_type atomized_type; // The corresponding atomized type representing this interval container of elements. typedef base_type::ImplSetT ImplSetT; // Container type for the implementation. typedef ImplSetT::key_type key_type; // key type of the implementing container typedef ImplSetT::value_type data_type; // data type of the implementing container typedef ImplSetT::value_type value_type; // value type of the implementing container typedef ImplSetT::iterator iterator; // iterator for iteration over intervals typedef ImplSetT::const_iterator const_iterator; // const_iterator for iteration over intervals enum { fineness = 3 }; // public member functions typedef ICL_INTERVAL_TYPE(Interval, DomainT, Compare); typedef ICL_COMPARE_DOMAIN(Compare, DomainT); split_interval_set(); split_interval_set(const split_interval_set &); template<typename SubType> split_interval_set(const interval_base_set< SubType, DomainT, Compare, Interval, Alloc > &); explicit split_interval_set(const interval_type &); explicit split_interval_set(const domain_type &); template<typename SubType> void assign(const interval_base_set< SubType, DomainT, Compare, Interval, Alloc > &); template<typename SubType> split_interval_set & operator=(const interval_base_set< SubType, DomainT, Compare, Interval, Alloc > &); split_interval_set(split_interval_set &&); split_interval_set & operator=(split_interval_set); // private member functions iterator handle_inserted(iterator); iterator add_over(const interval_type &, iterator); iterator add_over(const interval_type &); };
split_interval_set
public member functionstypedef ICL_INTERVAL_TYPE(Interval, DomainT, Compare);The interval type of the set.
typedef ICL_COMPARE_DOMAIN(Compare, DomainT);Comparison functor for domain values.
split_interval_set();Default constructor for the empty object.
split_interval_set(const split_interval_set & src);Copy constructor.
template<typename SubType> split_interval_set(const interval_base_set< SubType, DomainT, Compare, Interval, Alloc > & src);Copy constructor for base_type.
explicit split_interval_set(const interval_type & elem);Constructor for a single element.
explicit split_interval_set(const domain_type & itv);Constructor for a single interval.
template<typename SubType> void assign(const interval_base_set< SubType, DomainT, Compare, Interval, Alloc > & src);Assignment from a base interval_set.
template<typename SubType> split_interval_set & operator=(const interval_base_set< SubType, DomainT, Compare, Interval, Alloc > & src);Assignment operator for base type.
split_interval_set(split_interval_set && src);Move constructor.
split_interval_set & operator=(split_interval_set src);Move assignment operator.