2016-10-24 23:27:56 -04:00
|
|
|
#ifndef SHARED_MEMORY_DATAFACADE_HPP
|
|
|
|
#define SHARED_MEMORY_DATAFACADE_HPP
|
|
|
|
|
|
|
|
// implements all data storage when shared memory _IS_ used
|
|
|
|
|
|
|
|
#include "storage/shared_barriers.hpp"
|
|
|
|
#include "storage/shared_datatype.hpp"
|
|
|
|
#include "storage/shared_memory.hpp"
|
2016-11-14 21:34:39 -05:00
|
|
|
#include "engine/datafacade/contiguous_internalmem_datafacade_base.hpp"
|
2016-10-24 23:27:56 -04:00
|
|
|
|
|
|
|
namespace osrm
|
|
|
|
{
|
|
|
|
namespace engine
|
|
|
|
{
|
|
|
|
namespace datafacade
|
|
|
|
{
|
|
|
|
|
2016-11-10 19:56:56 -05:00
|
|
|
/**
|
|
|
|
* This datafacade uses an IPC shared memory block as the data location.
|
2016-11-14 21:34:39 -05:00
|
|
|
* Many SharedMemoryDataFacade objects can be created that point to the same shared
|
2016-11-10 19:56:56 -05:00
|
|
|
* memory block.
|
|
|
|
*/
|
2016-11-14 21:34:39 -05:00
|
|
|
class SharedMemoryDataFacade : public ContiguousInternalMemoryDataFacadeBase
|
2016-10-24 23:27:56 -04:00
|
|
|
{
|
|
|
|
|
|
|
|
protected:
|
2016-11-10 19:56:56 -05:00
|
|
|
std::unique_ptr<storage::SharedMemory> m_large_memory;
|
2016-10-24 23:27:56 -04:00
|
|
|
storage::SharedDataType data_region;
|
|
|
|
|
2016-11-14 21:34:39 -05:00
|
|
|
SharedMemoryDataFacade() {}
|
2016-10-24 23:27:56 -04:00
|
|
|
|
|
|
|
public:
|
2017-01-05 17:38:48 -05:00
|
|
|
SharedMemoryDataFacade(storage::SharedDataType data_region) : data_region(data_region)
|
2016-10-24 23:27:56 -04:00
|
|
|
{
|
2016-12-25 19:00:37 -05:00
|
|
|
util::Log(logDEBUG) << "Loading new data for region " << regionToString(data_region);
|
2016-10-24 23:27:56 -04:00
|
|
|
|
|
|
|
BOOST_ASSERT(storage::SharedMemory::RegionExists(data_region));
|
|
|
|
m_large_memory = storage::makeSharedMemory(data_region);
|
2016-11-11 15:47:11 -05:00
|
|
|
|
2016-12-22 18:18:57 -05:00
|
|
|
InitializeInternalPointers(*reinterpret_cast<storage::DataLayout *>(m_large_memory->Ptr()),
|
2017-01-03 16:11:59 -05:00
|
|
|
reinterpret_cast<char *>(m_large_memory->Ptr()) +
|
|
|
|
sizeof(storage::DataLayout));
|
2016-10-24 23:27:56 -04:00
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif // SHARED_MEMORY_DATAFACADE_HPP
|