libosmscout 1.1.1
Loading...
Searching...
No Matches
AccessFeature.h
Go to the documentation of this file.
1#ifndef OSMSCOUT_FEATURE_ACCESS_FEATURE_H
2#define OSMSCOUT_FEATURE_ACCESS_FEATURE_H
3
4/*
5 This source is part of the libosmscout library
6 Copyright (C) 2014 Tim Teulings
7
8 This library is free software; you can redistribute it and/or
9 modify it under the terms of the GNU Lesser General Public
10 License as published by the Free Software Foundation; either
11 version 2.1 of the License, or (at your option) any later version.
12
13 This library is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
17
18 You should have received a copy of the GNU Lesser General Public
19 License along with this library; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21*/
22
23#include <osmscout/TypeConfig.h>
25
27
28namespace osmscout {
29
31 {
32 public:
33 enum Access : uint8_t {
34 footForward = 1u << 0u,
35 footBackward = 1u << 1u,
36 bicycleForward = 1u << 2u,
37 bicycleBackward = 1u << 3u,
38 carForward = 1u << 4u,
39 carBackward = 1u << 5u,
40 onewayForward = 1u << 6u,
41 onewayBackward = 1u << 7u
42 };
43
44 private:
45 uint8_t access=0;
46
47 public:
48 AccessFeatureValue() = default;
49 AccessFeatureValue(const AccessFeatureValue& other) = default;
50
51 explicit AccessFeatureValue(uint8_t access)
52 : access(access)
53 {
54 // no code
55 }
56
57 void SetAccess(uint8_t access)
58 {
59 this->access=access;
60 }
61
62 uint8_t GetAccess() const
63 {
64 return access;
65 }
66
67 bool CanRoute() const
68 {
70 }
71
72 bool CanRoute(Vehicle vehicle) const
73 {
74 switch (vehicle)
75 {
76 case vehicleFoot:
77 return (access & (footForward|footBackward))!=0;
78 case vehicleBicycle:
79 return (access & (bicycleForward|bicycleBackward))!=0;
80 case vehicleCar:
81 return (access & (carForward|carBackward))!=0;
82 }
83
84 return false;
85 }
86
87 bool CanRoute(VehicleMask vehicleMask) const
88 {
89 if ((vehicleMask & vehicleFoot)!=0 &&
90 (access & (footForward|footBackward))!=0) {
91 return true;
92 }
93
94 if ((vehicleMask & vehicleBicycle)!=0 &&
95 (access & (bicycleForward|bicycleBackward))!=0) {
96 return true;
97 }
98
99 if ((vehicleMask & vehicleCar)!=0 &&
100 (access & (carForward|carBackward))!=0) {
101 return true;
102 }
103
104 return false;
105 }
106
107 bool CanRouteForward() const
108 {
109 return (access & (footForward|bicycleForward|carForward))!=0;
110 }
111
112 bool CanRouteForward(Vehicle vehicle) const
113 {
114 switch (vehicle)
115 {
116 case vehicleFoot:
117 return (access & footForward)!=0;
118 case vehicleBicycle:
119 return (access & bicycleForward)!=0;
120 case vehicleCar:
121 return (access & carForward)!=0;
122 }
123
124 return false;
125 }
126
127 bool CanRouteBackward() const
128 {
129 return (access & (footBackward|bicycleBackward|carBackward))!=0;
130 }
131
132 bool CanRouteBackward(Vehicle vehicle) const
133 {
134 switch (vehicle)
135 {
136 case vehicleFoot:
137 return (access & footBackward)!=0;
138 case vehicleBicycle:
139 return (access & bicycleBackward)!=0;
140 case vehicleCar:
141 return (access & carBackward)!=0;
142 }
143
144 return false;
145 }
146
147 bool CanRouteFoot() const
148 {
149 return (access & footForward)!=0 ||
150 (access & footBackward)!=0;
151 }
152
154 {
155 return (access & footForward)!=0;
156 }
157
159 {
160 return (access & footBackward)!=0;
161 }
162
163 bool CanRouteBicycle() const
164 {
165 return (access & bicycleForward)!=0 ||
166 (access & bicycleBackward)!=0;
167 }
168
170 {
171 return (access & bicycleForward)!=0;
172 }
173
175 {
176 return (access & bicycleBackward)!=0;
177 }
178
179 bool CanRouteCar() const
180 {
181 return (access & carForward)!=0 ||
182 (access & carBackward)!=0;
183 }
184
186 {
187 return (access & carForward)!=0;
188 }
189
191 {
192 return (access & carBackward)!=0;
193 }
194
195 bool IsOneway() const
196 {
197 return (access & (onewayForward|onewayBackward))!=0;
198 }
199
200 bool IsOnewayForward() const
201 {
202 return (access & onewayForward)!=0;
203 }
204
205 bool IsOnewayBackward() const
206 {
207 return (access & onewayBackward)!=0;
208 }
209
210 void Read(FileScanner& scanner) override;
211 void Write(FileWriter& writer) override;
212
214 bool operator==(const FeatureValue& other) const override;
215 };
216
218 {
219 private:
220 TagId tagOneway;
221 TagId tagJunction;
222
223 TagId tagAccess;
224 TagId tagAccessForward;
225 TagId tagAccessBackward;
226
227 TagId tagFoot;
228 TagId tagFootForward;
229 TagId tagFootBackward;
230
231 TagId tagBicycle;
232 TagId tagBicycleForward;
233 TagId tagBicycleBackward;
234
235 TagId tagMotorVehicle;
236 TagId tagMotorVehicleForward;
237 TagId tagMotorVehicleBackward;
238
239 TagId tagMotorcar;
240 TagId tagMotorcarForward;
241 TagId tagMotorcarBackward;
242
243 public:
245 static const char* const NAME;
246
247 private:
248 void ParseAccessFlag(const std::string_view& value,
249 uint8_t& access,
250 uint8_t bit) const
251 {
252 access&=uint8_t(~bit);
253
254 if (!(value=="no")) {
255 access|=bit;
256 }
257 }
258
259 public:
260 void Initialize(TagRegistry& tagRegistry) override;
261
262 std::string GetName() const override;
263
264 size_t GetValueAlignment() const override;
265 size_t GetValueSize() const override;
266 FeatureValue* AllocateValue(void* buffer) override;
267
268 void Parse(TagErrorReporter& reporter,
269 const TagRegistry& tagRegistry,
270 const FeatureInstance& feature,
271 const ObjectOSMRef& object,
272 const TagMap& tags,
273 FeatureValueBuffer& buffer) const override;
274 };
275
277}
278
279#endif
#define OSMSCOUT_API
Definition CoreImportExport.h:45
Definition AccessFeature.h:218
FeatureValue * AllocateValue(void *buffer) override
void Initialize(TagRegistry &tagRegistry) override
void Parse(TagErrorReporter &reporter, const TagRegistry &tagRegistry, const FeatureInstance &feature, const ObjectOSMRef &object, const TagMap &tags, FeatureValueBuffer &buffer) const override
size_t GetValueSize() const override
static const char *const NAME
Definition AccessFeature.h:245
size_t GetValueAlignment() const override
std::string GetName() const override
bool CanRouteForward(Vehicle vehicle) const
Definition AccessFeature.h:112
AccessFeatureValue & operator=(const FeatureValue &other) override
bool IsOnewayBackward() const
Definition AccessFeature.h:205
bool CanRouteBicycle() const
Definition AccessFeature.h:163
bool CanRouteBackward() const
Definition AccessFeature.h:127
bool CanRouteBackward(Vehicle vehicle) const
Definition AccessFeature.h:132
void Write(FileWriter &writer) override
bool CanRouteCar() const
Definition AccessFeature.h:179
bool CanRouteForward() const
Definition AccessFeature.h:107
AccessFeatureValue(const AccessFeatureValue &other)=default
Access
Definition AccessFeature.h:33
@ carForward
Definition AccessFeature.h:38
@ bicycleBackward
Definition AccessFeature.h:37
@ footBackward
Definition AccessFeature.h:35
@ bicycleForward
Definition AccessFeature.h:36
@ onewayBackward
Definition AccessFeature.h:41
@ onewayForward
Definition AccessFeature.h:40
@ footForward
Definition AccessFeature.h:34
@ carBackward
Definition AccessFeature.h:39
bool CanRoute(Vehicle vehicle) const
Definition AccessFeature.h:72
bool CanRouteCarForward() const
Definition AccessFeature.h:185
bool CanRouteFootBackward() const
Definition AccessFeature.h:158
uint8_t GetAccess() const
Definition AccessFeature.h:62
bool CanRouteFootForward() const
Definition AccessFeature.h:153
void Read(FileScanner &scanner) override
void SetAccess(uint8_t access)
Definition AccessFeature.h:57
bool IsOnewayForward() const
Definition AccessFeature.h:200
bool CanRouteBicycleForward() const
Definition AccessFeature.h:169
bool operator==(const FeatureValue &other) const override
bool CanRouteFoot() const
Definition AccessFeature.h:147
bool CanRoute(VehicleMask vehicleMask) const
Definition AccessFeature.h:87
bool IsOneway() const
Definition AccessFeature.h:195
AccessFeatureValue(uint8_t access)
Definition AccessFeature.h:51
bool CanRouteBicycleBackward() const
Definition AccessFeature.h:174
bool CanRoute() const
Definition AccessFeature.h:67
bool CanRouteCarBackward() const
Definition AccessFeature.h:190
Definition TypeFeature.h:41
Definition FeatureReader.h:143
Definition TagErrorReporter.h:33
Definition Area.h:39
std::unordered_map< TagId, std::string > TagMap
Definition Tag.h:41
uint8_t VehicleMask
Definition OSMScoutTypes.h:61
Vehicle
Definition OSMScoutTypes.h:55
@ vehicleBicycle
Definition OSMScoutTypes.h:57
@ vehicleFoot
Definition OSMScoutTypes.h:56
@ vehicleCar
Definition OSMScoutTypes.h:58
FeatureValueReader< AccessFeature, AccessFeatureValue > AccessFeatureValueReader
Definition AccessFeature.h:276
uint16_t TagId
Definition Tag.h:39