1#ifndef OSMSCOUT_DISTANCE_H
2#define OSMSCOUT_DISTANCE_H
47 explicit Distance(
double meters):
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);
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();
210 return Distance::Of<Meter>(d);
215 return d.As<
Meter>();
241 return Distance::Of<Kilometer>(d);
272 return Distance::Of<Feet>(d);
287 return feet * 0.3048;
303 return Distance::Of<Yard>(d);
318 return yard / 0.9144;
334 return Distance::Of<Mile>(d);
349 return mile * 1609.344;
359 return Distance::Of<Meter>(m);
363 return Distance::Of<Kilometer>(km);
#define CLASS_FINAL
Definition Compiler.h:26
#define OSMSCOUT_API
Definition CoreImportExport.h:45
std::string AsString() const
bool operator>(const Distance &d) const
Definition Distance.h:129
bool operator==(const Distance &d) const
Definition Distance.h:119
Distance & operator-=(const Distance &d)
Definition Distance.h:81
static Distance Min(const Distance &a, const Distance &b)
Distance & operator+=(const Distance &d)
Definition Distance.h:75
double AsMeter() const
Definition Distance.h:70
Distance & operator=(const Distance &d)=default
Distance operator-(const Distance &d) const
Definition Distance.h:99
static Distance Of(double value)
Definition Distance.h:178
double As() const
Definition Distance.h:150
Distance operator*(double factor) const
Definition Distance.h:109
bool operator!=(const Distance &d) const
Definition Distance.h:124
bool operator<=(const Distance &d) const
Definition Distance.h:144
Distance & operator=(Distance &&d) noexcept
Definition Distance.h:64
static Distance Max(const Distance &a, const Distance &b)
bool operator<(const Distance &d) const
Definition Distance.h:134
Distance & operator*=(double d)
Definition Distance.h:87
Distance(const Distance &d)=default
bool operator>=(const Distance &d) const
Definition Distance.h:139
Distance operator/(double factor) const
Definition Distance.h:114
Distance(Distance &&d) noexcept
Definition Distance.h:59
Distance operator+(const Distance &d) const
Definition Distance.h:104
Distance & operator/=(double d)
Definition Distance.h:93
Definition Distance.h:204
std::string UnitStr() const override
Definition Distance.h:218
double Value(const class Distance &d) const override
Definition Distance.h:213
class Distance Distance(double d) const override
Definition Distance.h:208
static double FromMeter(double m)
Definition Distance.h:228
static double ToMeter(double m)
Definition Distance.h:223
~Meter() override=default
Distance Meters(double m)
Definition Distance.h:358
std::shared_ptr< DistanceUnit > DistanceUnitPtr
Definition Distance.h:201
Distance Kilometers(double km)
Definition Distance.h:362
std::ostream & operator<<(std::ostream &stream, const DBId &o)
Definition DBFileOffset.h:80
DistanceUnitSystem
Definition Distance.h:36
@ Imperial
Definition Distance.h:38
@ Metrics
Definition Distance.h:37
Definition Distance.h:193
virtual std::string UnitStr() const =0
virtual ~DistanceUnit()=default
virtual double Value(const class Distance &d) const =0
virtual class Distance Distance(double d) const =0
Definition Distance.h:266
std::string UnitStr() const override
Definition Distance.h:280
class Distance Distance(double d) const override
Definition Distance.h:270
static double FromMeter(double m)
Definition Distance.h:290
double Value(const class Distance &d) const override
Definition Distance.h:275
static double ToMeter(double feet)
Definition Distance.h:285
Definition Distance.h:235
double Value(const class Distance &d) const override
Definition Distance.h:244
static double ToMeter(double km)
Definition Distance.h:254
~Kilometer() override=default
class Distance Distance(double d) const override
Definition Distance.h:239
std::string UnitStr() const override
Definition Distance.h:249
static double FromMeter(double m)
Definition Distance.h:259
Definition Distance.h:328
double Value(const class Distance &d) const override
Definition Distance.h:337
std::string UnitStr() const override
Definition Distance.h:342
static double ToMeter(double mile)
Definition Distance.h:347
static double FromMeter(double m)
Definition Distance.h:352
class Distance Distance(double d) const override
Definition Distance.h:332
Definition Distance.h:297
static double ToMeter(double yard)
Definition Distance.h:316
class Distance Distance(double d) const override
Definition Distance.h:301
static double FromMeter(double m)
Definition Distance.h:321
double Value(const class Distance &d) const override
Definition Distance.h:306
std::string UnitStr() const override
Definition Distance.h:311