12 #ifndef YAPF_NODE_RAIL_HPP
13 #define YAPF_NODE_RAIL_HPP
29 m_value = src.m_value;
34 m_value = (((int)node_key.m_tile) << 4) | node_key.m_td;
37 inline int32 CalcHash()
const
54 return m_value == other.m_value;
75 EndSegmentReasonBits m_end_segment_reason;
85 , m_end_segment_reason(ESRB_NONE)
89 inline const Key& GetKey()
const
96 return m_key.GetTile();
112 dmp.
WriteTile(
"m_last_tile", m_last_tile);
115 dmp.
WriteTile(
"m_last_signal_tile", m_last_signal_tile);
116 dmp.
WriteEnumT(
"m_last_signal_td", m_last_signal_td);
117 dmp.
WriteEnumT(
"m_end_segment_reason", m_end_segment_reason);
122 template <
class Tkey_>
130 uint16 m_num_signals_passed;
132 uint32 m_inherited_flags;
134 bool m_targed_seen : 1;
135 bool m_choice_seen : 1;
136 bool m_last_signal_was_red : 1;
144 base::Set(parent, tile, td, is_choice);
146 if (parent == NULL) {
147 m_num_signals_passed = 0;
148 flags_u.m_inherited_flags = 0;
162 m_num_signals_passed = parent->m_num_signals_passed;
163 flags_u.m_inherited_flags = parent->flags_u.m_inherited_flags;
164 m_last_red_signal_type = parent->m_last_red_signal_type;
165 m_last_signal_type = parent->m_last_signal_type;
167 flags_u.flags_s.m_choice_seen |= is_choice;
172 assert(m_segment != NULL);
173 return m_segment->m_last_tile;
176 inline Trackdir GetLastTrackdir()
const
178 assert(m_segment != NULL);
179 return m_segment->m_last_td;
184 assert(m_segment != NULL);
185 m_segment->m_last_tile = tile;
186 m_segment->m_last_td = td;
189 template <
class Tbase,
class Tfunc,
class Tpf>
192 typename Tbase::TrackFollower ft(v, yapf.GetCompatibleRailTypes());
194 Trackdir cur_td = base::GetTrackdir();
196 while (cur != GetLastTile() || cur_td != GetLastTrackdir()) {
197 if (!((obj.*func)(cur, cur_td)))
return false;
199 if (!ft.Follow(cur, cur_td))
break;
205 return (obj.*func)(cur, cur_td);
212 dmp.
WriteLine(
"m_num_signals_passed = %d", m_num_signals_passed);
213 dmp.
WriteLine(
"m_targed_seen = %s", flags_u.flags_s.m_targed_seen ?
"Yes" :
"No");
214 dmp.
WriteLine(
"m_choice_seen = %s", flags_u.flags_s.m_choice_seen ?
"Yes" :
"No");
215 dmp.
WriteLine(
"m_last_signal_was_red = %s", flags_u.flags_s.m_last_signal_was_red ?
"Yes" :
"No");
216 dmp.
WriteEnumT(
"m_last_red_signal_type", m_last_red_signal_type);