{
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++)
position_ += ELEVATOR_STEP;
// TODO: Call into the GUI to update the position
- gui_update_position_label (number_, (float)position_);
+ gui_update_position_label (number_, (float)position_, direction_);
std::cout << "Updating the GUI with our position: " << position_ << std::endl;
}
position_ -= ELEVATOR_STEP;
// TODO: Call into the GUI to update the position
- gui_update_position_label (number_, (float)position_);
+ gui_update_position_label (number_, (float)position_, direction_);
std::cout << "Updating the GUI with our position: " << position_ << std::endl;
}
void Elevator::transition_move_idle ()
{
direction_ = IDLE;
+ // TODO: Call into the GUI to update the position
+ gui_update_position_label (number_, (float)position_, direction_);
// do not change position while IDLE
}
++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);
}
bool Elevator::is_idle () const
{
+ if (stops_.size() != 0)
+ return false;
+
return direction_ == IDLE;
}
+int Elevator::getLoad () const
+{
+ 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: */