MCPcopy Create free account
hub / github.com/OSGeo/gdal / GetVirtualMemAuto

Method GetVirtualMemAuto

gcore/rawdataset.cpp:1515–1560  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1513/************************************************************************/
1514
1515CPLVirtualMem *RawRasterBand::GetVirtualMemAuto(GDALRWFlag eRWFlag,
1516 int *pnPixelSpace,
1517 GIntBig *pnLineSpace,
1518 CSLConstList papszOptions)
1519{
1520 CPLAssert(pnPixelSpace);
1521 CPLAssert(pnLineSpace);
1522
1523 const vsi_l_offset nSize =
1524 static_cast<vsi_l_offset>(nRasterYSize - 1) * nLineOffset +
1525 static_cast<vsi_l_offset>(nRasterXSize - 1) * nPixelOffset +
1526 GDALGetDataTypeSizeBytes(eDataType);
1527
1528 const char *pszImpl = CSLFetchNameValueDef(
1529 papszOptions, "USE_DEFAULT_IMPLEMENTATION", "AUTO");
1530 if (VSIFGetNativeFileDescriptorL(fpRawL) == nullptr ||
1531 !CPLIsVirtualMemFileMapAvailable() || NeedsByteOrderChange() ||
1532 static_cast<size_t>(nSize) != nSize || nPixelOffset < 0 ||
1533 nLineOffset < 0 || EQUAL(pszImpl, "YES") || EQUAL(pszImpl, "ON") ||
1534 EQUAL(pszImpl, "1") || EQUAL(pszImpl, "TRUE"))
1535 {
1536 return GDALRasterBand::GetVirtualMemAuto(eRWFlag, pnPixelSpace,
1537 pnLineSpace, papszOptions);
1538 }
1539
1540 FlushCache(false);
1541
1542 CPLVirtualMem *pVMem = CPLVirtualMemFileMapNew(
1543 fpRawL, nImgOffset, nSize,
1544 (eRWFlag == GF_Write) ? VIRTUALMEM_READWRITE : VIRTUALMEM_READONLY,
1545 nullptr, nullptr);
1546 if (pVMem == nullptr)
1547 {
1548 if (EQUAL(pszImpl, "NO") || EQUAL(pszImpl, "OFF") ||
1549 EQUAL(pszImpl, "0") || EQUAL(pszImpl, "FALSE"))
1550 {
1551 return nullptr;
1552 }
1553 return GDALRasterBand::GetVirtualMemAuto(eRWFlag, pnPixelSpace,
1554 pnLineSpace, papszOptions);
1555 }
1556
1557 *pnPixelSpace = nPixelOffset;
1558 *pnLineSpace = nLineOffset;
1559 return pVMem;
1560}
1561
1562/************************************************************************/
1563/* ==================================================================== */

Callers

nothing calls this directly

Calls 6

CSLFetchNameValueDefFunction · 0.85
FlushCacheFunction · 0.85
CPLVirtualMemFileMapNewFunction · 0.85
EQUALFunction · 0.50

Tested by

no test coverage detected