14 #ifndef STXXL_MNG__BLOCK_ALLOC_H 15 #define STXXL_MNG__BLOCK_ALLOC_H 18 #include <stxxl/bits/parallel.h> 19 #include <stxxl/bits/common/rand.h> 20 #include <stxxl/bits/mng/config.h> 23 __STXXL_BEGIN_NAMESPACE
37 int operator () (
int i)
const;
38 static const char * name();
48 striping(
int b,
int e) : begin(b), diff(e - b)
53 diff = config::get_instance()->disks_number();
56 int operator () (
int i)
const 58 return begin + i % diff;
61 static const char * name()
81 int operator () (
int )
const 83 return begin + rnd(diff);
86 static const char * name()
88 return "fully randomized striping";
116 int operator () (
int i)
const 118 return begin + (i + offset) % diff;
121 static const char * name()
123 return "simple randomized striping";
132 std::vector<int> perm;
136 for (
int i = 0; i < diff; i++)
139 stxxl::random_number<random_uniform_fast> rnd;
154 int operator () (
int i)
const 156 return begin + perm[i % diff];
159 static const char * name()
161 return "randomized cycling striping";
165 struct RC_disk :
public RC 167 RC_disk(
int b,
int e) :
RC(b, e)
170 RC_disk() :
RC(config::get_instance()->regular_disk_range().first, config::get_instance()->regular_disk_range().second)
173 static const char * name()
175 return "Randomized cycling striping on regular disks";
179 struct RC_flash :
public RC 181 RC_flash(
int b,
int e) :
RC(b, e)
184 RC_flash() :
RC(config::get_instance()->flash_range().first, config::get_instance()->flash_range().second)
187 static const char * name()
189 return "Randomized cycling striping on flash devices";
204 int operator () (
int )
const 209 static const char * name()
211 return "single disk";
218 template <
class BaseAllocator_>
228 offset_allocator(int_type offset_,
const BaseAllocator_ & base_) : base(base_), offset(offset_)
240 int operator () (int_type i)
const 242 return base(offset + i);
245 int_type get_offset()
const 250 void set_offset(int_type i)
256 #ifndef STXXL_DEFAULT_ALLOC_STRATEGY 257 #define STXXL_DEFAULT_ALLOC_STRATEGY stxxl::RC 262 __STXXL_END_NAMESPACE
264 #endif // !STXXL_MNG__BLOCK_ALLOC_H fully randomized disk allocation scheme functor
Definition: block_alloc.h:69
striping disk allocation scheme functor
Definition: block_alloc.h:43
offset_allocator(const BaseAllocator_ &base_)
Creates functor based on instance of BaseAllocator_ functor.
Definition: block_alloc.h:233
example disk allocation scheme functor
Definition: block_alloc.h:33
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
offset_allocator(int_type offset_, const BaseAllocator_ &base_)
Creates functor based on instance of BaseAllocator_ functor with offset offset_.
Definition: block_alloc.h:228
simple randomized disk allocation scheme functor
Definition: block_alloc.h:94
Allocator functor adaptor.
Definition: block_alloc.h:219
'single disk' disk allocation scheme functor
Definition: block_alloc.h:195
offset_allocator()
Creates functor based on default BaseAllocator_ functor.
Definition: block_alloc.h:237
randomized cycling disk allocation scheme functor
Definition: block_alloc.h:129