yapf/yapf_common.hpp
branchcustombridgeheads
changeset 5627 f5c656cf0a0e
parent 5621 6ce400c0a2f4
--- a/yapf/yapf_common.hpp	Mon Jan 01 19:44:02 2007 +0000
+++ b/yapf/yapf_common.hpp	Mon Jan 01 20:13:03 2007 +0000
@@ -50,24 +50,24 @@
 	typedef typename Node::Key Key;               ///< key to hash tables
 
 protected:
-	TileIndex   m_orgTile;                        ///< first origin tile
-	Trackdir    m_orgTd;                          ///< first origin trackdir
-	TileIndex   m_revTile;                        ///< second (reversed) origin tile
-	Trackdir    m_revTd;                          ///< second (reversed) origin trackdir
-	int         m_reverse_penalty;                ///< penalty to be added for using the reversed origin
-	bool        m_treat_first_red_two_way_signal_as_eol; ///< in some cases (leaving station) we need to handle first two-way signal differently
+	TileIndex    m_org_tile;                        ///< first origin tile
+	TrackdirBits m_org_td_bits;                    ///< first origin trackdirbits
+	TileIndex    m_rev_tile;                        ///< second (reversed) origin tile
+	TrackdirBits m_rev_td_bits;                   ///< second (reversed) origin trackdir
+	int          m_reverse_penalty;                ///< penalty to be added for using the reversed origin
+	bool         m_treat_first_red_two_way_signal_as_eol; ///< in some cases (leaving station) we need to handle first two-way signal differently
 
 	/// to access inherited path finder
 	FORCEINLINE Tpf& Yapf() {return *static_cast<Tpf*>(this);}
 
 public:
 	/// set origin (tiles, trackdirs, etc.)
-	void SetOrigin(TileIndex tile, Trackdir td, TileIndex tiler = INVALID_TILE, Trackdir tdr = INVALID_TRACKDIR, int reverse_penalty = 0, bool treat_first_red_two_way_signal_as_eol = true)
+	void SetOrigin(TileIndex tile, TrackdirBits td_bits, TileIndex tiler = INVALID_TILE, TrackdirBits tdr_bits = INVALID_TRACKDIR_BIT, int reverse_penalty = 0, bool treat_first_red_two_way_signal_as_eol = true)
 	{
-		m_orgTile = tile;
-		m_orgTd = td;
-		m_revTile = tiler;
-		m_revTd = tdr;
+		m_org_tile = tile;
+		m_org_td_bits = td_bits;
+		m_rev_tile = tiler;
+		m_rev_td_bits = tdr_bits;
 		m_reverse_penalty = reverse_penalty;
 		m_treat_first_red_two_way_signal_as_eol = treat_first_red_two_way_signal_as_eol;
 	}
@@ -75,16 +75,22 @@
 	/// Called when YAPF needs to place origin nodes into open list
 	void PfSetStartupNodes()
 	{
-		if (m_orgTile != INVALID_TILE && m_orgTd != INVALID_TRACKDIR) {
-			Node& n1 = Yapf().CreateNewNode();
-			n1.Set(NULL, m_orgTile, m_orgTd, false);
-			Yapf().AddStartupNode(n1);
+		if (m_org_tile != INVALID_TILE && m_org_td_bits != INVALID_TRACKDIR_BIT) {
+			for (TrackdirBits td_bits = m_org_td_bits; td_bits != TRACKDIR_BIT_NONE; td_bits = (TrackdirBits)KillFirstBit2x64(td_bits)) {
+				Node& n = Yapf().CreateNewNode();
+				Trackdir td = (Trackdir)FindFirstBit2x64(td_bits);
+				n.Set(NULL, m_org_tile, td, false);
+				Yapf().AddStartupNode(n);
+			}
 		}
-		if (m_revTile != INVALID_TILE && m_revTd != INVALID_TRACKDIR) {
-			Node& n2 = Yapf().CreateNewNode();
-			n2.Set(NULL, m_revTile, m_revTd, false);
-			n2.m_cost = m_reverse_penalty;
-			Yapf().AddStartupNode(n2);
+		if (m_rev_tile != INVALID_TILE && m_rev_td_bits != INVALID_TRACKDIR_BIT) {
+			for (TrackdirBits td_bits = m_rev_td_bits; td_bits != TRACKDIR_BIT_NONE; td_bits = (TrackdirBits)KillFirstBit2x64(td_bits)) {
+				Node& n = Yapf().CreateNewNode();
+				Trackdir td = (Trackdir)FindFirstBit2x64(td_bits);
+				n.Set(NULL, m_rev_tile, td, false);
+				n.m_cost = m_reverse_penalty;
+				Yapf().AddStartupNode(n);
+			}
 		}
 	}