static
| 115 | |
| 116 | // static |
| 117 | bool LineStringMerger::TryMergeOne(LinePtr const & lineString, Buffer & buffer) |
| 118 | { |
| 119 | auto static const kUndef = std::numeric_limits<int>::max(); |
| 120 | uint64_t index = kUndef; |
| 121 | if (buffer.count(lineString->GetStart()) != 0) |
| 122 | index = lineString->GetStart(); |
| 123 | else if (buffer.count(lineString->GetEnd()) != 0) |
| 124 | index = lineString->GetEnd(); |
| 125 | |
| 126 | if (index != kUndef) |
| 127 | { |
| 128 | auto bufferedLineString = buffer[index]; |
| 129 | buffer.erase(bufferedLineString->GetStart()); |
| 130 | buffer.erase(bufferedLineString->GetEnd()); |
| 131 | if (!lineString->Add(*bufferedLineString)) |
| 132 | { |
| 133 | buffer.emplace(bufferedLineString->GetStart(), bufferedLineString); |
| 134 | buffer.emplace(bufferedLineString->GetEnd(), bufferedLineString); |
| 135 | |
| 136 | buffer.emplace(lineString->GetStart(), lineString); |
| 137 | buffer.emplace(lineString->GetEnd(), lineString); |
| 138 | return false; |
| 139 | } |
| 140 | } |
| 141 | |
| 142 | return index != kUndef; |
| 143 | } |
| 144 | |
| 145 | // static |
| 146 | LineStringMerger::OutputData LineStringMerger::OrderData(InputData const & data) |