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
32 interleaved_striping(int_type _nruns,
int _begindisk,
33 int _enddisk) : nruns(_nruns),
34 begindisk(_begindisk), diff(_enddisk - _begindisk)
37 int operator () (int_type i)
const
39 return begindisk + (i / nruns) % diff;
42 virtual ~interleaved_striping()
46 struct interleaved_FR :
public interleaved_striping
48 interleaved_FR(int_type _nruns,
int _begindisk,
49 int _enddisk) : interleaved_striping(_nruns, _begindisk,
53 int operator () (int_type )
const
55 return begindisk + rnd(diff);
59 struct interleaved_SR :
public interleaved_striping
61 std::vector<int> offsets;
63 interleaved_SR(int_type _nruns,
int _begindisk,
64 int _enddisk) : interleaved_striping(_nruns,
69 for (int_type i = 0; i < nruns; i++)
70 offsets.push_back(rnd(diff));
73 int operator () (int_type i)
const
75 return begindisk + (i / nruns + offsets[i % nruns]) % diff;
80 struct interleaved_RC :
public interleaved_striping
82 std::vector<std::vector<int> > perms;
84 interleaved_RC(int_type _nruns,
int _begindisk,
85 int _enddisk) : interleaved_striping(_nruns,
88 perms(nruns, std::
vector<int>(diff))
90 for (int_type i = 0; i < nruns; i++)
92 for (
int j = 0; j < diff; j++)
102 int operator () (int_type i)
const
104 return begindisk + perms[i % nruns][(i / nruns) % diff];
108 struct first_disk_only :
public interleaved_striping
110 first_disk_only(int_type _nruns,
int _begindisk,
int)
111 : interleaved_striping(_nruns, _begindisk, _begindisk + 1)
114 int operator () (int_type)
const
120 template <
typename scheme>
121 struct interleaved_alloc_traits
125 struct interleaved_alloc_traits<
striping>
127 typedef interleaved_striping strategy;
131 struct interleaved_alloc_traits<
FR>
133 typedef interleaved_FR strategy;
137 struct interleaved_alloc_traits<
SR>
139 typedef interleaved_SR strategy;
143 struct interleaved_alloc_traits<
RC>
145 typedef interleaved_RC strategy;
149 struct interleaved_alloc_traits<RC_disk>
152 typedef interleaved_RC strategy;
156 struct interleaved_alloc_traits<RC_flash>
159 typedef interleaved_RC strategy;
165 typedef first_disk_only strategy;
168 __STXXL_END_NAMESPACE
170 #endif // !STXXL_INTERLEAVED_ALLOC_HEADER