14 #ifndef STXXL_ALGO_SORT_HELPER_HEADER
15 #define STXXL_ALGO_SORT_HELPER_HEADER
26 namespace sort_helper {
28 template <
typename StrictWeakOrdering>
31 assert(!cmp(cmp.min_value(), cmp.min_value()));
32 assert(cmp(cmp.min_value(), cmp.max_value()));
33 assert(!cmp(cmp.max_value(), cmp.min_value()));
34 assert(!cmp(cmp.max_value(), cmp.max_value()));
38 template <
typename BlockTp_,
typename ValTp_ =
typename BlockTp_::value_type>
42 typedef typename block_type::bid_type
bid_type;
54 template <
typename TriggerEntryTp_,
typename ValueCmp_>
55 struct trigger_entry_cmp :
public std::binary_function<TriggerEntryTp_, TriggerEntryTp_, bool>
63 return cmp(a.value, b.value);
67 template <
typename block_type,
68 typename prefetcher_type,
70 struct run_cursor2_cmp :
public std::binary_function<run_cursor2<block_type, prefetcher_type>, run_cursor2<block_type, prefetcher_type>, bool>
91 template <
typename SequenceVector,
typename ValueType,
typename Comparator>
95 typedef typename SequenceVector::size_type seqs_size_type;
96 typedef typename SequenceVector::value_type::first_type iterator;
99 for (seqs_size_type i = 0; i < seqs.size(); ++i)
101 iterator position = std::upper_bound(seqs[i].first, seqs[i].second, bound, cmp);
103 count += position - seqs[i].first;
110 template <
typename SequenceVector,
typename BufferPtrVector,
typename Prefetcher>
113 BufferPtrVector& buffers,
114 Prefetcher& prefetcher)
116 typedef typename SequenceVector::size_type seqs_size_type;
118 for (seqs_size_type i = 0; i < seqs.size(); ++i)
120 if (seqs[i].first == seqs[i].second)
122 if (prefetcher.block_consumed(buffers[i]))
124 seqs[i].first = buffers[i]->begin();
125 seqs[i].second = buffers[i]->end();
130 seqs.erase(seqs.begin() + i);
131 buffers.erase(buffers.begin() + i);
143 #endif // !STXXL_ALGO_SORT_HELPER_HEADER
unsigned_type count_elements_less_equal(const SequenceVector &seqs, const ValueType &bound, Comparator cmp)
void verify_sentinel_strict_weak_ordering(StrictWeakOrdering cmp)
void refill_or_remove_empty_sequences(SequenceVector &seqs, BufferPtrVector &buffers, Prefetcher &prefetcher)
block_type::const_reference current() const
trigger_entry_cmp(const trigger_entry_cmp &a)
TriggerEntryTp_ trigger_entry_type
static void count(type_key *a, type_key *aEnd, int_type *bucket, int_type K, typename type_key::key_type offset, unsigned shift)
#define STXXL_BEGIN_NAMESPACE
void STXXL_UNUSED(const U &)
#define STXXL_VERBOSE1(x)
trigger_entry_cmp(ValueCmp_ c)
run_cursor2< block_type, prefetcher_type > cursor_type
run_cursor2_cmp(const run_cursor2_cmp &a)
choose_int_types< my_pointer_size >::unsigned_type unsigned_type
run_cursor2_cmp(value_cmp c)
block_type::bid_type bid_type
#define STXXL_END_NAMESPACE