GDAL
cpl_virtualmem.h
Go to the documentation of this file.
1/**********************************************************************
2 *
3 * Name: cpl_virtualmem.h
4 * Project: CPL - Common Portability Library
5 * Purpose: Virtual memory
6 * Author: Even Rouault, <even dot rouault at spatialys.com>
7 *
8 **********************************************************************
9 * Copyright (c) 2014, Even Rouault <even dot rouault at spatialys.com>
10 *
11 * SPDX-License-Identifier: MIT
12 ****************************************************************************/
13
14#ifndef CPL_VIRTUAL_MEM_INCLUDED
15#define CPL_VIRTUAL_MEM_INCLUDED
16
17#include <stddef.h>
18
19#include "cpl_port.h"
20#include "cpl_vsi.h"
21
23
43
45typedef struct CPLVirtualMem CPLVirtualMem;
46
58typedef void (*CPLVirtualMemCachePageCbk)(CPLVirtualMem *ctxt, size_t nOffset,
59 void *pPageToFill, size_t nToFill,
60 void *pUserData);
61
73typedef void (*CPLVirtualMemUnCachePageCbk)(CPLVirtualMem *ctxt, size_t nOffset,
74 const void *pPageToBeEvicted,
75 size_t nToBeEvicted,
76 void *pUserData);
77
81typedef void (*CPLVirtualMemFreeUserData)(void *pUserData);
82
96
102size_t CPL_DLL CPLGetPageSize(void);
103
146
147CPLVirtualMem CPL_DLL *
148CPLVirtualMemNew(size_t nSize, size_t nCacheSize, size_t nPageSizeHint,
149 int bSingleThreadUsage, CPLVirtualMemAccessMode eAccessMode,
150 CPLVirtualMemCachePageCbk pfnCachePage,
151 CPLVirtualMemUnCachePageCbk pfnUnCachePage,
152 CPLVirtualMemFreeUserData pfnFreeUserData, void *pCbkUserData);
153
158int CPL_DLL CPLIsVirtualMemFileMapAvailable(void);
159
184CPLVirtualMem CPL_DLL *CPLVirtualMemFileMapNew(
185 VSILFILE *fp, vsi_l_offset nOffset, vsi_l_offset nLength,
186 CPLVirtualMemAccessMode eAccessMode,
187 CPLVirtualMemFreeUserData pfnFreeUserData, void *pCbkUserData);
188
207CPLVirtualMem CPL_DLL *CPLVirtualMemDerivedNew(
208 CPLVirtualMem *pVMemBase, vsi_l_offset nOffset, vsi_l_offset nSize,
209 CPLVirtualMemFreeUserData pfnFreeUserData, void *pCbkUserData);
210
221void CPL_DLL CPLVirtualMemFree(CPLVirtualMem *ctxt);
222
237void CPL_DLL *CPLVirtualMemGetAddr(CPLVirtualMem *ctxt);
238
245size_t CPL_DLL CPLVirtualMemGetSize(CPLVirtualMem *ctxt);
246
253int CPL_DLL CPLVirtualMemIsFileMapping(CPLVirtualMem *ctxt);
254
261CPLVirtualMemAccessMode CPL_DLL CPLVirtualMemGetAccessMode(CPLVirtualMem *ctxt);
262
272size_t CPL_DLL CPLVirtualMemGetPageSize(CPLVirtualMem *ctxt);
273
290int CPL_DLL CPLVirtualMemIsAccessThreadSafe(CPLVirtualMem *ctxt);
291
303void CPL_DLL CPLVirtualMemDeclareThread(CPLVirtualMem *ctxt);
304
316void CPL_DLL CPLVirtualMemUnDeclareThread(CPLVirtualMem *ctxt);
317
334void CPL_DLL CPLVirtualMemPin(CPLVirtualMem *ctxt, void *pAddr, size_t nSize,
335 int bWriteOp);
336
343void CPL_DLL CPLVirtualMemManagerTerminate(void);
344
346
347#endif /* CPL_VIRTUAL_MEM_INCLUDED */
Core portability definitions for CPL.
#define CPL_C_END
Macro to end a block of C symbols.
Definition cpl_port.h:289
#define CPL_C_START
Macro to start a block of C symbols.
Definition cpl_port.h:285
int CPLIsVirtualMemFileMapAvailable(void)
Return if virtual memory mapping of a file is available.
Definition cpl_virtualmem.cpp:2136
CPLVirtualMem * CPLVirtualMemFileMapNew(VSILFILE *fp, vsi_l_offset nOffset, vsi_l_offset nLength, CPLVirtualMemAccessMode eAccessMode, CPLVirtualMemFreeUserData pfnFreeUserData, void *pCbkUserData)
Create a new virtual memory mapping from a file.
Definition cpl_virtualmem.cpp:2106
size_t CPLVirtualMemGetSize(CPLVirtualMem *ctxt)
Return the size of the virtual memory mapping.
Definition cpl_virtualmem.cpp:2218
CPLVirtualMem * CPLVirtualMemNew(size_t nSize, size_t nCacheSize, size_t nPageSizeHint, int bSingleThreadUsage, CPLVirtualMemAccessMode eAccessMode, CPLVirtualMemCachePageCbk pfnCachePage, CPLVirtualMemUnCachePageCbk pfnUnCachePage, CPLVirtualMemFreeUserData pfnFreeUserData, void *pCbkUserData)
Create a new virtual memory mapping.
Definition cpl_virtualmem.cpp:1947
void(* CPLVirtualMemCachePageCbk)(CPLVirtualMem *ctxt, size_t nOffset, void *pPageToFill, size_t nToFill, void *pUserData)
Callback triggered when a still unmapped page of virtual memory is accessed.
Definition cpl_virtualmem.h:58
void CPLVirtualMemManagerTerminate(void)
Cleanup any resource and handlers related to virtual memory.
Definition cpl_virtualmem.cpp:1973
void CPLVirtualMemPin(CPLVirtualMem *ctxt, void *pAddr, size_t nSize, int bWriteOp)
Make sure that a region of virtual memory will be realized.
Definition cpl_virtualmem.cpp:1968
int CPLVirtualMemIsFileMapping(CPLVirtualMem *ctxt)
Return if the virtual memory mapping is a direct file mapping.
Definition cpl_virtualmem.cpp:2191
void * CPLVirtualMemGetAddr(CPLVirtualMem *ctxt)
Return the pointer to the start of a virtual memory mapping.
Definition cpl_virtualmem.cpp:2182
void CPLVirtualMemUnDeclareThread(CPLVirtualMem *ctxt)
Declare that a thread will stop accessing a virtual memory mapping.
Definition cpl_virtualmem.cpp:1964
void(* CPLVirtualMemUnCachePageCbk)(CPLVirtualMem *ctxt, size_t nOffset, const void *pPageToBeEvicted, size_t nToBeEvicted, void *pUserData)
Callback triggered when a dirty mapped page is going to be freed.
Definition cpl_virtualmem.h:73
void(* CPLVirtualMemFreeUserData)(void *pUserData)
Callback triggered when a virtual memory mapping is destroyed.
Definition cpl_virtualmem.h:81
CPLVirtualMem * CPLVirtualMemDerivedNew(CPLVirtualMem *pVMemBase, vsi_l_offset nOffset, vsi_l_offset nSize, CPLVirtualMemFreeUserData pfnFreeUserData, void *pCbkUserData)
Create a new virtual memory mapping derived from an other virtual memory mapping.
Definition cpl_virtualmem.cpp:2236
CPLVirtualMemAccessMode CPLVirtualMemGetAccessMode(CPLVirtualMem *ctxt)
Return the access mode of the virtual memory mapping.
Definition cpl_virtualmem.cpp:2200
void CPLVirtualMemDeclareThread(CPLVirtualMem *ctxt)
Declare that a thread will access a virtual memory mapping.
Definition cpl_virtualmem.cpp:1960
int CPLVirtualMemIsAccessThreadSafe(CPLVirtualMem *ctxt)
Return TRUE if this memory mapping can be accessed safely from concurrent threads.
Definition cpl_virtualmem.cpp:2227
void CPLVirtualMemFree(CPLVirtualMem *ctxt)
Free a virtual memory mapping.
Definition cpl_virtualmem.cpp:2149
CPLVirtualMemAccessMode
Access mode of a virtual memory mapping.
Definition cpl_virtualmem.h:85
@ VIRTUALMEM_READONLY_ENFORCED
Definition cpl_virtualmem.h:91
@ VIRTUALMEM_READWRITE
Definition cpl_virtualmem.h:94
@ VIRTUALMEM_READONLY
Definition cpl_virtualmem.h:88
size_t CPLVirtualMemGetPageSize(CPLVirtualMem *ctxt)
Return the page size associated to a virtual memory mapping.
Definition cpl_virtualmem.cpp:2209
size_t CPLGetPageSize(void)
Return the size of a page of virtual memory.
Definition cpl_virtualmem.cpp:2123
Standard C Covers.
struct VSIVirtualHandle VSILFILE
Opaque type for a FILE that implements the VSIVirtualHandle API.
Definition cpl_vsi.h:141
GUIntBig vsi_l_offset
Type for a file offset.
Definition cpl_vsi.h:136