1 #ifndef SCRIPTING_ENVIRONMENT_HPP
2 #define SCRIPTING_ENVIRONMENT_HPP
3 
4 #include "extractor/internal_extractor_edge.hpp"
5 #include "extractor/maneuver_override.hpp"
6 #include "extractor/profile_properties.hpp"
7 #include "extractor/restriction.hpp"
8 
9 #include <osmium/memory/buffer.hpp>
10 
11 #include <boost/optional/optional.hpp>
12 
13 #include <string>
14 #include <vector>
15 
16 namespace osmium
17 {
18 class Node;
19 class Way;
20 class Relation;
21 } // namespace osmium
22 
23 namespace osrm
24 {
25 
26 namespace util
27 {
28 struct Coordinate;
29 }
30 
31 namespace extractor
32 {
33 
34 class RestrictionParser;
35 class ManeuverOverrideRelationParser;
36 class ExtractionRelationContainer;
37 struct ExtractionNode;
38 struct ExtractionWay;
39 struct ExtractionTurn;
40 struct ExtractionSegment;
41 
42 /**
43  * Abstract class that handles processing osmium ways, nodes and relation objects by applying
44  * user supplied profiles.
45  */
46 class ScriptingEnvironment
47 {
48   public:
49     ScriptingEnvironment() = default;
50     ScriptingEnvironment(const ScriptingEnvironment &) = delete;
51     ScriptingEnvironment &operator=(const ScriptingEnvironment &) = delete;
52     virtual ~ScriptingEnvironment() = default;
53 
54     virtual const ProfileProperties &GetProfileProperties() = 0;
55 
56     virtual std::vector<std::vector<std::string>> GetExcludableClasses() = 0;
57     virtual std::vector<std::string> GetClassNames() = 0;
58     virtual std::vector<std::string> GetNameSuffixList() = 0;
59     virtual std::vector<std::string> GetRestrictions() = 0;
60     virtual std::vector<std::string> GetRelations() = 0;
61     virtual void ProcessTurn(ExtractionTurn &turn) = 0;
62     virtual void ProcessSegment(ExtractionSegment &segment) = 0;
63 
64     virtual void
65     ProcessElements(const osmium::memory::Buffer &buffer,
66                     const RestrictionParser &restriction_parser,
67                     const ManeuverOverrideRelationParser &maneuver_override_parser,
68                     const ExtractionRelationContainer &relations,
69                     std::vector<std::pair<const osmium::Node &, ExtractionNode>> &resulting_nodes,
70                     std::vector<std::pair<const osmium::Way &, ExtractionWay>> &resulting_ways,
71                     std::vector<InputTurnRestriction> &resulting_restrictions,
72                     std::vector<InputManeuverOverride> &resulting_maneuver_overrides) = 0;
73 
74     virtual bool HasLocationDependentData() const = 0;
75 };
76 } // namespace extractor
77 } // namespace osrm
78 
79 #endif /* SCRIPTING_ENVIRONMENT_HPP */
80