Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 
00038 
00039 
00040 
00041 #include <ARToolKitPlus/MemoryManagerMemMap.h>
00042 #include <assert.h>
00043 
00044 
00045 #if defined(_MSC_VER) || defined(_WIN32_WCE)
00046 
00047 namespace ARToolKitPlus
00048 {
00049 
00050 
00051 MemoryManagerMemMap::MemoryManagerMemMap()
00052 {
00053         _didInit = false;
00054 
00055         lpvMem = NULL;
00056         hMapObject = NULL;
00057 
00058         fullSize = reservedSize = 0;
00059 }
00060 
00061 
00062 MemoryManagerMemMap::~MemoryManagerMemMap()
00063 {
00064         deinit();
00065 }
00066 
00067 
00068 bool
00069 MemoryManagerMemMap::init(size_t nNumInitialBytes, size_t nNumGrowBytes)
00070 {
00071         if(_didInit)
00072                 return false;
00073 
00074         fullSize = nNumInitialBytes;
00075 
00076         hMapObject = CreateFileMappingW(INVALID_HANDLE_VALUE,           
00077                                                                         NULL,                                           
00078                                                                         PAGE_READWRITE,                         
00079                                                                         0,                                                      
00080                                                                         (DWORD)nNumInitialBytes,        
00081                                                                         L"myMemMap");                           
00082         if (hMapObject == NULL) 
00083                 return false;
00084  
00085         lpvMem = MapViewOfFile(hMapObject,     
00086                                                    FILE_MAP_WRITE, 
00087                                                    0,              
00088                                                    0,              
00089                                                    0);             
00090 
00091 
00092         _didInit = lpvMem != NULL;
00093         return _didInit;
00094 }
00095 
00096 
00097 bool
00098 MemoryManagerMemMap::deinit()
00099 {
00100         if(!_didInit)
00101                 return false;
00102 
00103         if(!lpvMem || !hMapObject)
00104                 return false;
00105 
00106         
00107         UnmapViewOfFile(lpvMem); 
00108         lpvMem = NULL;
00109  
00110         
00111         CloseHandle(hMapObject); 
00112         hMapObject = NULL;
00113 
00114         _didInit = false;
00115         return true;
00116 }
00117 
00118 
00119 bool
00120 MemoryManagerMemMap::didInit()
00121 {
00122         return _didInit;
00123 }
00124 
00125 
00126 void*
00127 MemoryManagerMemMap::getMemory(size_t nNumBytes)
00128 {
00129         
00130         
00131         if(reservedSize+nNumBytes > fullSize)
00132         {
00133                 assert(false && "out of memory in MemoryManagerMemMap");
00134                 return NULL;
00135         }
00136 
00137         void* newBlock = reinterpret_cast<unsigned char*>(lpvMem) + reservedSize;
00138 
00139         reservedSize += nNumBytes;
00140         return newBlock;
00141 }
00142 
00143 
00144 void
00145 MemoryManagerMemMap::releaseMemory(void* nMemoryBlock)
00146 {
00147         if(!_didInit)
00148                 return;
00149 
00150         assert(false && "MemoryManagerMemMap can not release memory...");
00151 }
00152 
00153 }  
00154 
00155 #endif  // defined(_MSC_VER) || defined(_WIN32_WCE)