summaryrefslogtreecommitdiff
path: root/src/pathfinder
diff options
context:
space:
mode:
Diffstat (limited to 'src/pathfinder')
-rw-r--r--src/pathfinder/yapf/yapf.hpp1
-rw-r--r--src/pathfinder/yapf/yapf_node_rail.hpp69
-rw-r--r--src/pathfinder/yapf/yapf_type.hpp84
3 files changed, 85 insertions, 69 deletions
diff --git a/src/pathfinder/yapf/yapf.hpp b/src/pathfinder/yapf/yapf.hpp
index be438fc49..fda79287d 100644
--- a/src/pathfinder/yapf/yapf.hpp
+++ b/src/pathfinder/yapf/yapf.hpp
@@ -29,6 +29,7 @@
#include "../../misc/dbg_helpers.h"
#include "nodelist.hpp"
#include "../follow_track.hpp"
+#include "yapf_type.hpp"
#include "yapf_base.hpp"
#include "yapf_node.hpp"
#include "yapf_common.hpp"
diff --git a/src/pathfinder/yapf/yapf_node_rail.hpp b/src/pathfinder/yapf/yapf_node_rail.hpp
index 765fa0daf..4950b2d29 100644
--- a/src/pathfinder/yapf/yapf_node_rail.hpp
+++ b/src/pathfinder/yapf/yapf_node_rail.hpp
@@ -61,75 +61,6 @@ struct CYapfRailSegmentKey
}
};
-/* Enum used in PfCalcCost() to see why was the segment closed. */
-enum EndSegmentReason {
- /* The following reasons can be saved into cached segment */
- ESR_DEAD_END = 0, ///< track ends here
- ESR_RAIL_TYPE, ///< the next tile has a different rail type than our tiles
- ESR_INFINITE_LOOP, ///< infinite loop detected
- ESR_SEGMENT_TOO_LONG, ///< the segment is too long (possible infinite loop)
- ESR_CHOICE_FOLLOWS, ///< the next tile contains a choice (the track splits to more than one segments)
- ESR_DEPOT, ///< stop in the depot (could be a target next time)
- ESR_WAYPOINT, ///< waypoint encountered (could be a target next time)
- ESR_STATION, ///< station encountered (could be a target next time)
- ESR_SAFE_TILE, ///< safe waiting position found (could be a target)
-
- /* The following reasons are used only internally by PfCalcCost().
- * They should not be found in the cached segment. */
- ESR_PATH_TOO_LONG, ///< the path is too long (searching for the nearest depot in the given radius)
- ESR_FIRST_TWO_WAY_RED, ///< first signal was 2-way and it was red
- ESR_LOOK_AHEAD_END, ///< we have just passed the last look-ahead signal
- ESR_TARGET_REACHED, ///< we have just reached the destination
-
- /* Special values */
- ESR_NONE = 0xFF, ///< no reason to end the segment here
-};
-
-enum EndSegmentReasonBits {
- ESRB_NONE = 0,
-
- ESRB_DEAD_END = 1 << ESR_DEAD_END,
- ESRB_RAIL_TYPE = 1 << ESR_RAIL_TYPE,
- ESRB_INFINITE_LOOP = 1 << ESR_INFINITE_LOOP,
- ESRB_SEGMENT_TOO_LONG = 1 << ESR_SEGMENT_TOO_LONG,
- ESRB_CHOICE_FOLLOWS = 1 << ESR_CHOICE_FOLLOWS,
- ESRB_DEPOT = 1 << ESR_DEPOT,
- ESRB_WAYPOINT = 1 << ESR_WAYPOINT,
- ESRB_STATION = 1 << ESR_STATION,
- ESRB_SAFE_TILE = 1 << ESR_SAFE_TILE,
-
- ESRB_PATH_TOO_LONG = 1 << ESR_PATH_TOO_LONG,
- ESRB_FIRST_TWO_WAY_RED = 1 << ESR_FIRST_TWO_WAY_RED,
- ESRB_LOOK_AHEAD_END = 1 << ESR_LOOK_AHEAD_END,
- ESRB_TARGET_REACHED = 1 << ESR_TARGET_REACHED,
-
- /* Additional (composite) values. */
-
- /* What reasons mean that the target can be found and needs to be detected. */
- ESRB_POSSIBLE_TARGET = ESRB_DEPOT | ESRB_WAYPOINT | ESRB_STATION | ESRB_SAFE_TILE,
-
- /* What reasons can be stored back into cached segment. */
- ESRB_CACHED_MASK = ESRB_DEAD_END | ESRB_RAIL_TYPE | ESRB_INFINITE_LOOP | ESRB_SEGMENT_TOO_LONG | ESRB_CHOICE_FOLLOWS | ESRB_DEPOT | ESRB_WAYPOINT | ESRB_STATION | ESRB_SAFE_TILE,
-
- /* Reasons to abort pathfinding in this direction. */
- ESRB_ABORT_PF_MASK = ESRB_DEAD_END | ESRB_PATH_TOO_LONG | ESRB_INFINITE_LOOP | ESRB_FIRST_TWO_WAY_RED,
-};
-
-DECLARE_ENUM_AS_BIT_SET(EndSegmentReasonBits)
-
-inline CStrA ValueStr(EndSegmentReasonBits bits)
-{
- static const char * const end_segment_reason_names[] = {
- "DEAD_END", "RAIL_TYPE", "INFINITE_LOOP", "SEGMENT_TOO_LONG", "CHOICE_FOLLOWS",
- "DEPOT", "WAYPOINT", "STATION", "SAFE_TILE",
- "PATH_TOO_LONG", "FIRST_TWO_WAY_RED", "LOOK_AHEAD_END", "TARGET_REACHED"
- };
-
- CStrA out;
- out.Format("0x%04X (%s)", bits, ComposeNameT(bits, end_segment_reason_names, "UNK", ESRB_NONE, "NONE").Data());
- return out.Transfer();
-}
-
/** cached segment cost for rail YAPF */
struct CYapfRailSegment
{
diff --git a/src/pathfinder/yapf/yapf_type.hpp b/src/pathfinder/yapf/yapf_type.hpp
new file mode 100644
index 000000000..8d24eee5e
--- /dev/null
+++ b/src/pathfinder/yapf/yapf_type.hpp
@@ -0,0 +1,84 @@
+/* $Id$ */
+
+/*
+ * This file is part of OpenTTD.
+ * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** @file yapf_type.hpp Types used by YAPF. */
+
+#ifndef YAPF_TYPE_HPP
+#define YAPF_TYPE_HPP
+
+/* Enum used in PfCalcCost() to see why was the segment closed. */
+enum EndSegmentReason {
+ /* The following reasons can be saved into cached segment */
+ ESR_DEAD_END = 0, ///< track ends here
+ ESR_RAIL_TYPE, ///< the next tile has a different rail type than our tiles
+ ESR_INFINITE_LOOP, ///< infinite loop detected
+ ESR_SEGMENT_TOO_LONG, ///< the segment is too long (possible infinite loop)
+ ESR_CHOICE_FOLLOWS, ///< the next tile contains a choice (the track splits to more than one segments)
+ ESR_DEPOT, ///< stop in the depot (could be a target next time)
+ ESR_WAYPOINT, ///< waypoint encountered (could be a target next time)
+ ESR_STATION, ///< station encountered (could be a target next time)
+ ESR_SAFE_TILE, ///< safe waiting position found (could be a target)
+
+ /* The following reasons are used only internally by PfCalcCost().
+ * They should not be found in the cached segment. */
+ ESR_PATH_TOO_LONG, ///< the path is too long (searching for the nearest depot in the given radius)
+ ESR_FIRST_TWO_WAY_RED, ///< first signal was 2-way and it was red
+ ESR_LOOK_AHEAD_END, ///< we have just passed the last look-ahead signal
+ ESR_TARGET_REACHED, ///< we have just reached the destination
+
+ /* Special values */
+ ESR_NONE = 0xFF, ///< no reason to end the segment here
+};
+
+enum EndSegmentReasonBits {
+ ESRB_NONE = 0,
+
+ ESRB_DEAD_END = 1 << ESR_DEAD_END,
+ ESRB_RAIL_TYPE = 1 << ESR_RAIL_TYPE,
+ ESRB_INFINITE_LOOP = 1 << ESR_INFINITE_LOOP,
+ ESRB_SEGMENT_TOO_LONG = 1 << ESR_SEGMENT_TOO_LONG,
+ ESRB_CHOICE_FOLLOWS = 1 << ESR_CHOICE_FOLLOWS,
+ ESRB_DEPOT = 1 << ESR_DEPOT,
+ ESRB_WAYPOINT = 1 << ESR_WAYPOINT,
+ ESRB_STATION = 1 << ESR_STATION,
+ ESRB_SAFE_TILE = 1 << ESR_SAFE_TILE,
+
+ ESRB_PATH_TOO_LONG = 1 << ESR_PATH_TOO_LONG,
+ ESRB_FIRST_TWO_WAY_RED = 1 << ESR_FIRST_TWO_WAY_RED,
+ ESRB_LOOK_AHEAD_END = 1 << ESR_LOOK_AHEAD_END,
+ ESRB_TARGET_REACHED = 1 << ESR_TARGET_REACHED,
+
+ /* Additional (composite) values. */
+
+ /* What reasons mean that the target can be found and needs to be detected. */
+ ESRB_POSSIBLE_TARGET = ESRB_DEPOT | ESRB_WAYPOINT | ESRB_STATION | ESRB_SAFE_TILE,
+
+ /* What reasons can be stored back into cached segment. */
+ ESRB_CACHED_MASK = ESRB_DEAD_END | ESRB_RAIL_TYPE | ESRB_INFINITE_LOOP | ESRB_SEGMENT_TOO_LONG | ESRB_CHOICE_FOLLOWS | ESRB_DEPOT | ESRB_WAYPOINT | ESRB_STATION | ESRB_SAFE_TILE,
+
+ /* Reasons to abort pathfinding in this direction. */
+ ESRB_ABORT_PF_MASK = ESRB_DEAD_END | ESRB_PATH_TOO_LONG | ESRB_INFINITE_LOOP | ESRB_FIRST_TWO_WAY_RED,
+};
+
+DECLARE_ENUM_AS_BIT_SET(EndSegmentReasonBits)
+
+inline CStrA ValueStr(EndSegmentReasonBits bits)
+{
+ static const char * const end_segment_reason_names[] = {
+ "DEAD_END", "RAIL_TYPE", "INFINITE_LOOP", "SEGMENT_TOO_LONG", "CHOICE_FOLLOWS",
+ "DEPOT", "WAYPOINT", "STATION", "SAFE_TILE",
+ "PATH_TOO_LONG", "FIRST_TWO_WAY_RED", "LOOK_AHEAD_END", "TARGET_REACHED"
+ };
+
+ CStrA out;
+ out.Format("0x%04X (%s)", bits, ComposeNameT(bits, end_segment_reason_names, "UNK", ESRB_NONE, "NONE").Data());
+ return out.Transfer();
+}
+
+#endif /* YAPF_TYPE_HPP */