53 double afc(
void)
const;
70 static Block*
allocate(
unsigned int n, Block* p=NULL);
73 static const unsigned int size_min = 32;
75 static const unsigned int size_max = 32 * 1024;
94 static void*
operator new(
size_t s);
96 static void operator delete(
void* p);
101 Object* object(
void)
const;
103 bool local(
void)
const;
105 void local(Object* o);
107 void global(
void* mo);
143 GlobalPropInfo::Object::operator
new(
size_t s) {
148 GlobalPropInfo::Object::operator
delete(
void* p) {
154 Block*
b =
static_cast<Block*
>(
heap.
ralloc(
sizeof(Block)+
155 (n-1)*
sizeof(PropInfo)));
161 GlobalPropInfo::Object::Object(Support::Mutex*
m, Object* p)
162 : mutex(m), parent(p), use_cnt(1),
size(size_min), free(size_min),
163 cur(Block::allocate(
size)) {}
166 GlobalPropInfo::object(
void)
const {
170 GlobalPropInfo::local(
void)
const {
174 GlobalPropInfo::local(Object* o) {
179 GlobalPropInfo::global(
void* o) {
192 Object* o = object();
202 Object*
c = object();
203 while ((c != NULL) && (--c->use_cnt == 0)) {
207 Block*
d =
b; b=b->next;
211 Object*
d =
c; c = c->parent;
237 local(
new Object(
object()->mutex,
object()));
241 Object* o = object();
244 if (2*o->size <= size_max)
250 PropInfo* pi = &o->cur->pi[--o->free];