X-Git-Url: https://irasnyder.com/gitweb/?a=blobdiff_plain;ds=sidebyside;f=position.cpp;h=1d4a293fa6f2244c80c8771df5ea89783c50efcd;hb=ebce8052bac9ec200fab30773230bb69e5c988af;hp=86dc08af6aa3d57d637d01d53b26315b02b33d32;hpb=90cabce172856326923f36c9a05fae01138d25aa;p=cs356-p1-elevator.git diff --git a/position.cpp b/position.cpp index 86dc08a..1d4a293 100644 --- a/position.cpp +++ b/position.cpp @@ -1,28 +1,27 @@ #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) @@ -30,17 +29,100 @@ 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: */