Eneboo - Documentación para desarrolladores
src/hoard/src/heaplayers/hybridheap.h
Ir a la documentación de este archivo.
00001 /* -*- C++ -*- */
00002 
00003 #ifndef _HYBRIDHEAP_H_
00004 #define _HYBRIDHEAP_H_
00005 
00006 #include <assert.h>
00007 #include "sassert.h"
00008 #include "hldefines.h"
00009 
00016 namespace HL {
00017 
00018 template <int BigSize, class SmallHeap, class BigHeap>
00019 class HybridHeap : public SmallHeap {
00020 public:
00021 
00022   HybridHeap (void)
00023   {
00024   }
00025 
00026   enum { Alignment = ((int) SmallHeap::Alignment < (int) BigHeap::Alignment) ?
00027                       (int) SmallHeap::Alignment :
00028                       (int) BigHeap::Alignment };
00029 
00030   MALLOC_FUNCTION INLINE void * malloc (size_t sz) {
00031     if (sz <= BigSize) {
00032       return SmallHeap::malloc (sz);
00033     } else {
00034       return slowPath (sz);
00035     }
00036   }
00037   
00038   inline void free (void * ptr) {
00039     if (SmallHeap::getSize(ptr) <= BigSize) {
00040       SmallHeap::free (ptr);
00041     } else {
00042       bm.free (ptr);
00043     }
00044   }
00045   
00046   inline void clear (void) {
00047     bm.clear();
00048     SmallHeap::clear();
00049   }
00050   
00051 
00052 private:
00053 
00054   MALLOC_FUNCTION NO_INLINE
00055     void * slowPath (size_t sz) {
00056     return bm.malloc (sz);
00057   }
00058 
00059 
00060   HL::sassert<(BigSize > 0)> checkBigSizeNonZero;
00061 
00062   BigHeap bm;
00063 };
00064 
00065 }
00066 
00067 #endif
 Todo Clases Namespaces Archivos Funciones Variables 'typedefs' Enumeraciones Valores de enumeraciones Propiedades Amigas 'defines'