| 1513 | /************************************************************************/ |
| 1514 | |
| 1515 | CPLVirtualMem *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 | /* ==================================================================== */ |
nothing calls this directly
no test coverage detected