diff options
Diffstat (limited to 'boost/icl/interval_base_map.hpp')
-rw-r--r-- | boost/icl/interval_base_map.hpp | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/boost/icl/interval_base_map.hpp b/boost/icl/interval_base_map.hpp index 9f265a67cd..4de6962bcc 100644 --- a/boost/icl/interval_base_map.hpp +++ b/boost/icl/interval_base_map.hpp @@ -215,14 +215,7 @@ public: BOOST_CONCEPT_ASSERT((EqualComparableConcept<CodomainT>)); } - /** Copy assignment operator */ - interval_base_map& operator = (const interval_base_map& src) - { - this->_map = src._map; - return *this; - } - -# ifndef BOOST_NO_RVALUE_REFERENCES +# ifndef BOOST_ICL_NO_CXX11_RVALUE_REFERENCES //========================================================================== //= Move semantics //========================================================================== @@ -237,14 +230,23 @@ public: } /** Move assignment operator */ - interval_base_map& operator = (interval_base_map&& src) - { + interval_base_map& operator = (interval_base_map src) + { //call by value sice 'src' is a "sink value" this->_map = boost::move(src._map); return *this; } //========================================================================== -# endif // BOOST_NO_RVALUE_REFERENCES +# else + + /** Copy assignment operator */ + interval_base_map& operator = (const interval_base_map& src) + { + this->_map = src._map; + return *this; + } + +# endif // BOOST_ICL_NO_CXX11_RVALUE_REFERENCES /** swap the content of containers */ void swap(interval_base_map& object) { _map.swap(object._map); } @@ -845,7 +847,7 @@ inline void interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,S { // [lead_gap--- . . . // [-- it_ ... - iterator prior_ = prior(it_); + iterator prior_ = it_==this->_map.begin()? it_ : prior(it_); iterator inserted_ = this->template gap_insert<Combiner>(prior_, lead_gap, co_val); that()->handle_inserted(prior_, inserted_); } @@ -957,7 +959,7 @@ inline typename interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combi { // Detect the first and the end iterator of the collision sequence iterator first_ = this->_map.lower_bound(inter_val), - last_ = insertion.first; + last_ = prior(this->_map.upper_bound(inter_val)); //assert(end_ == this->_map.upper_bound(inter_val)); iterator it_ = first_; interval_type rest_interval = inter_val; @@ -1096,9 +1098,7 @@ inline void interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,S iterator& it_, const iterator& last_) { iterator end_ = boost::next(last_); - iterator prior_ = it_, inserted_; - if(prior_ != this->_map.end()) - --prior_; + iterator prior_ = cyclic_prior(*this,it_), inserted_; interval_type rest_interval = inter_val, left_gap, cur_itv; interval_type last_interval = last_ ->first; @@ -1152,7 +1152,7 @@ inline typename interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combi { // Detect the first and the end iterator of the collision sequence iterator first_ = this->_map.lower_bound(inter_val), - last_ = insertion.first; + last_ = prior(this->_map.upper_bound(inter_val)); //assert((++last_) == this->_map.upper_bound(inter_val)); iterator it_ = first_; insert_main(inter_val, co_val, it_, last_); |