Eneboo - Documentación para desarrolladores
src/hoard/src/heaplayers/freelistheap.h
Ir a la documentación de este archivo.
00001 /* -*- C++ -*- */
00002 
00003 #ifndef _FREELISTHEAP_H_
00004 #define _FREELISTHEAP_H_
00005 
00015 #include "freesllist.h"
00016 #include <assert.h>
00017 
00018 #ifndef NULL
00019 #define NULL 0
00020 #endif
00021 
00022 namespace HL {
00023 
00024 template <class SuperHeap>
00025 class FreelistHeap : public SuperHeap {
00026 public:
00027   
00028   inline void * malloc (size_t sz) {
00029     // Check the free list first.
00030     void * ptr = _freelist.get();
00031     // If it's empty, get more memory;
00032     // otherwise, advance the free list pointer.
00033     if (ptr == 0) {
00034       ptr = SuperHeap::malloc (sz);
00035     }
00036     return ptr;
00037   }
00038   
00039   inline void free (void * ptr) {
00040     if (ptr == 0) {
00041       return;
00042     }
00043     _freelist.insert (ptr);
00044   }
00045 
00046   inline void clear (void) {
00047     void * ptr;
00048     while (ptr = _freelist.get()) {
00049       SuperHeap::free (ptr);
00050     }
00051   }
00052 
00053 private:
00054 
00055   FreeSLList _freelist;
00056 
00057 };
00058 
00059 }
00060 
00061 #endif
 Todo Clases Namespaces Archivos Funciones Variables 'typedefs' Enumeraciones Valores de enumeraciones Propiedades Amigas 'defines'