#include <lib/Alloc.h> Alloc::Alloc() { alloc_size = 0; flags = 0x0; for (int i = 0; i < 8; i++) chunks[i] = (void *) 0x0; }; Alloc::Alloc(int size) { Alloc(); alloc_size = size; }; Alloc::~Alloc() { clear(); } void Alloc::setSize(int size) { clear(); alloc_size = size; } void * Alloc::allocate() { void * ptr; if (0 == alloc_size) return NULL; int i = 0; uint8_t flag_lookup = 0x1; while((i < 8) && ((flags & flag_lookup) == 0)) { flag_lookup <<= 1; i++; } if (i == 8) ptr = kmalloc(alloc_size,-2); else { flags ^= flag_lookup; ptr = chunks[i]; } return ptr; }; void Alloc::deallocate(void * ptr) { int i = 0; uint8_t flag_lookup = 0x1; while((i < 8) && ((flags & flag_lookup) != 0)) { flag_lookup <<= 1; i++; } if (i == 8) kfree(ptr); else { flags ^= flag_lookup; chunks[i] = ptr; } }; void Alloc::clear() { uint8_t flag_lookup = 0x1; for (int i = 0; i < 8; i++) { if (flags & flag_lookup != 0) { flags ^= flag_lookup; chunks[i] = NULL; } flag_lookup <<= 1; } };