Add the hacks to fix disabling of buttons
[cs356-p1-elevator.git] / stop.cpp
index 6595d29..54f0f4f 100644 (file)
--- a/stop.cpp
+++ b/stop.cpp
@@ -1,15 +1,72 @@
 #include "stop.hpp"
 
-Stop::Stop (int floor, enum direction mydirection)
-       : Position(floor)
-       , _direction(mydirection)
+Stop::Stop (const Position& position, const Direction& direction)
+       : position_(position)
+       , direction_(direction)
 {
        // Intentionally Left Empty
 }
 
-bool Stop::operator== (Stop& rhs)
+bool Stop::operator== (const Stop& rhs) const
 {
-       return (Position::operator==(rhs)) && (_direction == rhs._direction);
+       if (rhs.position_ != position_)
+               return false;
+
+#if 0
+       if (direction_ == ALL || rhs.direction_ == ALL)
+               return true;
+#endif
+
+       return (rhs.direction_ == direction_);
+}
+
+bool Stop::operator< (const Stop& rhs) const
+{
+       /* If we do not use the direction to help differentiate, then it is
+        * possible that an object can be neither less, greater, or equal */
+       return (position_ < rhs.position_);
+}
+
+bool Stop::operator> (const Stop& rhs) const
+{
+       return (position_ > rhs.position_);
+}
+
+const Direction Stop::getDirection () const
+{
+       return direction_;
+}
+
+const Position Stop::getPosition () const
+{
+       return position_;
+}
+
+std::ostream& operator<< (std::ostream& os, const Stop& rhs)
+{
+       os << "Stop(" << rhs.position_ << ", "; // << rhs.direction_ << ")";
+
+       switch (rhs.direction_)
+       {
+               case IDLE:
+                       os << "IDLE";
+                       break;
+               case UP:
+                       os << "UP";
+                       break;
+               case DOWN:
+                       os << "DOWN";
+                       break;
+               case ALL:
+                       os << "ALL";
+                       break;
+               default:
+                       os << "UNHANDLED";
+                       break;
+       }
+
+       os << ")";
+       return os;
 }
 
 /* vim: set ts=4 sts=4 sw=4 noexpandtab textwidth=112: */