#ifndef NODES_OF_WAY_HPP #define NODES_OF_WAY_HPP #include "util/typedefs.hpp" #include #include #include namespace osrm { namespace extractor { // NodesOfWay contains the ordered nodes of a way and provides convenience functions for getting // nodes in the first and last segments. struct NodesOfWay { OSMWayID way_id; std::vector node_ids; NodesOfWay() : way_id(SPECIAL_OSM_WAYID), node_ids{SPECIAL_OSM_NODEID, SPECIAL_OSM_NODEID} {} NodesOfWay(OSMWayID w, std::vector ns) : way_id(w), node_ids(std::move(ns)) {} static NodesOfWay min_value() { return {MIN_OSM_WAYID, {MIN_OSM_NODEID, MIN_OSM_NODEID}}; } static NodesOfWay max_value() { return {MAX_OSM_WAYID, {MAX_OSM_NODEID, MAX_OSM_NODEID}}; } const OSMNodeID &first_segment_source_id() const { BOOST_ASSERT(!node_ids.empty()); return node_ids[0]; } const OSMNodeID &first_segment_target_id() const { BOOST_ASSERT(node_ids.size() > 1); return node_ids[1]; } const OSMNodeID &last_segment_source_id() const { BOOST_ASSERT(node_ids.size() > 1); return node_ids[node_ids.size() - 2]; } const OSMNodeID &last_segment_target_id() const { BOOST_ASSERT(!node_ids.empty()); return node_ids[node_ids.size() - 1]; } }; } // namespace extractor } // namespace osrm #endif /* NODES_OF_WAY_HPP */