Fixes #261 ('"End iterators are not dereferencable")

This commit is contained in:
Ion Gaztañaga
2024-09-30 23:18:41 +02:00
parent 0a62c979a7
commit 78d1a30e65

View File

@ -342,9 +342,11 @@ void flat_tree_sort_contiguous_to_adopt // is_contiguous_container == true
tseq.clear(); tseq.clear();
const bool use_tseq_storage = tseq_unused_storage_size > seq_unused_storage_size; const bool use_tseq_storage = tseq_unused_storage_size > seq_unused_storage_size;
value_type * const seq_beg = boost::movelib::iterator_to_raw_pointer(seq.data());
boost::movelib::adaptive_sort boost::movelib::adaptive_sort
( boost::movelib::iterator_to_raw_pointer(seq.begin()) ( seq_beg
, boost::movelib::iterator_to_raw_pointer(seq.end()) , seq_beg + seq.size()
, comp , comp
, use_tseq_storage ? tseq_unused_storage_addr : seq_unused_storage_addr , use_tseq_storage ? tseq_unused_storage_addr : seq_unused_storage_addr
, use_tseq_storage ? tseq_unused_storage_size : seq_unused_storage_size); , use_tseq_storage ? tseq_unused_storage_size : seq_unused_storage_size);
@ -375,9 +377,11 @@ template<class SequenceContainer, class Compare>
void flat_tree_adopt_sequence_unique// is_contiguous_container == true void flat_tree_adopt_sequence_unique// is_contiguous_container == true
(SequenceContainer &tseq, BOOST_RV_REF(SequenceContainer) seq, Compare comp, dtl::true_) (SequenceContainer &tseq, BOOST_RV_REF(SequenceContainer) seq, Compare comp, dtl::true_)
{ {
typedef typename SequenceContainer::value_type value_type;
value_type * const seq_beg = boost::movelib::iterator_to_raw_pointer(seq.data());
boost::movelib::pdqsort boost::movelib::pdqsort
( boost::movelib::iterator_to_raw_pointer(seq.begin()) ( seq_beg
, boost::movelib::iterator_to_raw_pointer(seq.end()) , seq_beg + seq.size()
, comp); , comp);
seq.erase(boost::movelib::unique seq.erase(boost::movelib::unique
(seq.begin(), seq.end(), boost::movelib::negate<Compare>(comp)), seq.cend()); (seq.begin(), seq.end(), boost::movelib::negate<Compare>(comp)), seq.cend());