35 const int NO_DESCRIPTOR = -1;
44 ::munmap((
void*)_memoryMapPtr, _size);
45 _memoryMapPtr =
nullptr;
47 if (_cacheFileDescriptor != NO_DESCRIPTOR)
49 ::close(_cacheFileDescriptor);
50 _cacheFileDescriptor = NO_DESCRIPTOR;
56 _cacheFileDescriptor = open(filename.c_str(), O_RDONLY);
57 if (_cacheFileDescriptor == NO_DESCRIPTOR)
58 throw std::runtime_error(
"Failed to open volume file " + filename);
61 if (::fstat(_cacheFileDescriptor, &sb) == NO_DESCRIPTOR)
63 ::close(_cacheFileDescriptor);
64 _cacheFileDescriptor = NO_DESCRIPTOR;
65 throw std::runtime_error(
"Failed to open volume file " + filename);
69 _memoryMapPtr = ::mmap(0, _size, PROT_READ, MAP_PRIVATE, _cacheFileDescriptor, 0);
70 if (_memoryMapPtr == MAP_FAILED)
72 _memoryMapPtr =
nullptr;
73 ::close(_cacheFileDescriptor);
74 _cacheFileDescriptor = NO_DESCRIPTOR;
75 throw std::runtime_error(
"Failed to open volume file " + filename);
~SharedDataVolume()
Destructs the SharedDataVolume object. Unmaps the data from memory and closes the mapped file.
virtual PLATFORM_API void setVoxels(const void *voxels)=0
Sets the voxels of the volume.
PLATFORM_API void mapData(const std::string &filename)
Convenience function to map data from file.