138 {
139 static constexpr double kSegmentDelta = 0.5;
140 std::size_t k = 0;
141 std::size_t i = 0;
142 while (i < segments->size()) {
143 std::size_t j = i;
144 while (j + 1 < segments->size() &&
145 segments->at(i).lane == segments->at(j + 1).lane) {
146 ++j;
147 }
148 auto& segment_k = segments->at(k);
149 segment_k.lane = segments->at(i).lane;
150 segment_k.start_s = segments->at(i).start_s;
151 segment_k.end_s = segments->at(j).end_s;
152 if (segment_k.start_s < kSegmentDelta) {
153 segment_k.start_s = 0.0;
154 }
155 if (segment_k.end_s + kSegmentDelta >= segment_k.lane->total_length()) {
156 segment_k.end_s = segment_k.lane->total_length();
157 }
158 i = j + 1;
159 ++k;
160 }
161 segments->resize(k);
162 segments->shrink_to_fit();
163}