14 #include <boost/logic/tribool.hpp>
15 #include <boost/cast.hpp>
19 namespace MAKVRinTerra
58 template <
typename Result =
void>
62 :
public std::enable_shared_from_this<Implementation>
63 ,
private boost::noncopyable
66 typedef std::shared_ptr<Implementation>
Ptr;
67 typedef std::shared_ptr<const Implementation>
CPtr;
73 virtual Type type()
const;
75 virtual bool matches(
const DtFeature&)
const = 0;
77 virtual void print(std::ostream&)
const = 0;
78 virtual void pprint(std::ostream&,
unsigned indent)
const;
95 return *boost::polymorphic_downcast<const T*>(myImpl.get());
101 return dynamic_cast<const T*
>(myImpl.get());
113 bool isTrue()
const {
return type() == ETrue; }
114 bool isFalse()
const {
return type() == EFalse; }
117 bool matches(
const DtFeature& feature)
const;
122 boost::optional<DtQuery>
remove(boost::function<bool (const DtQuery&)>)
const;
127 void pprint(std::ostream&
stream,
unsigned indent = 0)
const;
128 std::string pprint(
unsigned indent = 0)
const;
147 template <
typename Result>
155 switch (query.
type())
157 case ETrue:
return visit(query.
cast<
True>());
158 case EFalse:
return visit(query.
cast<
False>());
159 case EAnd:
return visit(query.
cast<
And>());
160 case EOr:
return visit(query.
cast<
Or>());
161 case EOther:
return visit(query);
169 virtual Result visit(
const DtQuery&) = 0;
170 virtual Result visit(
const True&) = 0;
171 virtual Result visit(
const False&) = 0;
172 virtual Result visit(
const And&) = 0;
173 virtual Result visit(
const Or&) = 0;
182 virtual DtQuery apply(
const DtQuery&);
184 virtual DtQuery visit(
const DtQuery&) = 0;
185 virtual DtQuery visit(
const True&);
186 virtual DtQuery visit(
const False&);
187 virtual DtQuery visit(
const And&);
188 virtual DtQuery visit(
const Or&);
197 virtual void apply(
const DtQuery&);
199 virtual void visit(
const DtQuery&) = 0;
200 virtual void visit(
const True&);
201 virtual void visit(
const False&);
202 virtual void visit(
const And&);
203 virtual void visit(
const Or&);
212 virtual Type type()
const override;
213 virtual bool matches(
const DtFeature& feature)
const override;
214 virtual void print(std::ostream&)
const override;
223 virtual Type type()
const override;
224 virtual bool matches(
const DtFeature& feature)
const override;
225 virtual void print(std::ostream&)
const override;
236 virtual Type type()
const override;
237 virtual bool matches(
const DtFeature& feature)
const override;
238 virtual void print(std::ostream&)
const override;
239 virtual void pprint(std::ostream&,
unsigned indent)
const override;
260 virtual Type type()
const override;
261 virtual bool matches(
const DtFeature& feature)
const override;
262 virtual void print(std::ostream&)
const override;
263 virtual void pprint(std::ostream&,
unsigned indent)
const override;
281 virtual bool matches(
const DtFeature&)
const override;
282 virtual void print(std::ostream&)
const override;
298 static DtQuery Create(std::string);
299 static DtQuery Create(
const char*);
301 virtual bool matches(
const DtFeature&)
const override;
302 virtual void print(std::ostream&)
const override;
339 const boost::optional<DtFeature::Attribute>&,
340 const boost::optional<DtFeature::Attribute>&);
348 virtual bool matches(
const DtFeature& feature)
const override;
349 virtual void print(std::ostream&
stream)
const override;
352 Comparison comparison()
const;
373 virtual bool matches(
const DtFeature& feature)
const override;
374 virtual void print(std::ostream&
stream)
const override;
#define DT_DLL_features
stop complaining about multiple independent base classes for boost::noncopyable this should probably ...
Definition: featuresDefines.h:41
Type
Enumeration which allows algorithms easier access to the special query types.
Definition: query.h:41
DtFeature::Key myKey
Definition: query.h:316
Matches features which match two other DtQuery objects.
Definition: query.h:229
DtFeature::Attribute myValue
Definition: query.h:358
Key used to lookup attributes. The DtFeature interface is a dictionary that maps Key objects to attri...
Definition: feature.h:67
Implementation::CPtr myImpl
Definition: query.h:131
DtQuery myLeftQuery
Definition: query.h:248
bool isTrue() const
Definition: query.h:113
DtFeatureGeometry::Type myType
Definition: query.h:290
Matches no features.
Definition: query.h:218
bool operator>(const DtTemporaryAgentManager::AgentParameters &lhs, const DtTemporaryAgentManager::AgentParameters &rhs)
Definition: DtTemporaryAgentManager.h:76
DtFeature::Key myAttributeKey
Definition: query.h:383
DT_DLL_terrainCS bool operator==(const DtDegMinSec &lhs, const DtDegMinSec &rhs)
Comparison myComparison
Definition: query.h:359
DT_DLL_features std::ostream & operator<<(std::ostream &, const DtFeatureTransform &)
std::ostream output.
DtQuery(Implementation::CPtr p)
Definition: query.h:85
std::shared_ptr< Implementation > Ptr
Definition: query.h:66
Type type() const
Returns the type of the query. The query framework uses the return value of this function to optimize...
Definition: query.h:111
DtQuery myRightQuery
Definition: query.h:273
Matches features that have an attribute with a certain key.
Definition: query.h:294
const Implementation & impl() const
Definition: query.h:87
bool isFalse() const
Definition: query.h:114
DtQuery myLeftQuery
Definition: query.h:272
DtAndQuery And
Definition: query.h:54
void print(double **a, int r, int c, const char *str)
Comparison myComparison
Definition: query.h:384
DtQuery myRightQuery
Definition: query.h:249
Represents a set of characeters a DtFeature object can have. DtQuery objects are the way to communica...
Definition: query.h:37
Matches features which match either of two other DtQuery objects.
Definition: query.h:253
DtHasAttribute Base
Definition: query.h:321
DtHasAttributeValue::Comparison Comparison
Definition: query.h:367
DtHasAttribute Base
Definition: query.h:364
DtOrQuery Or
Definition: query.h:55
DT_DLL_features DtQuery operator||(const DtQuery &, const DtQuery &)
Matches any feature.
Definition: query.h:207
const T & cast() const
Definition: query.h:93
voidpf stream
Definition: ioapi.h:39
DT_DLL_features DtQuery operator&&(const DtQuery &, const DtQuery &)
DtFalseQuery False
Definition: query.h:53
DtTrueQuery True
Definition: query.h:52
virtual ~Visitor()
Definition: query.h:151
DtQuery(Implementation *i)
Definition: query.h:84
DtQuery(const Implementation &i)
Definition: query.h:83
std::shared_ptr< const Implementation > CPtr
Definition: query.h:67
virtual Result apply(const DtQuery &query)
Definition: query.h:153
Represents a GIS feature. Features consist of a DtFeatureGeometry (2.5D geometric vector data) and a ...
Definition: feature.h:36
DT_DLL_features std::istream & operator>>(std::istream &, DtQuery &)
iostream input iteration
DtQuery::Type Type
Definition: query.h:69
Comparison
Definition: query.h:324
const T * trycast() const
Definition: query.h:99
boost::variant< std::string, long long, bool, double > Attribute
boost::variant type for accessing attributes.
Definition: feature.h:47