X-Git-Url: https://irasnyder.com/gitweb/?a=blobdiff_plain;f=stop.cpp;h=d4cb7f7ff7c6628a64bc0de641e8be5f9f4ba994;hb=637a3859106f650f9acfff7209efef3a73a3980a;hp=6595d29a9b37cdda2a0614a9a1b4a73d56320ae2;hpb=fb458316875aebf0ab70211d6aac8b3d68556b52;p=cs356-p1-elevator.git diff --git a/stop.cpp b/stop.cpp index 6595d29..d4cb7f7 100644 --- a/stop.cpp +++ b/stop.cpp @@ -1,15 +1,71 @@ #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 (direction_ == ALL || rhs.direction_ == ALL) + return true; + + 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: */