Load data in two separate data regions
This commit is contained in:
committed by
Patrick Niklaus
parent
c7daa521ad
commit
fea07f343b
@@ -13,27 +13,32 @@ namespace engine
|
||||
namespace datafacade
|
||||
{
|
||||
|
||||
SharedMemoryAllocator::SharedMemoryAllocator(storage::SharedRegionRegister::ShmKey data_shm_key)
|
||||
SharedMemoryAllocator::SharedMemoryAllocator(
|
||||
const std::vector<storage::SharedRegionRegister::ShmKey> &shm_keys)
|
||||
{
|
||||
util::Log(logDEBUG) << "Loading new data for region " << (int)data_shm_key;
|
||||
std::vector<storage::SharedDataIndex::AllocatedRegion> regions;
|
||||
|
||||
BOOST_ASSERT(storage::SharedMemory::RegionExists(data_shm_key));
|
||||
m_large_memory = storage::makeSharedMemory(data_shm_key);
|
||||
for (const auto shm_key : shm_keys)
|
||||
{
|
||||
util::Log(logDEBUG) << "Loading new data for region " << (int)shm_key;
|
||||
BOOST_ASSERT(storage::SharedMemory::RegionExists(shm_key));
|
||||
auto mem = storage::makeSharedMemory(shm_key);
|
||||
|
||||
storage::io::BufferReader reader(reinterpret_cast<char *>(m_large_memory->Ptr()),
|
||||
m_large_memory->Size());
|
||||
storage::serialization::read(reader, data_layout);
|
||||
layout_size = reader.GetPosition();
|
||||
util::Log(logDEBUG) << "Data layout has size " << layout_size;
|
||||
storage::io::BufferReader reader(reinterpret_cast<char *>(mem->Ptr()), mem->Size());
|
||||
storage::DataLayout layout;
|
||||
storage::serialization::read(reader, layout);
|
||||
auto layout_size = reader.GetPosition();
|
||||
|
||||
regions.push_back({reinterpret_cast<char *>(mem->Ptr()) + layout_size, std::move(layout)});
|
||||
memory_regions.push_back(std::move(mem));
|
||||
}
|
||||
|
||||
index = storage::SharedDataIndex{std::move(regions)};
|
||||
}
|
||||
|
||||
SharedMemoryAllocator::~SharedMemoryAllocator() {}
|
||||
|
||||
const storage::DataLayout &SharedMemoryAllocator::GetLayout() { return data_layout; }
|
||||
char *SharedMemoryAllocator::GetMemory()
|
||||
{
|
||||
return reinterpret_cast<char *>(m_large_memory->Ptr()) + layout_size;
|
||||
}
|
||||
const storage::SharedDataIndex &SharedMemoryAllocator::GetIndex() { return index; }
|
||||
|
||||
} // namespace datafacade
|
||||
} // namespace engine
|
||||
|
||||
Reference in New Issue
Block a user