1 #ifndef OSMSCOUT_DISTANCE_H 2 #define OSMSCOUT_DISTANCE_H 47 explicit Distance(
double meters):
53 ~Distance() =
default;
55 Distance(
const Distance &d) =
default;
57 Distance& operator=(
const Distance &d) =
default;
61 std::swap(meters, d.meters);
66 std::swap(meters, d.meters);
101 return Distance(meters-d.meters);
106 return Distance(meters+d.meters);
111 return Distance(meters*factor);
116 return Distance(meters / factor);
121 return meters == d.meters;
126 return meters != d.meters;
131 return meters > d.meters;
136 return meters < d.meters;
141 return meters >= d.meters;
146 return meters <= d.meters;
149 template <
typename Unit>
152 return Unit::FromMeter(meters);
155 std::string AsString()
const;
157 static Distance Zero();
159 static Distance Max();
165 static Distance Min();
171 static Distance Lowest();
173 static Distance Max(
const Distance &a,
const Distance &b);
175 static Distance Min(
const Distance &a,
const Distance &b);
177 template <
typename Unit>
178 static Distance
Of(
double value)
180 return Distance(Unit::ToMeter(value));
185 const Distance& distance)
187 os << distance.AsString();
196 virtual class Distance Distance(double d) const = 0;
197 virtual double Value(
const class Distance &d)
const = 0;
198 virtual std::string UnitStr()
const = 0;
206 ~
Meter()
override =
default;
208 class Distance Distance(double d) const override
210 return Distance::Of<Meter>(d);
213 double Value(
const class Distance &d)
const override 215 return d.As<
Meter>();
239 class Distance Distance(double d) const override
241 return Distance::Of<Kilometer>(d);
244 double Value(
const class Distance &d)
const override 268 ~
Feet()
override =
default;
270 class Distance Distance(double d) const override
272 return Distance::Of<Feet>(d);
275 double Value(
const class Distance &d)
const override 287 return feet * 0.3048;
299 ~
Yard()
override =
default;
301 class Distance Distance(double d) const override
303 return Distance::Of<Yard>(d);
306 double Value(
const class Distance &d)
const override 318 return yard / 0.9144;
330 ~
Mile()
override =
default;
332 class Distance Distance(double d) const override
334 return Distance::Of<Mile>(d);
337 double Value(
const class Distance &d)
const override 349 return mile * 1609.344;
359 return Distance::Of<Meter>(m);
363 return Distance::Of<Kilometer>(km);
368 #endif //OSMSCOUT_DISTANCE_H DistanceUnitSystem
Definition: Distance.h:35
Distance & operator-=(const Distance &d)
Definition: Distance.h:81
Distance & operator+=(const Distance &d)
Definition: Distance.h:75
Distance operator-(const Distance &d) const
Definition: Distance.h:99
double AsMeter() const
Definition: Distance.h:70
Definition: Distance.h:192
static double ToMeter(double m)
Definition: Distance.h:223
std::string UnitStr() const override
Definition: Distance.h:311
static double FromMeter(double m)
Definition: Distance.h:352
double Value(const class Distance &d) const override
Definition: Distance.h:306
Distance & operator*=(double d)
Definition: Distance.h:87
static double ToMeter(double feet)
Definition: Distance.h:285
double Value(const class Distance &d) const override
Definition: Distance.h:244
double As() const
Definition: Distance.h:150
Definition: Distance.h:296
static double FromMeter(double m)
Definition: Distance.h:228
Distance operator+(const Distance &d) const
Definition: Distance.h:104
std::ostream & operator<<(std::ostream &stream, const DBId &o)
Definition: DBFileOffset.h:80
double Value(const class Distance &d) const override
Definition: Distance.h:337
static double ToMeter(double yard)
Definition: Distance.h:316
Definition: Distance.h:327
Distance(Distance &&d) noexcept
Definition: Distance.h:59
bool operator==(const Distance &d) const
Definition: Distance.h:119
std::string UnitStr() const override
Definition: Distance.h:280
std::string UnitStr() const override
Definition: Distance.h:218
bool operator<=(const Distance &d) const
Definition: Distance.h:144
bool operator>(const Distance &d) const
Definition: Distance.h:129
Distance Kilometers(double km)
Definition: Distance.h:362
double Value(const class Distance &d) const override
Definition: Distance.h:275
Definition: Distance.h:265
Definition: Distance.h:234
#define CLASS_FINAL
Definition: Compiler.h:26
#define OSMSCOUT_API
Definition: CoreImportExport.h:45
static double FromMeter(double m)
Definition: Distance.h:290
std::string UnitStr() const override
Definition: Distance.h:342
static double ToMeter(double mile)
Definition: Distance.h:347
double Value(const class Distance &d) const override
Definition: Distance.h:213
static double FromMeter(double m)
Definition: Distance.h:259
Distance operator*(double factor) const
Definition: Distance.h:109
static Distance Of(double value)
Definition: Distance.h:178
bool operator<(const Distance &d) const
Definition: Distance.h:134
std::shared_ptr< DistanceUnit > DistanceUnitPtr
Definition: Distance.h:201
bool operator!=(const Distance &d) const
Definition: Distance.h:124
Distance Meters(double m)
Definition: Distance.h:358
Definition: Distance.h:203
bool operator>=(const Distance &d) const
Definition: Distance.h:139
static double ToMeter(double km)
Definition: Distance.h:254
Distance & operator=(Distance &&d) noexcept
Definition: Distance.h:64
static double FromMeter(double m)
Definition: Distance.h:321
std::string UnitStr() const override
Definition: Distance.h:249
Distance operator/(double factor) const
Definition: Distance.h:114
Distance & operator/=(double d)
Definition: Distance.h:93