00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef flc_HEAP_WIN_H
00018 #define flc_HEAP_WIN_H
00019
00020 #include <falcon/fassert.h>
00021
00025 #define PAGE_SIZE 4096
00026
00027 #include <windows.h>
00028
00029 namespace Falcon
00030 {
00031
00032 class HeapMem_Win32
00033 {
00034 static long m_pageSize;
00035 static HANDLE m_heapHandle;
00036
00037 public:
00038
00039
00040
00041
00042
00043
00044 static void *getPage() { return getPages(1); }
00045
00046 static void *getPages( int pages )
00047 {
00048 if ( m_heapHandle == 0 )
00049 m_heapHandle = GetProcessHeap();
00050
00051 void *ret = HeapAlloc( m_heapHandle, HEAP_NO_SERIALIZE, pages * PAGE_SIZE );
00052 fassert( ret != 0 );
00053 return ret;
00054 }
00055
00056 static void freePage( void *memory ) { free( memory, 1 ); }
00057 static void free( void *memory, int pages )
00058 {
00059 fassert( m_heapHandle != 0 );
00060 HeapFree( m_heapHandle, HEAP_NO_SERIALIZE, memory );
00061 }
00062
00063
00064
00065 static long pageSize() { return PAGE_SIZE; }
00066 };
00067
00068 typedef HeapMem_Win32 HeapMem;
00069
00070 }
00071
00072 #endif
00073
00074