changeset 20652:5f1fe0cd4036 draft

(svn r25608) -Codechange: make EndSegmentReasonBits available in yapf_base.hpp
author rubidium <rubidium@openttd.org>
date Sun, 14 Jul 2013 09:20:34 +0000
parents 7929217146df
children 6b03873ce8a4
files src/pathfinder/yapf/yapf.hpp src/pathfinder/yapf/yapf_node_rail.hpp src/pathfinder/yapf/yapf_type.hpp
diffstat 3 files changed, 85 insertions(+), 69 deletions(-) [+]
line wrap: on
line diff
--- 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"
--- a/src/pathfinder/yapf/yapf_node_rail.hpp
+++ b/src/pathfinder/yapf/yapf_node_rail.hpp
@@ -61,75 +61,6 @@
 	}
 };
 
-/* 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
 {
new file mode 100644
--- /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 */