14 #ifndef STXXL_ALGO_SORT_HELPER_HEADER
15 #define STXXL_ALGO_SORT_HELPER_HEADER
25 namespace sort_helper {
27 template <
typename StrictWeakOrdering>
36 template <
typename BlockType,
typename ValueType =
typename BlockType::value_type>
40 typedef typename block_type::bid_type
bid_type;
52 template <
typename TriggerEntryType,
typename ValueCmp>
54 :
public std::binary_function<TriggerEntryType, TriggerEntryType, bool>
62 return cmp(a.value, b.value);
66 template <
typename BlockType,
67 typename PrefetcherType,
70 :
public std::binary_function<
71 run_cursor2<BlockType, PrefetcherType>,
72 run_cursor2<BlockType, PrefetcherType>,
99 template <
typename SequenceVector,
typename ValueType,
typename Comparator>
102 const ValueType& bound, Comparator cmp)
104 typedef typename SequenceVector::size_type seqs_size_type;
105 typedef typename SequenceVector::value_type::first_type iterator;
108 for (seqs_size_type i = 0; i < seqs.size(); ++i)
110 iterator position = std::upper_bound(seqs[i].first, seqs[i].second, bound, cmp);
112 count += position - seqs[i].first;
119 template <
typename SequenceVector,
typename BufferPtrVector,
typename Prefetcher>
122 BufferPtrVector& buffers,
123 Prefetcher& prefetcher)
125 typedef typename SequenceVector::size_type seqs_size_type;
127 for (seqs_size_type i = 0; i < seqs.size(); ++i)
129 if (seqs[i].first == seqs[i].second)
131 if (prefetcher.block_consumed(buffers[i]))
133 seqs[i].first = buffers[i]->begin();
134 seqs[i].second = buffers[i]->end();
139 seqs.erase(seqs.begin() + i);
140 buffers.erase(buffers.begin() + i);
152 #endif // !STXXL_ALGO_SORT_HELPER_HEADER
TriggerEntryType trigger_entry_type
#define STXXL_ASSERT(condition)
block_type::bid_type bid_type
unsigned_type count_elements_less_equal(const SequenceVector &seqs, const ValueType &bound, Comparator cmp)
run_cursor2_cmp(value_cmp c)
void verify_sentinel_strict_weak_ordering(StrictWeakOrdering cmp)
void refill_or_remove_empty_sequences(SequenceVector &seqs, BufferPtrVector &buffers, Prefetcher &prefetcher)
run_cursor2_cmp(const run_cursor2_cmp &a)
#define STXXL_BEGIN_NAMESPACE
#define STXXL_VERBOSE1(x)
static void count(TypeKey *a, TypeKey *aEnd, int_type *bucket, int_type K, typename TypeKey::key_type offset, unsigned shift)
BlockType::const_reference current() const
trigger_entry_cmp(ValueCmp c)
choose_int_types< my_pointer_size >::unsigned_type unsigned_type
trigger_entry_cmp(const trigger_entry_cmp &a)
run_cursor2< block_type, prefetcher_type > cursor_type
PrefetcherType prefetcher_type
#define STXXL_END_NAMESPACE