#include "position.hpp"
Position::Position ()
- : _major(0)
- , _minor(0)
+ : major_(0)
+ , minor_(0)
{
// Intentionally Empty
}
Position::Position (int initial_position)
- : _major(initial_position)
- , _minor(0)
+ : major_(initial_position)
+ , minor_(0)
{
// Intentionally Empty
}
-bool Position::operator== (const Position& rhs)
+bool Position::operator== (const Position& rhs) const
{
- return (_major == rhs._major) && (_minor == rhs._minor);
+ return (major_ == rhs.major_) && (minor_ == rhs.minor_);
}
-
-bool Position::operator== (const int rhs)
+bool Position::operator!= (const Position& rhs) const
{
- return (_major == rhs) && (_minor == 0);
+ return ! (*this == rhs);
}
Position& Position::operator+= (const float rhs)
int major = (int)rhs;
int minor = (int)((rhs - major) * 10);
- _major += major;
- _minor += minor;
+ major_ += major;
+ minor_ += minor;
+
+ /* Check for overflow */
+ if (minor_ >= 10)
+ {
+ major_ += 1;
+ minor_ -= 10;
+ }
return *this;
}
Position& Position::operator-= (const float rhs)
{
- *this += -rhs;
+ int major = (int)rhs;
+ int minor = (int)((rhs - major) * 10);
+
+ major_ -= major;
+ minor_ -= minor;
+
+ /* Check for underflow */
+ if (minor_ < 0)
+ {
+ major_ -= 1;
+ minor_ += 10;
+ }
return *this;
}
+bool Position::operator< (const Position& rhs) const
+{
+ if (major_ < rhs.major_)
+ return true;
+
+ if (major_ == rhs.major_)
+ if (minor_ < rhs.minor_)
+ return true;
+
+ return false;
+}
+
+bool Position::operator> (const Position& rhs) const
+{
+ if (major_ > rhs.major_)
+ return true;
+
+ if (major_ == rhs.major_)
+ if (minor_ > rhs.minor_)
+ return true;
+
+ return false;
+}
+
+Position Position::operator- (const Position& rhs) const
+{
+ Position temp;
+
+ int major = major_ - rhs.major_;
+ int minor = minor_ - rhs.minor_;
+
+ /* Check for underflow */
+ if (minor < 0)
+ {
+ minor += 10;
+ major -= 1;
+ }
+
+ temp.major_ = major;
+ temp.minor_ = minor;
+
+ return temp;
+}
+
+Position::operator float() const
+{
+ float temp;
+
+ temp = major_;
+ temp += minor_ / 10.0;
+
+ return temp;
+}
+
+Position::operator int() const
+{
+ return major_;
+}
+
+std::ostream& operator<< (std::ostream& os, const Position& rhs)
+{
+ os << "Position(" << rhs.major_ << "." << rhs.minor_ << ")";
+ return os;
+}
+
/* vim: set ts=4 sts=4 sw=4 noexpandtab textwidth=112: */