...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_map — implements a map as a map of intervals - on insertion overlapping intervals are split and associated values are combined.
// In header: <boost/icl/interval_map.hpp> template<typename DomainT, typename CodomainT, typename Traits, ICL_COMPARE Compare, ICL_COMBINE Combine, ICL_SECTION Section, ICL_INTERVAL(ICL_COMPARE) Interval, ICL_ALLOC Alloc> class split_interval_map : public boost::icl::interval_base_map< split_interval_map< DomainT, CodomainT, Traits, Compare, Combine, Section, Interval, Alloc >, DomainT, CodomainT, Traits, Compare, Combine, Section, Interval, Alloc > { public: // construct/copy/destruct split_interval_map(); split_interval_map(const split_interval_map &); explicit split_interval_map(const domain_mapping_type &); explicit split_interval_map(const value_type &); split_interval_map(split_interval_map &&); template<typename SubType> split_interval_map & operator=(const interval_base_map< SubType, DomainT, CodomainT, Traits, Compare, Combine, Section, Interval, Alloc > &); split_interval_map & operator=(split_interval_map); // public member functions typedef ICL_INTERVAL_TYPE(Interval, DomainT, Compare); template<typename SubType> void assign(const interval_base_map< SubType, DomainT, CodomainT, Traits, Compare, Combine, Section, Interval, Alloc > &); // private member functions iterator handle_inserted(iterator) const; void handle_inserted(iterator, iterator) const; template<typename Combiner> void handle_left_combined(iterator); template<typename Combiner> void handle_combined(iterator); template<typename Combiner> void handle_preceeded_combined(iterator, iterator &); template<typename Combiner> void handle_succeeded_combined(iterator, iterator); void handle_reinserted(iterator); template<typename Combiner> void gap_insert_at(iterator &, iterator, const interval_type &, const codomain_type &); };
split_interval_map
public
construct/copy/destructsplit_interval_map();Default constructor for the empty object.
split_interval_map(const split_interval_map & src);Copy constructor.
explicit split_interval_map(const domain_mapping_type & base_pair);
explicit split_interval_map(const value_type & value_pair);
split_interval_map(split_interval_map && src);Move constructor.
template<typename SubType> split_interval_map & operator=(const interval_base_map< SubType, DomainT, CodomainT, Traits, Compare, Combine, Section, Interval, Alloc > & src);Assignment operator for base type.
split_interval_map & operator=(split_interval_map src);Move assignment operator.
split_interval_map
public member functionstypedef ICL_INTERVAL_TYPE(Interval, DomainT, Compare);
template<typename SubType> void assign(const interval_base_map< SubType, DomainT, CodomainT, Traits, Compare, Combine, Section, Interval, Alloc > & src);Assignment from a base
interval_map
. split_interval_map
private member functionsiterator handle_inserted(iterator it_) const;
void handle_inserted(iterator, iterator) const;
template<typename Combiner> void handle_left_combined(iterator it_);
template<typename Combiner> void handle_combined(iterator it_);
template<typename Combiner> void handle_preceeded_combined(iterator prior_, iterator & it_);
template<typename Combiner> void handle_succeeded_combined(iterator it_, iterator);
void handle_reinserted(iterator);
template<typename Combiner> void gap_insert_at(iterator & it_, iterator prior_, const interval_type & end_gap, const codomain_type & co_val);