X-Git-Url: https://irasnyder.com/gitweb/?a=blobdiff_plain;f=position.cpp;h=1d4a293fa6f2244c80c8771df5ea89783c50efcd;hb=f95be7131a6221491745f0a001f45589aa6acca3;hp=d38388b813eeddb86fceaff8c0127a120dce089d;hpb=dd9988b5db6dc820c5fcd07f88513d126e926d22;p=cs356-p1-elevator.git diff --git a/position.cpp b/position.cpp index d38388b..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,14 +29,14 @@ 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) + if (minor_ >= 10) { - _major += 1; - _minor -= 10; + major_ += 1; + minor_ -= 10; } return *this; @@ -45,40 +44,85 @@ Position& Position::operator+= (const float rhs) 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) +bool Position::operator< (const Position& rhs) const { - if (_major < rhs._major) + if (major_ < rhs.major_) return true; - if (_major == rhs._major) - if (_minor < rhs._minor) + if (major_ == rhs.major_) + if (minor_ < rhs.minor_) return true; return false; } -bool Position::operator> (const Position& rhs) +bool Position::operator> (const Position& rhs) const { - if (_major > rhs._major) + if (major_ > rhs.major_) return true; - if (_major == rhs._major) - if (_minor > rhs._minor) + if (major_ == rhs.major_) + if (minor_ > rhs.minor_) return true; return false; } -std::ostream& operator<< (std::ostream& os, Position& rhs) +Position Position::operator- (const Position& rhs) const { - os << "Position: " << rhs._major << "." << rhs._minor; - return os; + 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: */