#ifndef OSRM_ENGINE_DATAFACADE_PROVIDER_HPP #define OSRM_ENGINE_DATAFACADE_PROVIDER_HPP #include "engine/data_watchdog.hpp" #include "engine/datafacade.hpp" #include "engine/datafacade/contiguous_internalmem_datafacade.hpp" #include "engine/datafacade/process_memory_allocator.hpp" namespace osrm { namespace engine { namespace detail { template class FacadeT> class DataFacadeProvider { public: using Facade = FacadeT; virtual ~DataFacadeProvider() = default; virtual std::shared_ptr Get() const = 0; }; template class FacadeT> class ImmutableProvider final : public DataFacadeProvider { public: using Facade = typename DataFacadeProvider::Facade; ImmutableProvider(const storage::StorageConfig &config) : immutable_data_facade(std::make_shared( std::make_shared(config))) { } std::shared_ptr Get() const override final { return immutable_data_facade; } private: std::shared_ptr immutable_data_facade; }; template class FacadeT> class WatchingProvider : public DataFacadeProvider { DataWatchdog watchdog; public: using Facade = typename DataFacadeProvider::Facade; std::shared_ptr Get() const override final { return watchdog.Get(); } }; } template using DataFacadeProvider = detail::DataFacadeProvider; template using WatchingProvider = detail::WatchingProvider; template using ImmutableProvider = detail::ImmutableProvider; } } #endif