OpenTTD Source  20240917-master-g9ab0a47812
yapf_node.hpp
Go to the documentation of this file.
1 /*
2  * This file is part of OpenTTD.
3  * 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.
4  * 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.
5  * 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/>.
6  */
7 
10 #ifndef YAPF_NODE_HPP
11 #define YAPF_NODE_HPP
12 
15  TileIndex m_tile;
16  Trackdir m_td;
17  DiagDirection m_exitdir;
18 
19  inline void Set(TileIndex tile, Trackdir td)
20  {
21  m_tile = tile;
22  m_td = td;
23  m_exitdir = (m_td == INVALID_TRACKDIR) ? INVALID_DIAGDIR : TrackdirToExitdir(m_td);
24  }
25 
26  inline int CalcHash() const
27  {
28  return m_exitdir | (m_tile.base() << 2);
29  }
30 
31  inline bool operator==(const CYapfNodeKeyExitDir &other) const
32  {
33  return m_tile == other.m_tile && m_exitdir == other.m_exitdir;
34  }
35 
36  void Dump(DumpTarget &dmp) const
37  {
38  dmp.WriteTile("m_tile", m_tile);
39  dmp.WriteEnumT("m_td", m_td);
40  dmp.WriteEnumT("m_exitdir", m_exitdir);
41  }
42 };
43 
45 {
46  inline int CalcHash() const
47  {
48  return m_td | (m_tile.base() << 4);
49  }
50 
51  inline bool operator==(const CYapfNodeKeyTrackDir &other) const
52  {
53  return m_tile == other.m_tile && m_td == other.m_td;
54  }
55 };
56 
58 template <class Tkey_, class Tnode>
59 struct CYapfNodeT {
60  typedef Tkey_ Key;
61  typedef Tnode Node;
62 
63  Tkey_ m_key;
64  Node *m_hash_next;
65  Node *m_parent;
66  int m_cost;
67  int m_estimate;
68  bool m_is_choice;
69 
70  inline void Set(Node *parent, TileIndex tile, Trackdir td, bool is_choice)
71  {
72  m_key.Set(tile, td);
73  m_hash_next = nullptr;
74  m_parent = parent;
75  m_cost = 0;
76  m_estimate = 0;
77  m_is_choice = is_choice;
78  }
79 
80  inline Node *GetHashNext()
81  {
82  return m_hash_next;
83  }
84 
85  inline void SetHashNext(Node *pNext)
86  {
87  m_hash_next = pNext;
88  }
89 
90  inline TileIndex GetTile() const
91  {
92  return m_key.m_tile;
93  }
94 
95  inline Trackdir GetTrackdir() const
96  {
97  return m_key.m_td;
98  }
99 
100  inline const Tkey_ &GetKey() const
101  {
102  return m_key;
103  }
104 
105  inline int GetCost() const
106  {
107  return m_cost;
108  }
109 
110  inline int GetCostEstimate() const
111  {
112  return m_estimate;
113  }
114 
115  inline bool GetIsChoice() const
116  {
117  return m_is_choice;
118  }
119 
120  inline bool operator<(const Node &other) const
121  {
122  return m_estimate < other.m_estimate;
123  }
124 
125  void Dump(DumpTarget &dmp) const
126  {
127  dmp.WriteStructT("m_key", &m_key);
128  dmp.WriteStructT("m_parent", m_parent);
129  dmp.WriteValue("m_cost", m_cost);
130  dmp.WriteValue("m_estimate", m_estimate);
131  }
132 };
133 
134 #endif /* YAPF_NODE_HPP */
TrackdirToExitdir
DiagDirection TrackdirToExitdir(Trackdir trackdir)
Maps a trackdir to the (4-way) direction the tile is exited when following that trackdir.
Definition: track_func.h:439
DiagDirection
DiagDirection
Enumeration for diagonal directions.
Definition: direction_type.h:73
StrongType::Typedef< uint32_t, struct TileIndexTag, StrongType::Compare, StrongType::Integer, StrongType::Compatible< int32_t >, StrongType::Compatible< int64_t > >
INVALID_DIAGDIR
@ INVALID_DIAGDIR
Flag for an invalid DiagDirection.
Definition: direction_type.h:80
DumpTarget::WriteStructT
void WriteStructT(const std::string &name, const S *s)
Dump nested object (or only its name if this instance is already known).
Definition: dbg_helpers.h:147
DumpTarget
Class that represents the dump-into-string target.
Definition: dbg_helpers.h:95
CYapfNodeT
Yapf Node base.
Definition: yapf_node.hpp:59
DumpTarget::WriteTile
void WriteTile(const std::string &name, TileIndex t)
Write name & TileIndex to the output.
Definition: dbg_helpers.cpp:129
DumpTarget::WriteEnumT
void WriteEnumT(const std::string &name, E e)
Dump given enum value (as a number and as named value)
Definition: dbg_helpers.h:138
CYapfNodeKeyExitDir
Yapf Node Key that evaluates hash from (and compares) tile & exit dir.
Definition: yapf_node.hpp:14
CYapfNodeKeyTrackDir
Definition: yapf_node.hpp:44
Trackdir
Trackdir
Enumeration for tracks and directions.
Definition: track_type.h:67
INVALID_TRACKDIR
@ INVALID_TRACKDIR
Flag for an invalid trackdir.
Definition: track_type.h:86
DumpTarget::WriteValue
void WriteValue(const std::string &name, int value)
Write 'name = value' with indent and new-line.
Definition: dbg_helpers.cpp:115