X-Git-Url: https://irasnyder.com/gitweb/?a=blobdiff_plain;f=elevatorcontroller.cpp;h=034d4d9941a14b37be2ec6a36089cb5cad8655fd;hb=ff557197cf33a848ad2750d515f67f51113b8403;hp=2baea64c46f3c05b4402166e19dad5b84b164518;hpb=8c21925567593249a21992bb1e10d61e71f27739;p=cs356-p1-elevator.git diff --git a/elevatorcontroller.cpp b/elevatorcontroller.cpp index 2baea64..034d4d9 100644 --- a/elevatorcontroller.cpp +++ b/elevatorcontroller.cpp @@ -10,7 +10,7 @@ ElevatorController::ElevatorController (int floors, int elevators) /* Create and add all of the elevators */ for (int i=0; iis_idle ()) + { + /* If we have an IDLE elevator that is currently sitting at the + * requested floor, we should obviously send that. */ + if (it->distance_from (requested_stop) == 0) + { + it->stop_at (requested_stop); + return; + } + + /* Was not at the right floor, but still is a good cantidate */ idle_elevators.push_back (&(*it)); + } if (idle_elevators.size() > 0) { + std::vector::iterator idle_it; + bool found = false; + float distance = INT_MAX; + Elevator *e; + + /* Try to send the closest IDLE elevator */ + for (idle_it=idle_elevators.begin(); idle_it!=idle_elevators.end(); idle_it++) + { + if ((*idle_it)->distance_from (requested_stop) < distance) + { + found = true; + distance = (*idle_it)->distance_from (requested_stop); + e = *idle_it; + } + } + + if (found) + { + e->stop_at (requested_stop); + return; + } + + /* No closest IDLE elevator was found, so choose one randomly */ int num = choose_random_number_in_range (0, idle_elevators.size()); idle_elevators.at (num) -> stop_at (requested_stop);