Load data in two separate data regions

This commit is contained in:
Patrick Niklaus
2018-04-04 23:05:34 +00:00
committed by Patrick Niklaus
parent c7daa521ad
commit fea07f343b
14 changed files with 578 additions and 440 deletions
@@ -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