#ifndef EXTRACTION_CONTAINERS_HPP #define EXTRACTION_CONTAINERS_HPP #include "extractor/internal_extractor_edge.hpp" #include "extractor/first_and_last_segment_of_way.hpp" #include "extractor/scripting_environment.hpp" #include "extractor/external_memory_node.hpp" #include "extractor/restriction.hpp" #include #include namespace osrm { namespace extractor { /** * Uses external memory containers from stxxl to store all the data that * is collected by the extractor callbacks. * * The data is the filtered, aggregated and finally written to disk. */ class ExtractionContainers { #ifndef _MSC_VER constexpr static unsigned stxxl_memory = ((sizeof(std::size_t) == 4) ? std::numeric_limits::max() : std::numeric_limits::max()); #else const static unsigned stxxl_memory = ((sizeof(std::size_t) == 4) ? INT_MAX : UINT_MAX); #endif void PrepareNodes(); void PrepareRestrictions(); void PrepareEdges(lua_State *segment_state); void WriteNodes(std::ofstream &file_out_stream) const; void WriteRestrictions(const std::string &restrictions_file_name) const; void WriteEdges(std::ofstream &file_out_stream) const; void WriteNames(const std::string &names_file_name) const; public: using STXXLNodeIDVector = stxxl::vector; using STXXLNodeVector = stxxl::vector; using STXXLEdgeVector = stxxl::vector; using STXXLRestrictionsVector = stxxl::vector; using STXXLWayIDStartEndVector = stxxl::vector; STXXLNodeIDVector used_node_id_list; STXXLNodeVector all_nodes_list; STXXLEdgeVector all_edges_list; stxxl::vector name_char_data; stxxl::vector name_lengths; STXXLRestrictionsVector restrictions_list; STXXLWayIDStartEndVector way_start_end_id_list; std::unordered_map external_to_internal_node_id_map; unsigned max_internal_node_id; ExtractionContainers(); ~ExtractionContainers(); void PrepareData(const std::string &output_file_name, const std::string &restrictions_file_name, const std::string &names_file_name, lua_State *segment_state); }; } } #endif /* EXTRACTION_CONTAINERS_HPP */