AirportSequencing.py 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #!/usr/bin/env python
  2. from aman.config.RunwaySequencing import RunwaySequencing
  3. class AirportSequencing:
  4. def __init__(self, icao : str):
  5. self.ActiveArrivalRunways = []
  6. self.RunwayDependencies = []
  7. def clearData(self):
  8. self.ActiveArrivalRunways.clear()
  9. self.RunwayDependencies.clear()
  10. def activateRunway(self, runway : RunwaySequencing):
  11. for active in self.ActiveArrivalRunways:
  12. if active.Runway.Name == runway.Runway.Name:
  13. self.ActiveArrivalRunways[runway.Runway.Name] = runway
  14. return
  15. self.ActiveArrivalRunways.append(runway)
  16. def runwayIndex(self, identifier : str):
  17. for i in range(0, len(self.ActiveArrivalRunways)):
  18. if self.ActiveArrivalRunways[i].Runway.Name == identifier:
  19. return i
  20. return -1
  21. def deactivateRunway(self, identifier : str):
  22. index = self.runwayIndex(identifier)
  23. if 0 <= index:
  24. self.ActiveArrivalRunways.pop(index)
  25. # remove the dependencies
  26. for i in range(self.RunwayDependencies - 1, -1, -1):
  27. if index == self.RunwayDependencies[i][0] or index == self.RunwayDependencies[i][1]:
  28. self.RunwayDependencies.pop(i)
  29. def addDependency(self, first : str, second : str):
  30. idxFirst = self.runwayIndex(first)
  31. idxSecond = self.runwayIndex(second)
  32. if 0 > idxFirst or 0 > idxSecond:
  33. return
  34. foundFirst = False
  35. foundSecond = False
  36. for dependency in self.RunwayDependencies:
  37. if idxFirst == dependency[0] and idxSecond == dependency[1]:
  38. foundFirst = True
  39. elif idxFirst == dependency[1] and idxSecond == dependency[0]:
  40. foundSecond = True
  41. if False == foundFirst:
  42. self.RunwayDependencies.append([ idxFirst, idxSecond ])
  43. if False == foundSecond:
  44. self.RunwayDependencies.append([ idxSecond, idxFirst ])
  45. def removeDependency(self, first : str, second : str):
  46. idxFirst = self.runwayIndex(first)
  47. idxSecond = self.runwayIndex(second)
  48. if 0 > idxFirst or 0 > idxSecond:
  49. return
  50. for i in range(self.RunwayDependencies - 1, -1, -1):
  51. dependency = self.RunwayDependencies[i]
  52. # check for all the pairs
  53. if idxFirst == dependency[0] and idxSecond == dependency[1]:
  54. self.RunwayDependencies.pop(i)
  55. elif idxSecond == dependency[0] and idxSecond == dependency[0]:
  56. self.RunwayDependencies.pop(i)
  57. def findRunway(self, identifier : str):
  58. for runway in self.ActiveArrivalRunways:
  59. if runway.Runway.Name == identifier:
  60. return runway
  61. return None
  62. def findDependentRunway(self, identifier : str):
  63. # runway is unknown
  64. index = self.runwayIndex(identifier)
  65. if 0 > index:
  66. return None
  67. # search the dependency pair
  68. for dependency in self.RunwayDependencies:
  69. if index == dependency[0]:
  70. return self.ActiveArrivalRunways[dependency[1]]
  71. # no dependencies found
  72. return None