{
StopList::iterator it;
+ if (stop.getDirection() == IDLE)
+ throw bad_direction();
+#if 0
/* If this is an "ALL" Stop, it supercedes all others */
if (stop.getDirection() == ALL)
{
stops_.push_back (stop);
return;
}
+#endif
/* Check if this stop already exists. If so, just leave */
for (it = stops_.begin(); it != stops_.end(); it++)
++stops_below;
}
+ std::cout << "Elevator: " << number_ << " stopping in direction=" << direction_ << std::endl;
+
+ /* Always unpress the in-elevator button for this stop, as well
+ * as clear the stop. This is like letting people off at a floor. */
+ gui_unpress_request_button (number_, (int)position_);
+ stops_.remove (Stop(position_, ALL));
+
+
/* If we are going to switch direction, clear all stops here,
* regardless of direction.
*
* Otherwise, just clear this stop */
if (direction_ == UP && stops_above == 0)
{
- stops_.remove (Stop(position_, ALL));
- gui_unpress_request_button (number_, (int)position_);
+ stops_.remove (Stop(position_, UP));
+ stops_.remove (Stop(position_, DOWN));
gui_unpress_call_button ((int)position_, UP);
gui_unpress_call_button ((int)position_, DOWN);
}
else if (direction_ == DOWN && stops_below == 0)
{
- stops_.remove (Stop(position_, ALL));
- gui_unpress_request_button (number_, (int)position_);
+ stops_.remove (Stop(position_, UP));
+ stops_.remove (Stop(position_, DOWN));
gui_unpress_call_button ((int)position_, UP);
gui_unpress_call_button ((int)position_, DOWN);
}
else if (direction_ == IDLE)
{
- stops_.remove (Stop(position_, ALL));
- gui_unpress_request_button (number_, (int)position_);
+ stops_.remove (Stop(position_, UP));
+ stops_.remove (Stop(position_, DOWN));
gui_unpress_call_button ((int)position_, UP);
gui_unpress_call_button ((int)position_, DOWN);
}
{
stops_.remove (Stop(position_, direction_));
gui_unpress_call_button ((int)position_, direction_);
- gui_unpress_request_button (number_, (int)position_);
}
// TODO: Call into the GUI to open the door
return stops_.size ();
}
+bool Elevator::willStopAt (int floor, Direction direction) const
+{
+ Stop s (floor, direction);
+ StopList::const_iterator it;
+
+ for (it=stops_.begin(); it != stops_.end(); it++)
+ if (*it == s)
+ return true;
+
+ return false;
+}
+
/* vim: set ts=4 sts=4 sw=4 noexpandtab textwidth=112: */