|
GDAL
|
00001 /********************************************************************** 00002 * $Id: cpl_virtualmem.h 36485 2016-11-24 07:54:20Z goatbar $ 00003 * 00004 * Name: cpl_virtualmem.h 00005 * Project: CPL - Common Portability Library 00006 * Purpose: Virtual memory 00007 * Author: Even Rouault, <even dot rouault at mines dash paris dot org> 00008 * 00009 ********************************************************************** 00010 * Copyright (c) 2014, Even Rouault <even dot rouault at mines-paris dot org> 00011 * 00012 * Permission is hereby granted, free of charge, to any person obtaining a 00013 * copy of this software and associated documentation files (the "Software"), 00014 * to deal in the Software without restriction, including without limitation 00015 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 00016 * and/or sell copies of the Software, and to permit persons to whom the 00017 * Software is furnished to do so, subject to the following conditions: 00018 * 00019 * The above copyright notice and this permission notice shall be included 00020 * in all copies or substantial portions of the Software. 00021 * 00022 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 00023 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00024 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 00025 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 00026 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 00027 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 00028 * DEALINGS IN THE SOFTWARE. 00029 ****************************************************************************/ 00030 00031 #ifndef CPL_VIRTUAL_MEM_INCLUDED 00032 #define CPL_VIRTUAL_MEM_INCLUDED 00033 00034 #include <stddef.h> 00035 00036 #include "cpl_port.h" 00037 #include "cpl_vsi.h" 00038 00039 CPL_C_START 00040 00062 typedef struct CPLVirtualMem CPLVirtualMem; 00063 00074 typedef void (*CPLVirtualMemCachePageCbk)(CPLVirtualMem* ctxt, 00075 size_t nOffset, 00076 void* pPageToFill, 00077 size_t nToFill, 00078 void* pUserData); 00079 00090 typedef void (*CPLVirtualMemUnCachePageCbk)(CPLVirtualMem* ctxt, 00091 size_t nOffset, 00092 const void* pPageToBeEvicted, 00093 size_t nToBeEvicted, 00094 void* pUserData); 00095 00099 typedef void (*CPLVirtualMemFreeUserData)(void* pUserData); 00100 00102 typedef enum 00103 { 00106 VIRTUALMEM_READONLY, 00109 VIRTUALMEM_READONLY_ENFORCED, 00112 VIRTUALMEM_READWRITE 00113 } CPLVirtualMemAccessMode; 00114 00121 size_t CPL_DLL CPLGetPageSize(void); 00122 00167 CPLVirtualMem CPL_DLL *CPLVirtualMemNew(size_t nSize, 00168 size_t nCacheSize, 00169 size_t nPageSizeHint, 00170 int bSingleThreadUsage, 00171 CPLVirtualMemAccessMode eAccessMode, 00172 CPLVirtualMemCachePageCbk pfnCachePage, 00173 CPLVirtualMemUnCachePageCbk pfnUnCachePage, 00174 CPLVirtualMemFreeUserData pfnFreeUserData, 00175 void *pCbkUserData); 00176 00182 int CPL_DLL CPLIsVirtualMemFileMapAvailable(void); 00183 00210 CPLVirtualMem CPL_DLL *CPLVirtualMemFileMapNew( VSILFILE* fp, 00211 vsi_l_offset nOffset, 00212 vsi_l_offset nLength, 00213 CPLVirtualMemAccessMode eAccessMode, 00214 CPLVirtualMemFreeUserData pfnFreeUserData, 00215 void *pCbkUserData ); 00216 00236 CPLVirtualMem CPL_DLL *CPLVirtualMemDerivedNew(CPLVirtualMem* pVMemBase, 00237 vsi_l_offset nOffset, 00238 vsi_l_offset nSize, 00239 CPLVirtualMemFreeUserData pfnFreeUserData, 00240 void *pCbkUserData); 00241 00253 void CPL_DLL CPLVirtualMemFree(CPLVirtualMem* ctxt); 00254 00270 void CPL_DLL *CPLVirtualMemGetAddr(CPLVirtualMem* ctxt); 00271 00279 size_t CPL_DLL CPLVirtualMemGetSize(CPLVirtualMem* ctxt); 00280 00288 int CPL_DLL CPLVirtualMemIsFileMapping(CPLVirtualMem* ctxt); 00289 00297 CPLVirtualMemAccessMode CPL_DLL CPLVirtualMemGetAccessMode(CPLVirtualMem* ctxt); 00298 00309 size_t CPL_DLL CPLVirtualMemGetPageSize(CPLVirtualMem* ctxt); 00310 00328 int CPL_DLL CPLVirtualMemIsAccessThreadSafe(CPLVirtualMem* ctxt); 00329 00342 void CPL_DLL CPLVirtualMemDeclareThread(CPLVirtualMem* ctxt); 00343 00356 void CPL_DLL CPLVirtualMemUnDeclareThread(CPLVirtualMem* ctxt); 00357 00375 void CPL_DLL CPLVirtualMemPin(CPLVirtualMem* ctxt, 00376 void* pAddr, size_t nSize, int bWriteOp); 00377 00385 void CPL_DLL CPLVirtualMemManagerTerminate(void); 00386 00387 CPL_C_END 00388 00389 #endif /* CPL_VIRTUAL_MEM_INCLUDED */
1.7.6.1.