GraphLibrary  0.0.1
A simple library that implements various graph algorithms.
 All Classes Namespaces Files Functions Variables Typedefs Macros
Distance.hpp
Go to the documentation of this file.
1 #ifndef GL_DISTANCE_HPP
2 #define GL_DISTANCE_HPP
3 
4 #include <string>
5 
6 namespace gl
7 {
12 template <class SCALAR>
13 struct Distance
14 {
15  Distance () : isInfinite_(true), distance_(0) {}
16  Distance (const SCALAR distance) : isInfinite_(false), distance_(distance) {}
17  Distance(const Distance &) = default;
18  Distance(Distance &&) noexcept = default;
19  Distance &operator=(const Distance &) = default;
20  Distance &operator=(Distance &&) noexcept = default;
21  ~Distance() = default;
22 
28  bool operator == (const Distance& rhs)
29  {
30  return isInfinite_ == rhs.isInfinite_
31  && distance_ == rhs.distance_;
32  }
38  bool operator!= (const Distance& rhs)
39  {
40  return !operator==(rhs);
41  }
47  bool operator< (const Distance& rhs)
48  {
49  if (isInfinite_) return false;
50  if (rhs.isInfinite_) return true;
51  if (distance_ < rhs.distance_) return true;
52  return false;
53  }
59  bool operator> (const Distance& rhs)
60  {
61  return !operator<(rhs) && operator!=(rhs);
62  }
68  inline Distance operator+ (const Distance& rhs)
69  {
70  Distance res; // set to infinite
71  if (isInfinite_ || rhs.isInfinite_)
72  return res;
74  return res;
75  }
76 
81  inline std::string getDistance() const
82  {
83  if (isInfinite()) return "Inf";
84  return std::to_string(distance_);
85  }
90  inline SCALAR scalarDistance() const
91  {
92  return isInfinite_ ? GL_INF(SCALAR) : distance_;
93  }
98  inline void setDistance (SCALAR distance)
99  {
100  distance_ = distance;
101  isInfinite_ = false;
102  }
103 
108  inline bool isInfinite() const
109  {
110  return isInfinite_;
111  }
115  inline void setInfinite() const
116  {
117  distance_ = 0;
118  isInfinite_ = true;
119  }
120 
125  inline bool isZero() const
126  {
127  return !isInfinite() && distance_ == 0;
128  }
129 
130 private:
132  SCALAR distance_;
133 };
134 
135 } // namespace gl
136 
137 #endif // GL_DISTANCE_HPP
bool isZero() const
Checks whether the distance is zero.
Definition: Distance.hpp:125
bool isInfinite_
Definition: Distance.hpp:131
Distance operator+(const Distance &rhs)
'addition' operator
Definition: Distance.hpp:68
void setInfinite() const
Sets the distance to infinity.
Definition: Distance.hpp:115
bool isInfinite() const
Checks whether the distance is infinite.
Definition: Distance.hpp:108
void setDistance(SCALAR distance)
Allows updating the distance.
Definition: Distance.hpp:98
std::string getDistance() const
Gets the distance.
Definition: Distance.hpp:81
bool operator!=(const Distance &rhs)
'inequality' operator
Definition: Distance.hpp:38
bool operator<(const Distance &rhs)
'less than' operator
Definition: Distance.hpp:47
SCALAR distance_
Definition: Distance.hpp:132
bool operator>(const Distance &rhs)
'greater than' operator
Definition: Distance.hpp:59
Implements a numerical distance that supports "infinite distance".
Definition: Distance.hpp:13
#define GL_INF(ValueType)
Definition: gl_base.hpp:7
Distance(const SCALAR distance)
Constructor with finite distance.
Definition: Distance.hpp:16
Distance()
Default constructor.
Definition: Distance.hpp:15
bool operator==(const Distance &rhs)
'equality' operator
Definition: Distance.hpp:28
SCALAR scalarDistance() const
Gets the numerical value of the distance. If the distance is infinite, returns the maximum value of t...
Definition: Distance.hpp:90