14 #include <boost/scoped_ptr.hpp>
15 #include <boost/logic/tribool.hpp>
16 #include <boost/cast.hpp>
20 namespace MAKVRinTerra
59 template <
typename Result =
void>
63 :
public boost::enable_shared_from_this<Implementation>
64 ,
private boost::noncopyable
67 typedef boost::shared_ptr<Implementation>
Ptr;
68 typedef boost::shared_ptr<const Implementation>
CPtr;
74 virtual Type type()
const;
76 virtual bool matches(
const DtFeature&)
const = 0;
78 virtual void print(std::ostream&)
const = 0;
79 virtual void pprint(std::ostream&,
unsigned indent)
const;
96 return *boost::polymorphic_downcast<const T*>(myImpl.get());
102 return dynamic_cast<const T*
>(myImpl.get());
114 bool isTrue()
const {
return type() == ETrue; }
115 bool isFalse()
const {
return type() == EFalse; }
118 bool matches(
const DtFeature& feature)
const;
123 boost::optional<DtQuery>
remove(boost::function<bool (const DtQuery&)>)
const;
128 void pprint(std::ostream&
stream,
unsigned indent = 0)
const;
129 std::string pprint(
unsigned indent = 0)
const;
148 template <
typename Result>
156 switch (query.
type())
158 case ETrue:
return visit(query.
cast<
True>());
159 case EFalse:
return visit(query.
cast<
False>());
160 case EAnd:
return visit(query.
cast<
And>());
161 case EOr:
return visit(query.
cast<
Or>());
162 case EOther:
return visit(query);
170 virtual Result visit(
const DtQuery&) = 0;
171 virtual Result visit(
const True&) = 0;
172 virtual Result visit(
const False&) = 0;
173 virtual Result visit(
const And&) = 0;
174 virtual Result visit(
const Or&) = 0;
183 virtual DtQuery apply(
const DtQuery&);
185 virtual DtQuery visit(
const DtQuery&) = 0;
186 virtual DtQuery visit(
const True&);
187 virtual DtQuery visit(
const False&);
188 virtual DtQuery visit(
const And&);
189 virtual DtQuery visit(
const Or&);
198 virtual void apply(
const DtQuery&);
200 virtual void visit(
const DtQuery&) = 0;
201 virtual void visit(
const True&);
202 virtual void visit(
const False&);
203 virtual void visit(
const And&);
204 virtual void visit(
const Or&);
214 bool matches(
const DtFeature& feature)
const;
215 void print(std::ostream&)
const;
225 bool matches(
const DtFeature& feature)
const;
226 void print(std::ostream&)
const;
238 bool matches(
const DtFeature& feature)
const;
239 void print(std::ostream&)
const;
240 void pprint(std::ostream&,
unsigned indent)
const;
262 bool matches(
const DtFeature& feature)
const;
263 void print(std::ostream&)
const;
264 void pprint(std::ostream&,
unsigned indent)
const;
283 void print(std::ostream&)
const;
299 static DtQuery Create(std::string);
300 static DtQuery Create(
const char*);
303 void print(std::ostream&)
const;
340 const boost::optional<DtFeature::Attribute>&,
341 const boost::optional<DtFeature::Attribute>&);
349 bool matches(
const DtFeature& feature)
const;
353 Comparison comparison()
const;
374 bool matches(
const DtFeature& feature)
const;
#define DT_DLL_features
stop complaining about multiple independent base classes for boost::noncopyable this should probably ...
Definition: featuresDefines.h:36
Type
Enumeration which allows algorithms easier access to the special query types.
Definition: query.h:42
DtFeature::Key myKey
Definition: query.h:317
Matches features which match two other DtQuery objects.
Definition: query.h:230
DtFeature::Attribute myValue
Definition: query.h:359
Key used to lookup attributes.
Definition: feature.h:66
Implementation::CPtr myImpl
Definition: query.h:132
DtQuery myLeftQuery
Definition: query.h:249
bool isTrue() const
Definition: query.h:114
DtFeatureGeometry::Type myType
Definition: query.h:291
Matches no features.
Definition: query.h:219
DtFeature::Key myAttributeKey
Definition: query.h:384
DT_DLL_terrainCS bool operator==(const DtDegMinSec &lhs, const DtDegMinSec &rhs)
Comparison myComparison
Definition: query.h:360
DT_DLL_features std::ostream & operator<<(std::ostream &, const DtFeatureTransform &)
std::ostream output.
DtQuery(Implementation::CPtr p)
Definition: query.h:86
Type type() const
Returns the type of the query.
Definition: query.h:112
DtQuery myRightQuery
Definition: query.h:274
Matches features that have an attribute with a certain key.
Definition: query.h:295
const Implementation & impl() const
Definition: query.h:88
bool isFalse() const
Definition: query.h:115
DtQuery myLeftQuery
Definition: query.h:273
DtAndQuery And
Definition: query.h:55
boost::shared_ptr< const Implementation > CPtr
Definition: query.h:68
Comparison myComparison
Definition: query.h:385
DtQuery myRightQuery
Definition: query.h:250
Represents a set of characeters a DtFeature object can have.
Definition: query.h:38
Matches features which match either of two other DtQuery objects.
Definition: query.h:254
DtHasAttribute Base
Definition: query.h:322
DtHasAttributeValue::Comparison Comparison
Definition: query.h:368
DtHasAttribute Base
Definition: query.h:365
DtOrQuery Or
Definition: query.h:56
DT_DLL_features DtQuery operator||(const DtQuery &, const DtQuery &)
bool operator>(const DtObjectType &lhs, const DtSimulationModelSetLoader::EntityData &rhs)
Definition: simulationModelSetLoader.h:1236
Matches any feature.
Definition: query.h:208
const T & cast() const
Definition: query.h:94
voidpf stream
Definition: ioapi.h:39
DT_DLL_features DtQuery operator&&(const DtQuery &, const DtQuery &)
DtFalseQuery False
Definition: query.h:54
DtTrueQuery True
Definition: query.h:53
virtual ~Visitor()
Definition: query.h:152
DtQuery(Implementation *i)
Definition: query.h:85
boost::shared_ptr< Implementation > Ptr
Definition: query.h:67
DtQuery(const Implementation &i)
Definition: query.h:84
virtual Result apply(const DtQuery &query)
Definition: query.h:154
Represents a GIS feature.
Definition: feature.h:37
DT_DLL_features std::istream & operator>>(std::istream &, DtQuery &)
iostream input iteration
DtQuery::Type Type
Definition: query.h:70
Comparison
Definition: query.h:325
const T * trycast() const
Definition: query.h:100
boost::variant< std::string, long long, bool, double > Attribute
boost::variant type for accessing attributes.
Definition: feature.h:46
void print(double **a, int r, int c, char *str)