- bool found = false;
- bool available = false;
-
-
- FGParkingVecIterator i;
- if (parkings.begin() == parkings.end()) {
- //cerr << "Could not find parking spot at " << _ap->getId() << endl;
- *lat = _ap->getLatitude();
- *lon = _ap->getLongitude();
- *heading = 0;
- found = true;
- } else {
- // First try finding a parking with a designated airline code
- for (i = parkings.begin(); !(i == parkings.end() || found); i++) {
- available = true;
- // Taken by another aircraft
- if (!(i->isAvailable())) {
- available = false;
- continue;
- }
- // No airline codes, so skip
- if (i->getCodes().empty()) {
- available = false;
- continue;
- } else { // Airline code doesn't match
- //cerr << "Code = " << airline << ": Codes " << i->getCodes();
- if (i->getCodes().find(airline, 0) == string::npos) {
- available = false;
- //cerr << "Unavailable" << endl;
- continue;
- } else {
- //cerr << "Available" << endl;
- }
- }
- // Type doesn't match
- if (i->getType() != flType) {
- available = false;
- continue;
- }
- // too small
- if (i->getRadius() < rad) {
- available = false;
- continue;
- }
-
- if (available) {
- *lat = i->getLatitude();
- *lon = i->getLongitude();
- *heading = i->getHeading();
- *gateId = i->getIndex();
- i->setAvailable(false);
- found = true;
- }
- }
- // then try again for those without codes.
- for (i = parkings.begin(); !(i == parkings.end() || found); i++) {
- available = true;
- if (!(i->isAvailable())) {
- available = false;
- continue;
- }
- if (!(i->getCodes().empty())) {
- if ((i->getCodes().find(airline, 0) == string::npos)) {
- available = false;
- continue;
- }
- }
- if (i->getType() != flType) {
- available = false;
- continue;
- }
-
- if (i->getRadius() < rad) {
- available = false;
- continue;
- }
-
- if (available) {
- *lat = i->getLatitude();
- *lon = i->getLongitude();
- *heading = i->getHeading();
- *gateId = i->getIndex();
- i->setAvailable(false);
- found = true;
- }
- }
- // And finally once more if that didn't work. Now ignore the airline codes, as a last resort
- for (i = parkings.begin(); !(i == parkings.end() || found); i++) {
- available = true;
- if (!(i->isAvailable())) {
- available = false;
- continue;
- }
- if (i->getType() != flType) {
- available = false;
- continue;
- }
-
- if (i->getRadius() < rad) {
- available = false;
- continue;
- }
-
- if (available) {
- *lat = i->getLatitude();
- *lon = i->getLongitude();
- *heading = i->getHeading();
- *gateId = i->getIndex();
- i->setAvailable(false);
- found = true;
- }
- }