10 #ifndef YAPF_NODE_RAIL_HPP
11 #define YAPF_NODE_RAIL_HPP
27 m_value = src.m_value;
32 m_value = (((int)node_key.m_tile) << 4) | node_key.m_td;
35 inline int32 CalcHash()
const
52 return m_value == other.m_value;
73 EndSegmentReasonBits m_end_segment_reason;
83 , m_end_segment_reason(ESRB_NONE)
84 , m_hash_next(
nullptr)
87 inline const Key& GetKey()
const
94 return m_key.GetTile();
110 dmp.
WriteTile(
"m_last_tile", m_last_tile);
113 dmp.
WriteTile(
"m_last_signal_tile", m_last_signal_tile);
114 dmp.
WriteEnumT(
"m_last_signal_td", m_last_signal_td);
115 dmp.
WriteEnumT(
"m_end_segment_reason", m_end_segment_reason);
120 template <
class Tkey_>
128 uint16 m_num_signals_passed;
130 uint32 m_inherited_flags;
132 bool m_targed_seen : 1;
133 bool m_choice_seen : 1;
134 bool m_last_signal_was_red : 1;
142 base::Set(parent, tile, td, is_choice);
144 if (parent ==
nullptr) {
145 m_num_signals_passed = 0;
146 flags_u.m_inherited_flags = 0;
160 m_num_signals_passed = parent->m_num_signals_passed;
161 flags_u.m_inherited_flags = parent->flags_u.m_inherited_flags;
162 m_last_red_signal_type = parent->m_last_red_signal_type;
163 m_last_signal_type = parent->m_last_signal_type;
165 flags_u.flags_s.m_choice_seen |= is_choice;
170 assert(m_segment !=
nullptr);
171 return m_segment->m_last_tile;
174 inline Trackdir GetLastTrackdir()
const
176 assert(m_segment !=
nullptr);
177 return m_segment->m_last_td;
182 assert(m_segment !=
nullptr);
183 m_segment->m_last_tile = tile;
184 m_segment->m_last_td = td;
187 template <
class Tbase,
class Tfunc,
class Tpf>
190 typename Tbase::TrackFollower ft(v, yapf.GetCompatibleRailTypes());
192 Trackdir cur_td = base::GetTrackdir();
194 while (cur != GetLastTile() || cur_td != GetLastTrackdir()) {
195 if (!((obj.*func)(cur, cur_td)))
return false;
197 if (!ft.Follow(cur, cur_td))
break;
203 return (obj.*func)(cur, cur_td);
210 dmp.
WriteLine(
"m_num_signals_passed = %d", m_num_signals_passed);
211 dmp.
WriteLine(
"m_targed_seen = %s", flags_u.flags_s.m_targed_seen ?
"Yes" :
"No");
212 dmp.
WriteLine(
"m_choice_seen = %s", flags_u.flags_s.m_choice_seen ?
"Yes" :
"No");
213 dmp.
WriteLine(
"m_last_signal_was_red = %s", flags_u.flags_s.m_last_signal_was_red ?
"Yes" :
"No");
214 dmp.
WriteEnumT(
"m_last_red_signal_type", m_last_red_signal_type);