// This may look like C code, but it is really -*- C++ -*-
Copyright (C) 1989 Free Software Foundation
written by Doug Lea (dl@rocky.oswego.edu)
This file is part of the GNU C++ Library. This library is free
software; you can redistribute it and/or modify it under the terms of
the GNU Library General Public License as published by the Free
Software Foundation; either version 2 of the License, or (at your
option) any later version. This library is distributed in the hope
that it will be useful, but WITHOUT ANY WARRANTY; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the GNU Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free Software
Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
AllocRing::AllocRing(int max
)
:n(max
), current(0), nodes(new AllocQNode
[max
])
for (int i
= 0; i
< n
; ++i
)
int AllocRing::find(void* p
)
for (int i
= 0; i
< n
; ++i
)
for (int i
= 0; i
< n
; ++i
)
void AllocRing::free(void* p
)
int AllocRing::contains(void* p
)
static inline unsigned int good_size(unsigned int s
)
unsigned int req
= s
+ 4;
while (good
< req
) good
<<= 1;
void* AllocRing::alloc(int s
)
unsigned int size
= good_size(s
);
if (nodes
[current
].ptr
!= 0 &&
nodes
[current
].sz
>= int(size
) &&
nodes
[current
].sz
< int(4 * size
))
if (nodes
[current
].ptr
!= 0) delete nodes
[current
].ptr
;
nodes
[current
].sz
= size
;
if (current
>= n
) current
= 0;