28void merge_block_range(
const TopoNode*
topo_node,
29 const std::vector<NodeSRange>& origin_range,
30 std::vector<NodeSRange>* block_range) {
31 std::vector<NodeSRange> sorted_origin_range(origin_range);
32 std::sort(sorted_origin_range.begin(), sorted_origin_range.end());
34 auto total_size = sorted_origin_range.size();
35 while (cur_index < total_size) {
36 NodeSRange range(sorted_origin_range[cur_index]);
38 while (cur_index < total_size &&
39 range.MergeRangeOverlap(sorted_origin_range[cur_index])) {
48 block_range->push_back(std::move(range));
54const std::unordered_map<const TopoNode*, std::vector<NodeSRange>>&
60 auto iter = range_map_.find(node);
61 if (iter == range_map_.end()) {
64 return &(iter->second);
69 for (
const auto& map : range_map_) {
70 for (
const auto& range : map.second) {
71 AINFO <<
"black lane id: " << map.first->LaneId()
72 <<
", start s: " << range.StartS() <<
", end s: " << range.EndS();
81 range_map_[node].push_back(range);
85 for (
auto& iter : range_map_) {
86 std::vector<NodeSRange> merged_range_vec;
87 merge_block_range(iter.first, iter.second, &merged_range_vec);
88 iter.second.assign(merged_range_vec.begin(), merged_range_vec.end());
const TopoNode * topo_node
void PrintDebugInfo() const
const std::unordered_map< const TopoNode *, std::vector< NodeSRange > > & RangeMap() const
const std::vector< NodeSRange > * Find(const TopoNode *node) const
void Add(const TopoNode *node, double start_s, double end_s)