BUGFIX: Elevators did not handle Requests in the correct order
[cs356-p1-elevator.git] / position.cpp
index d38388b..1d4a293 100644 (file)
@@ -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: */