boost::icl::interval_base_map — Implements a map as a map of intervals (base class)
Synopsis
// In header: <boost/icl/interval_base_map.hpp>
template<typename SubType,typename DomainT,typename CodomainT,typename Traits =icl::partial_absorber,ICL_COMPARE Compare =ICL_COMPARE_INSTANCE(ICL_COMPARE_DEFAULT,DomainT),ICL_COMBINE Combine =ICL_COMBINE_INSTANCE(icl::inplace_plus,CodomainT),ICL_SECTION Section =ICL_SECTION_INSTANCE(icl::inter_section,CodomainT),ICL_INTERVAL(ICL_COMPARE) Interval =ICL_INTERVAL_INSTANCE(ICL_INTERVAL_DEFAULT,DomainT,Compare),ICL_ALLOC Alloc =std::allocator>classinterval_base_map{public:// typestypedefinterval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>type;typedefSubTypesub_type;// The designated derived or sub_type of this base class. typedeftypeoverloadable_type;// Auxilliary type for overloadresolution. typedefTraitstraits;// Traits of an itl map. typedeficl::map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>atomized_type;// The atomized type representing the corresponding container of elements. typedefDomainTdomain_type;// Domain type (type of the keys) of the map. typedefboost::call_traits<DomainT>::param_typedomain_param;typedefCodomainTcodomain_type;// Domain type (type of the keys) of the map. typedefmapping_pair<domain_type,codomain_type>domain_mapping_type;// Auxiliary type to help the compiler resolve ambiguities when using std::make_pair. typedefdomain_mapping_typeelement_type;// Conceptual is a map a set of elements of type element_type. typedefstd::pair<interval_type,CodomainT>interval_mapping_type;// Auxiliary type for overload resolution. typedefstd::pair<interval_type,CodomainT>segment_type;// Type of an interval containers segment, that is spanned by an interval. typedefdifference_type_of<domain_type>::typedifference_type;// The difference type of an interval which is sometimes different form the domain_type. typedefsize_type_of<domain_type>::typesize_type;// The size type of an interval which is mostly std::size_t. typedefinverse<codomain_combine>::typeinverse_codomain_combine;// Inverse Combine functor for codomain value aggregation. typedefmpl::if_<has_set_semantics<codomain_type>,ICL_SECTION_CODOMAIN(Section,CodomainT),codomain_combine>::typecodomain_intersect;// Intersection functor for codomain values. typedefinverse<codomain_intersect>::typeinverse_codomain_intersect;// Inverse Combine functor for codomain value intersection. typedefexclusive_less_than<interval_type>interval_compare;// Comparison functor for intervals which are keys as well. typedefexclusive_less_than<interval_type>key_compare;// Comparison functor for keys. typedefAlloc<std::pair<constinterval_type,codomain_type>>allocator_type;// The allocator type of the set. typedefICL_IMPL_SPACE::map<interval_type,codomain_type,key_compare,allocator_type>ImplMapT;// Container type for the implementation. typedefImplMapT::key_typekey_type;// key type of the implementing container typedefImplMapT::value_typevalue_type;// value type of the implementing container typedefImplMapT::value_type::second_typedata_type;// data type of the implementing container typedefImplMapT::pointerpointer;// pointer type typedefImplMapT::const_pointerconst_pointer;// const pointer type typedefImplMapT::referencereference;// reference type typedefImplMapT::const_referenceconst_reference;// const reference type typedefImplMapT::iteratoriterator;// iterator for iteration over intervals typedefImplMapT::const_iteratorconst_iterator;// const_iterator for iteration over intervals typedefImplMapT::reverse_iteratorreverse_iterator;// iterator for reverse iteration over intervals typedefImplMapT::const_reverse_iteratorconst_reverse_iterator;// const_iterator for iteration over intervals typedefboost::icl::element_iterator<iterator>element_iterator;// element iterator: Depreciated, see documentation. typedefboost::icl::element_iterator<const_iterator>element_const_iterator;// const element iterator: Depreciated, see documentation. typedefboost::icl::element_iterator<reverse_iterator>element_reverse_iterator;// element reverse iterator: Depreciated, see documentation. typedefboost::icl::element_iterator<const_reverse_iterator>element_const_reverse_iterator;// element const reverse iterator: Depreciated, see documentation. typedefon_absorbtion<type,codomain_combine,Traits::absorbs_identities>::typeon_codomain_absorbtion;// member classes/structs/unionstemplate<typename Type,bool has_set_semantics>structon_codomain_model{};template<typename Type>structon_codomain_model<Type,false>{// typestypedefType::interval_typeinterval_type;typedefType::codomain_typecodomain_type;typedefType::segment_typesegment_type;typedefType::codomain_combinecodomain_combine;// public static functionsstaticvoidadd(Type&,interval_type&,constcodomain_type&,constcodomain_type&);};template<typename Type>structon_codomain_model<Type,true>{// typestypedefType::interval_typeinterval_type;typedefType::codomain_typecodomain_type;typedefType::segment_typesegment_type;typedefType::codomain_combinecodomain_combine;typedefType::inverse_codomain_intersectinverse_codomain_intersect;// public static functionsstaticvoidadd(Type&,interval_type&,constcodomain_type&,constcodomain_type&);};template<typename Type,bool is_total>structon_definedness{};template<typename Type>structon_definedness<Type,false>{// public static functionsstaticvoidadd_intersection(Type&,constType&,constsegment_type&);};template<typename Type>structon_definedness<Type,true>{// public static functionsstaticvoidadd_intersection(Type&,constType&,constsegment_type&);};template<typename Type,bool is_total_invertible>structon_invertible{};template<typename Type>structon_invertible<Type,false>{// typestypedefType::segment_typesegment_type;typedefType::inverse_codomain_combineinverse_codomain_combine;// public static functionsstaticvoidsubtract(Type&,constsegment_type&);};template<typename Type>structon_invertible<Type,true>{// typestypedefType::segment_typesegment_type;typedefType::inverse_codomain_combineinverse_codomain_combine;// public static functionsstaticvoidsubtract(Type&,constsegment_type&);};template<typename Type,bool is_total,bool absorbs_identities>structon_total_absorbable{};template<typename Type,bool absorbs_identities>structon_total_absorbable<Type,false,absorbs_identities>{// typestypedefType::segment_typesegment_type;typedefType::codomain_typecodomain_type;typedefType::interval_typeinterval_type;typedefType::value_typevalue_type;typedefType::const_iteratorconst_iterator;typedefType::set_typeset_type;typedefType::inverse_codomain_intersectinverse_codomain_intersect;// public static functionsstaticvoidflip(Type&,constsegment_type&);};template<typename Type>structon_total_absorbable<Type,true,false>{// typestypedefType::segment_typesegment_type;typedefType::codomain_typecodomain_type;// public static functionsstaticvoidflip(Type&,constsegment_type&);};template<typename Type>structon_total_absorbable<Type,true,true>{// public static functionsstaticvoidflip(Type&,consttypenameType::segment_type&);};// construct/copy/destructinterval_base_map();interval_base_map(constinterval_base_map&);interval_base_map(interval_base_map&&);interval_base_map&operator=(interval_base_map);// public member functionstypedefICL_INTERVAL_TYPE(Interval,DomainT,Compare);typedefICL_COMPARE_DOMAIN(Compare,DomainT);typedefICL_COMPARE_DOMAIN(Compare,segment_type);typedefICL_COMBINE_CODOMAIN(Combine,CodomainT);BOOST_STATIC_CONSTANT(bool,is_total_invertible=(Traits::is_total&&has_inverse<codomain_type>::value));BOOST_STATIC_CONSTANT(int,fineness=0);voidswap(interval_base_map&);voidclear();boolempty()const;size_typesize()const;std::size_titerative_size()const;const_iteratorfind(constdomain_type&)const;const_iteratorfind(constinterval_type&)const;codomain_typeoperator()(constdomain_type&)const;SubType&add(constelement_type&);SubType&add(constsegment_type&);iteratoradd(iterator,constsegment_type&);SubType&subtract(constelement_type&);SubType&subtract(constsegment_type&);SubType&insert(constelement_type&);SubType&insert(constsegment_type&);iteratorinsert(iterator,constsegment_type&);SubType&set(constelement_type&);SubType&set(constsegment_type&);SubType&erase(constelement_type&);SubType&erase(constsegment_type&);SubType&erase(constdomain_type&);SubType&erase(constinterval_type&);voiderase(iterator);voiderase(iterator,iterator);voidadd_intersection(SubType&,constsegment_type&)const;SubType&flip(constelement_type&);SubType&flip(constsegment_type&);iteratorlower_bound(constkey_type&);iteratorupper_bound(constkey_type&);const_iteratorlower_bound(constkey_type&)const;const_iteratorupper_bound(constkey_type&)const;std::pair<iterator,iterator>equal_range(constkey_type&);std::pair<const_iterator,const_iterator>equal_range(constkey_type&)const;iteratorbegin();iteratorend();const_iteratorbegin()const;const_iteratorend()const;reverse_iteratorrbegin();reverse_iteratorrend();const_reverse_iteratorrbegin()const;const_reverse_iteratorrend()const;template<typename Combiner>interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>::iterator_add(constsegment_type&);template<typename Combiner>interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>::iterator_add(iterator,constsegment_type&);// private member functionstemplate<typename Combiner>iterator_add(constsegment_type&);template<typename Combiner>iterator_add(iterator,constsegment_type&);template<typename Combiner>void_subtract(constsegment_type&);iterator_insert(constsegment_type&);iterator_insert(iterator,constsegment_type&);template<typename Combiner>voidadd_segment(constinterval_type&,constCodomainT&,iterator&);template<typename Combiner>voidadd_main(interval_type&,constCodomainT&,iterator&,constiterator&);template<typename Combiner>voidadd_rear(constinterval_type&,constCodomainT&,iterator&);voidadd_front(constinterval_type&,iterator&);voidsubtract_front(constinterval_type&,iterator&);template<typename Combiner>voidsubtract_main(constCodomainT&,iterator&,constiterator&);template<typename Combiner>voidsubtract_rear(interval_type&,constCodomainT&,iterator&);voidinsert_main(constinterval_type&,constCodomainT&,iterator&,constiterator&);voiderase_rest(interval_type&,constCodomainT&,iterator&,constiterator&);template<typename FragmentT>voidtotal_add_intersection(SubType&,constFragmentT&)const;voidpartial_add_intersection(SubType&,constsegment_type&)const;voidpartial_add_intersection(SubType&,constelement_type&)const;// protected member functionstemplate<typename Combiner>iteratorgap_insert(iterator,constinterval_type&,constcodomain_type&);template<typename Combiner>std::pair<iterator,bool>add_at(constiterator&,constinterval_type&,constcodomain_type&);std::pair<iterator,bool>insert_at(constiterator&,constinterval_type&,constcodomain_type&);sub_type*that();constsub_type*that()const;};
Добавление пары значений интервала<interval_value_pair>к карте. Итератор<prior_>является намеком на положение<interval_value_pair>может быть вставлен после.
Статья Class template interval_base_map раздела Chapter 1. Boost.Icl Header <boost/icl/interval_base_map.hpp> может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.