14 #ifndef STXXL_INTERLEAVED_ALLOC_HEADER
15 #define STXXL_INTERLEAVED_ALLOC_HEADER
19 #include <stxxl/bits/mng/mng.h>
20 #include <stxxl/bits/common/rand.h>
23 __STXXL_BEGIN_NAMESPACE
25 #define CHECK_RUN_BOUNDS(pos)
27 struct interleaved_striping
34 interleaved_striping(int_type nruns,
int begindisk,
int diff)
35 : nruns(nruns), begindisk(begindisk), diff(diff)
39 interleaved_striping(int_type _nruns,
const striping & strategy)
40 : nruns(_nruns), begindisk(strategy.begin), diff(strategy.diff)
43 int operator () (int_type i)
const
45 return begindisk + (i / nruns) % diff;
49 struct interleaved_FR :
public interleaved_striping
53 interleaved_FR(int_type _nruns,
const FR & strategy)
54 : interleaved_striping(_nruns, strategy.begin, strategy.diff)
57 int operator () (int_type )
const
59 return begindisk + rnd(diff);
63 struct interleaved_SR :
public interleaved_striping
65 std::vector<int> offsets;
67 interleaved_SR(int_type _nruns,
const SR & strategy)
68 : interleaved_striping(_nruns, strategy.begin, strategy.diff)
71 for (int_type i = 0; i < nruns; i++)
72 offsets.push_back(rnd(diff));
75 int operator () (int_type i)
const
77 return begindisk + (i / nruns + offsets[i % nruns]) % diff;
82 struct interleaved_RC :
public interleaved_striping
84 std::vector<std::vector<int> > perms;
86 interleaved_RC(int_type _nruns,
const RC & strategy)
87 : interleaved_striping(_nruns, strategy.begin, strategy.diff),
88 perms(nruns, std::
vector<int>(diff))
90 for (int_type i = 0; i < nruns; i++)
92 for (
int j = 0; j < diff; j++)
100 int operator () (int_type i)
const
102 return begindisk + perms[i % nruns][(i / nruns) % diff];
106 struct first_disk_only :
public interleaved_striping
108 first_disk_only(int_type _nruns,
const single_disk & strategy)
109 : interleaved_striping(_nruns, strategy.disk, 1)
112 int operator () (int_type)
const
118 template <
typename scheme>
119 struct interleaved_alloc_traits
123 struct interleaved_alloc_traits<
striping>
125 typedef interleaved_striping strategy;
129 struct interleaved_alloc_traits<
FR>
131 typedef interleaved_FR strategy;
135 struct interleaved_alloc_traits<
SR>
137 typedef interleaved_SR strategy;
141 struct interleaved_alloc_traits<
RC>
143 typedef interleaved_RC strategy;
147 struct interleaved_alloc_traits<RC_disk>
150 typedef interleaved_RC strategy;
154 struct interleaved_alloc_traits<RC_flash>
157 typedef interleaved_RC strategy;
163 typedef first_disk_only strategy;
166 __STXXL_END_NAMESPACE
168 #endif // !STXXL_INTERLEAVED_ALLOC_HEADER
fully randomized disk allocation scheme functor
Definition: block_alloc.h:69
striping disk allocation scheme functor
Definition: block_alloc.h:43
void random_shuffle(ExtIterator_ first, ExtIterator_ last, RandomNumberGenerator_ &rand, unsigned_type M, AllocStrategy_ AS=STXXL_DEFAULT_ALLOC_STRATEGY())
External equivalent of std::random_shuffle.
Definition: random_shuffle.h:49
simple randomized disk allocation scheme functor
Definition: block_alloc.h:94
External vector container.
Definition: vector.h:259
'single disk' disk allocation scheme functor
Definition: block_alloc.h:195
randomized cycling disk allocation scheme functor
Definition: block_alloc.h:129