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);