#ifndef OSRM_EXTRACT_DATASOURCES_HPP #define OSRM_EXTRACT_DATASOURCES_HPP #include "util/typedefs.hpp" #include <algorithm> #include <array> #include <cstdint> #include <string_view> namespace osrm::extractor { class Datasources { static constexpr const std::uint8_t MAX_NUM_SOURES = 255; static constexpr const std::uint8_t MAX_LENGTH_NAME = 255; public: Datasources() { std::fill(lengths.begin(), lengths.end(), 0); std::fill(sources.begin(), sources.end(), '\0'); } std::string_view GetSourceName(DatasourceID id) const { auto begin = sources.data() + (MAX_LENGTH_NAME * id); return std::string_view{begin, lengths[id]}; } void SetSourceName(DatasourceID id, const std::string &name) { BOOST_ASSERT(name.size() < MAX_LENGTH_NAME); lengths[id] = std::min<std::uint32_t>(name.size(), MAX_LENGTH_NAME); auto out = sources.data() + (MAX_LENGTH_NAME * id); std::copy(name.begin(), name.begin() + lengths[id], out); } private: std::array<std::uint32_t, MAX_NUM_SOURES> lengths; std::array<char, MAX_LENGTH_NAME * MAX_NUM_SOURES> sources; }; } // namespace osrm::extractor #endif