2017-01-09 15:40:33 -05:00
|
|
|
#ifndef OSRM_ENGINE_DATAFACADE_PROVIDER_HPP
|
|
|
|
#define OSRM_ENGINE_DATAFACADE_PROVIDER_HPP
|
|
|
|
|
|
|
|
#include "engine/data_watchdog.hpp"
|
2017-07-13 09:05:08 -04:00
|
|
|
#include "engine/datafacade.hpp"
|
2017-01-09 15:40:33 -05:00
|
|
|
#include "engine/datafacade/contiguous_internalmem_datafacade.hpp"
|
|
|
|
#include "engine/datafacade/process_memory_allocator.hpp"
|
|
|
|
|
|
|
|
namespace osrm
|
|
|
|
{
|
|
|
|
namespace engine
|
|
|
|
{
|
2017-07-13 09:05:08 -04:00
|
|
|
namespace detail
|
2017-01-09 15:40:33 -05:00
|
|
|
{
|
|
|
|
|
2017-07-13 09:05:08 -04:00
|
|
|
template <typename AlgorithmT, template <typename A> class FacadeT> class DataFacadeProvider
|
|
|
|
{
|
2017-01-09 15:40:33 -05:00
|
|
|
public:
|
2017-07-13 09:05:08 -04:00
|
|
|
using Facade = FacadeT<AlgorithmT>;
|
|
|
|
|
2017-01-09 15:40:33 -05:00
|
|
|
virtual ~DataFacadeProvider() = default;
|
|
|
|
|
2017-07-13 09:05:08 -04:00
|
|
|
virtual std::shared_ptr<const Facade> Get() const = 0;
|
2017-01-09 15:40:33 -05:00
|
|
|
};
|
|
|
|
|
2017-07-13 09:05:08 -04:00
|
|
|
template <typename AlgorithmT, template <typename A> class FacadeT>
|
|
|
|
class ImmutableProvider final : public DataFacadeProvider<AlgorithmT, FacadeT>
|
2017-01-09 15:40:33 -05:00
|
|
|
{
|
|
|
|
public:
|
2017-07-13 09:05:08 -04:00
|
|
|
using Facade = typename DataFacadeProvider<AlgorithmT, FacadeT>::Facade;
|
|
|
|
|
2017-01-09 15:40:33 -05:00
|
|
|
ImmutableProvider(const storage::StorageConfig &config)
|
2017-07-13 09:05:08 -04:00
|
|
|
: immutable_data_facade(std::make_shared<Facade>(
|
2017-01-09 15:40:33 -05:00
|
|
|
std::make_shared<datafacade::ProcessMemoryAllocator>(config)))
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2017-07-13 09:05:08 -04:00
|
|
|
std::shared_ptr<const Facade> Get() const override final { return immutable_data_facade; }
|
2017-01-09 15:40:33 -05:00
|
|
|
|
|
|
|
private:
|
2017-07-13 09:05:08 -04:00
|
|
|
std::shared_ptr<const Facade> immutable_data_facade;
|
2017-01-09 15:40:33 -05:00
|
|
|
};
|
|
|
|
|
2017-07-13 09:05:08 -04:00
|
|
|
template <typename AlgorithmT, template <typename A> class FacadeT>
|
|
|
|
class WatchingProvider : public DataFacadeProvider<AlgorithmT, FacadeT>
|
2017-01-09 15:40:33 -05:00
|
|
|
{
|
|
|
|
DataWatchdog<AlgorithmT> watchdog;
|
|
|
|
|
|
|
|
public:
|
2017-07-13 09:05:08 -04:00
|
|
|
using Facade = typename DataFacadeProvider<AlgorithmT, FacadeT>::Facade;
|
|
|
|
|
|
|
|
std::shared_ptr<const Facade> Get() const override final { return watchdog.Get(); }
|
2017-01-09 15:40:33 -05:00
|
|
|
};
|
|
|
|
}
|
2017-07-13 09:05:08 -04:00
|
|
|
|
|
|
|
template <typename AlgorithmT>
|
|
|
|
using DataFacadeProvider = detail::DataFacadeProvider<AlgorithmT, DataFacade>;
|
|
|
|
template <typename AlgorithmT>
|
|
|
|
using WatchingProvider = detail::WatchingProvider<AlgorithmT, DataFacade>;
|
|
|
|
template <typename AlgorithmT>
|
|
|
|
using ImmutableProvider = detail::ImmutableProvider<AlgorithmT, DataFacade>;
|
|
|
|
}
|
2017-01-09 15:40:33 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|