| Home | Libraries | People | FAQ | More

## Class template split_interval_map

boost::icl::split_interval_map — implements a map as a map of intervals - on insertion overlapping intervals are split and associated values are combined.

## Synopsis

    // In header: <boost/icl/split_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:
      // types
      typedef Traits                                                                                            traits;
      typedef split_interval_map< DomainT, CodomainT, Traits, Compare, Combine, Section, Interval, Alloc >      type;
      typedef interval_map< DomainT, CodomainT, Traits, Compare, Combine, Section, Interval, Alloc >            joint_type;
      typedef type                                                                                              overloadable_type;
      typedef interval_base_map< type, DomainT, CodomainT, Traits, Compare, Combine, Section, Interval, Alloc > base_type;
      typedef DomainT                                                                                           domain_type;
      typedef CodomainT                                                                                         codomain_type;
      typedef base_type::iterator                                                                               iterator;
      typedef base_type::value_type                                                                             value_type;
      typedef base_type::element_type                                                                           element_type;
      typedef base_type::segment_type                                                                           segment_type;
      typedef base_type::domain_mapping_type                                                                    domain_mapping_type;
      typedef base_type::interval_mapping_type                                                                  interval_mapping_type;
      typedef base_type::ImplMapT                                                                               ImplMapT;
      typedef base_type::codomain_combine                                                                       codomain_combine;
      typedef interval_set< DomainT, Compare, Interval, Alloc >                                                 interval_set_type;
      typedef interval_set_type                                                                                 set_type;
      typedef set_type                                                                                          key_object_type;

      enum { fineness = 3 };

      // public member functions
      typedef ICL_INTERVAL_TYPE(Interval, DomainT, Compare);
      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 &);
      template<typename SubType>
        void assign(const interval_base_map< SubType, DomainT, CodomainT, Traits, Compare, Combine, Section, Interval, Alloc > &);
      template<typename SubType>
        split_interval_map &
        operator=(const interval_base_map< SubType, DomainT, CodomainT, Traits, Compare, Combine, Section, Interval, Alloc > &);
      split_interval_map(split_interval_map &&);
      split_interval_map & operator=(split_interval_map);

      // 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 &);
    };

## Description

### `split_interval_map` public member functions

1.     typedef ICL_INTERVAL_TYPE(Interval, DomainT, Compare);

2.     split_interval_map();

   Default constructor for the empty object.

3.     split_interval_map(const split_interval_map & src);

   Copy constructor.

4.     explicit split_interval_map(const domain_mapping_type & base_pair);

5.     explicit split_interval_map(const value_type & value_pair);

6.     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.

7.     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.

8.     split_interval_map(split_interval_map && src);

   Move constructor.

9.     split_interval_map & operator=(split_interval_map src);

   Move assignment operator.

### `split_interval_map` private member functions

1.     iterator handle_inserted(iterator it_) const;

2.     void handle_inserted(iterator, iterator) const;

3.     template<typename Combiner> void handle_left_combined(iterator it_);

4.     template<typename Combiner> void handle_combined(iterator it_);

5.     template<typename Combiner>
         void handle_preceeded_combined(iterator prior_, iterator & it_);

6.     template<typename Combiner>
         void handle_succeeded_combined(iterator it_, iterator);

7.     void handle_reinserted(iterator);

8.     template<typename Combiner>
         void gap_insert_at(iterator & it_, iterator prior_,
                            const interval_type & end_gap,
                            const codomain_type & co_val);