66struct CYapfRailSegment {
75 EndSegmentReasons end_segment_reason{};
76 CYapfRailSegment *hash_next =
nullptr;
80 inline const Key &GetKey()
const
87 return this->key.GetTile();
90 inline CYapfRailSegment *GetHashNext()
92 return this->hash_next;
95 inline void SetHashNext(CYapfRailSegment *next)
97 this->hash_next = next;
103 dmp.
WriteTile(
"last_tile", this->last_tile);
106 dmp.
WriteTile(
"last_signal_tile", this->last_signal_tile);
107 dmp.
WriteEnumT(
"last_signal_td", this->last_signal_td);
108 dmp.
WriteEnumT(
"end_segment_reason", this->end_segment_reason);
118 uint16_t num_signals_passed;
120 uint32_t inherited_flags;
124 bool last_signal_was_red;
132 this->base::Set(parent, tile, td, is_choice);
133 this->segment =
nullptr;
134 if (parent ==
nullptr) {
135 this->num_signals_passed = 0;
136 this->flags_u.inherited_flags = 0;
150 this->num_signals_passed = parent->num_signals_passed;
151 this->flags_u.inherited_flags = parent->flags_u.inherited_flags;
152 this->last_red_signal_type = parent->last_red_signal_type;
153 this->last_signal_type = parent->last_signal_type;
155 this->flags_u.flags_s.choice_seen |= is_choice;
160 assert(this->segment !=
nullptr);
161 return this->segment->last_tile;
164 inline Trackdir GetLastTrackdir()
const
166 assert(this->segment !=
nullptr);
167 return this->segment->last_td;
172 assert(this->segment !=
nullptr);
173 this->segment->last_tile = tile;
174 this->segment->last_td = td;
177 template <
class Tbase,
class Tfunc,
class Tpf>
180 typename Tbase::TrackFollower follower{v, yapf.GetCompatibleRailTypes()};
182 Trackdir cur_td = this->base::GetTrackdir();
184 while (cur != this->GetLastTile() || cur_td != this->GetLastTrackdir()) {
185 if (!((obj.*func)(cur, cur_td)))
return false;
187 if (!follower.Follow(cur, cur_td))
break;
188 cur = follower.new_tile;
193 return (obj.*func)(cur, cur_td);
198 this->base::Dump(dmp);
200 dmp.
WriteValue(
"num_signals_passed", this->num_signals_passed);
201 dmp.
WriteValue(
"target_seen", this->flags_u.flags_s.target_seen ?
"Yes" :
"No");
202 dmp.
WriteValue(
"choice_seen", this->flags_u.flags_s.choice_seen ?
"Yes" :
"No");
203 dmp.
WriteValue(
"last_signal_was_red", this->flags_u.flags_s.last_signal_was_red ?
"Yes" :
"No");
204 dmp.
WriteEnumT(
"last_red_signal_type", this->last_red_signal_type);
StrongType::Typedef< uint32_t, struct TileIndexTag, StrongType::Compare, StrongType::Integer, StrongType::Compatible< int32_t >, StrongType::Compatible< int64_t > > TileIndex
The index/ID of a Tile.