protected function thisConnectionIsBetter(Connection $connection)
 {
     $noExistingConnection = !isset($this->departures[$connection->getOrigin()]);
     if ($connection instanceof NonTimetableConnection) {
         return $noExistingConnection || $this->departures[$connection->getOrigin()] < $this->departures[$connection->getDestination()] - $connection->getDuration();
     } else {
         if ($connection instanceof TimetableConnection) {
             return $noExistingConnection || $this->departures[$connection->getOrigin()] < $connection->getDepartureTime();
         }
     }
     throw new PlanningException("Unknown connection type " . get_class($connection));
 }
 protected function thisConnectionIsBetter(Connection $connection)
 {
     if (!isset($this->arrivals[$connection->getDestination()])) {
         return true;
     } else {
         if ($connection instanceof NonTimetableConnection) {
             return $this->arrivals[$connection->getDestination()] > $this->arrivals[$connection->getOrigin()] + $connection->getDuration();
         } else {
             if ($connection instanceof TimetableConnection) {
                 return $this->arrivals[$connection->getDestination()] >= $connection->getArrivalTime();
             }
         }
     }
     throw new PlanningException("Unknown connection type " . get_class($connection));
 }