2 * (c) 2004-2009 Alexander Warg <warg@os.inf.tu-dresden.de>
3 * economic rights: Technische Universität Dresden (Germany)
5 * This file is part of TUD:OS and distributed under the terms of the
6 * GNU General Public License 2.
7 * Please see the COPYING-GPL-2 file for details.
9 * As a special exception, you may use this file as part of a free software
10 * library without restriction. Specifically, if other files instantiate
11 * templates or use macros or inline functions from this file, or you compile
12 * this file and link it with other files to produce an executable, this
13 * file does not by itself cause the resulting executable to be covered by
14 * the GNU General Public License. This exception does not however
15 * invalidate any other reasons why the executable file might be covered by
16 * the GNU General Public License.
19 #include <l4/cxx/alloc.h>
23 void Alloc_list::free( void *blk, unsigned long size )
25 Elem *n = reinterpret_cast<Elem*>(blk);
29 if (reinterpret_cast<char*>(*c) + (*c)->size == blk)
36 if (reinterpret_cast<char*>(*c) > blk)
49 while (*c && reinterpret_cast<char*>(*c)+(*c)->size == (char*)((*c)->next))
51 (*c)->size += (*c)->next->size;
52 (*c)->next = (*c)->next->next;
56 void *Alloc_list::alloc( unsigned long size )
67 if ((*c)->size >= size && (!min || (*min)->size > (*c)->size))
78 if ( (*min)->size > size )
80 r = reinterpret_cast<char*>(*min) + ((*min)->size - size);