21#ifndef Glucose_Alloc_h
22#define Glucose_Alloc_h
50 explicit RegionAllocator(
uint32_t start_cap = 1024*1024) : memory(NULL), sz(0), cap(0), wasted_(0){ capacity(start_cap); }
63 void clear () { sz = 0; wasted_=0; }
70 const T*
lea (
Ref r)
const {
assert(r >= 0 && r < sz);
return &memory[r]; }
71 Ref ael (
const T* t) {
assert((
void*)t >= (
void*)&memory[0] && (
void*)t < (
void*)&memory[sz-1]);
72 return (
Ref)(t - &memory[0]); }
75 if (to.memory != NULL)
::free(to.memory);
82 sz = cap = wasted_ = 0;
89void RegionAllocator<T>::capacity(
uint32_t min_cap)
91 if (cap >= min_cap)
return;
94 while (cap < min_cap){
99 uint32_t delta = ((cap >> 1) + (cap >> 3) + 2) & ~1;
103 fatal_out_of_memory();
108 memory = (T*)xrealloc(memory,
sizeof(T)*cap);
125 fatal_out_of_memory();
#define ABC_NAMESPACE_CXX_HEADER_START
#define ABC_NAMESPACE_CXX_HEADER_END
const T * lea(Ref r) const
RegionAllocator(uint32_t start_cap=1024 *1024)
const T & operator[](Ref r) const
void moveTo(RegionAllocator &to)