summaryrefslogtreecommitdiff
path: root/boost/icl/interval_base_map.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/icl/interval_base_map.hpp')
-rw-r--r--boost/icl/interval_base_map.hpp34
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_);