Move coordinate constructors to header to enable inlining

This commit is contained in:
Patrick Niklaus 2016-04-30 02:39:37 +02:00
parent 212ad94c90
commit 21a76f1867
No known key found for this signature in database
GPG Key ID: E426891B5F978B1B
2 changed files with 28 additions and 43 deletions

View File

@ -127,10 +127,16 @@ struct Coordinate
FixedLongitude lon; FixedLongitude lon;
FixedLatitude lat; FixedLatitude lat;
Coordinate(); Coordinate() : lon(std::numeric_limits<int>::min()), lat(std::numeric_limits<int>::min()) {}
Coordinate(const FloatCoordinate &other); Coordinate(const FloatCoordinate &other);
Coordinate(const FixedLongitude lon_, const FixedLatitude lat_);
Coordinate(const FloatLongitude lon_, const FloatLatitude lat_); Coordinate(const FloatLongitude lon_, const FloatLatitude lat_)
: Coordinate(toFixed(lon_), toFixed(lat_))
{
}
Coordinate(const FixedLongitude lon_, const FixedLatitude lat_) : lon(lon_), lat(lat_) {}
template <class T> Coordinate(const T &coordinate) : lon(coordinate.lon), lat(coordinate.lat) template <class T> Coordinate(const T &coordinate) : lon(coordinate.lon), lat(coordinate.lat)
{ {
@ -166,10 +172,22 @@ struct FloatCoordinate
FloatLongitude lon; FloatLongitude lon;
FloatLatitude lat; FloatLatitude lat;
FloatCoordinate(); FloatCoordinate()
FloatCoordinate(const FixedLongitude lon_, const FixedLatitude lat_); : lon(std::numeric_limits<double>::min()), lat(std::numeric_limits<double>::min())
FloatCoordinate(const FloatLongitude lon_, const FloatLatitude lat_); {
FloatCoordinate(const Coordinate other); }
FloatCoordinate(const Coordinate other)
: FloatCoordinate(toFloating(other.lon), toFloating(other.lat))
{
}
FloatCoordinate(const FixedLongitude lon_, const FixedLatitude lat_)
: FloatCoordinate(toFloating(lon_), toFloating(lat_))
{
}
FloatCoordinate(const FloatLongitude lon_, const FloatLatitude lat_) : lon(lon_), lat(lat_) {}
bool IsValid() const; bool IsValid() const;
friend bool operator==(const FloatCoordinate lhs, const FloatCoordinate rhs); friend bool operator==(const FloatCoordinate lhs, const FloatCoordinate rhs);
@ -181,6 +199,9 @@ bool operator==(const Coordinate lhs, const Coordinate rhs);
bool operator==(const FloatCoordinate lhs, const FloatCoordinate rhs); bool operator==(const FloatCoordinate lhs, const FloatCoordinate rhs);
std::ostream &operator<<(std::ostream &out, const Coordinate coordinate); std::ostream &operator<<(std::ostream &out, const Coordinate coordinate);
std::ostream &operator<<(std::ostream &out, const FloatCoordinate coordinate); std::ostream &operator<<(std::ostream &out, const FloatCoordinate coordinate);
inline Coordinate::Coordinate(const FloatCoordinate &other) : Coordinate(toFixed(other.lon), toFixed(other.lat)) {}
} }
} }

View File

@ -17,24 +17,6 @@ namespace osrm
namespace util namespace util
{ {
Coordinate::Coordinate()
: lon(std::numeric_limits<int>::min()), lat(std::numeric_limits<int>::min())
{
}
Coordinate::Coordinate(const FloatCoordinate &other)
: Coordinate(toFixed(other.lon), toFixed(other.lat))
{
}
Coordinate::Coordinate(const FloatLongitude lon_, const FloatLatitude lat_)
: Coordinate(toFixed(lon_), toFixed(lat_))
{
}
Coordinate::Coordinate(const FixedLongitude lon_, const FixedLatitude lat_) : lon(lon_), lat(lat_)
{
}
bool Coordinate::IsValid() const bool Coordinate::IsValid() const
{ {
@ -44,24 +26,6 @@ bool Coordinate::IsValid() const
lon < FixedLongitude(-180 * COORDINATE_PRECISION)); lon < FixedLongitude(-180 * COORDINATE_PRECISION));
} }
FloatCoordinate::FloatCoordinate()
: lon(std::numeric_limits<double>::min()), lat(std::numeric_limits<double>::min())
{
}
FloatCoordinate::FloatCoordinate(const Coordinate other)
: FloatCoordinate(toFloating(other.lon), toFloating(other.lat))
{
}
FloatCoordinate::FloatCoordinate(const FixedLongitude lon_, const FixedLatitude lat_)
: FloatCoordinate(toFloating(lon_), toFloating(lat_))
{
}
FloatCoordinate::FloatCoordinate(const FloatLongitude lon_, const FloatLatitude lat_) : lon(lon_), lat(lat_)
{
}
bool FloatCoordinate::IsValid() const bool FloatCoordinate::IsValid() const
{ {