19 static constexpr Segment LeftSentinel = {{-std::numeric_limits<int32_t>::max(),
20 -std::numeric_limits<int32_t>::max()},
21 {-std::numeric_limits<int32_t>::max(),
22 std::numeric_limits<int32_t>::max()}};
23 static constexpr Segment RightSentinel = {{std::numeric_limits<int32_t>::max(),
24 -std::numeric_limits<int32_t>::max()},
25 {std::numeric_limits<int32_t>::max(),
26 std::numeric_limits<int32_t>::max()}};
28 fSweepLine.reserve(8);
29 fSweepLine.push_back(LeftSentinel);
30 fSweepLine.push_back(RightSentinel);
42 std::vector<Segment>::iterator newEnd;
43 if (removing.empty()) {
45 auto toRemove = [eventPoint](
Segment s) {
46 return s.lower() == eventPoint;
48 newEnd = std::remove_if(fSweepLine.begin(), fSweepLine.end(), toRemove);
51 auto toRemove = [eventPoint, &removing](
Segment s) {
52 return s.lower() == eventPoint || removing.find(
s) != removing.end();
54 newEnd = std::remove_if(fSweepLine.begin(), fSweepLine.end(), toRemove);
56 fSweepLine.erase(newEnd, fSweepLine.end());
66 const auto rightOfInsertion = std::lower_bound(
67 fSweepLine.begin(), fSweepLine.end(), eventPoint, comp);
68 SkASSERT(rightOfInsertion != fSweepLine.begin());
69 const auto leftOfInsertion = rightOfInsertion - 1;
71 if (inserting.empty()) {
74 if (
auto crossingPoint =
intersect(*leftOfInsertion, *rightOfInsertion)) {
75 queue->addCrossing(crossingPoint.value(), *leftOfInsertion, *rightOfInsertion);
80 if (
auto crossingPoint =
intersect(*leftOfInsertion, *inserting.begin())) {
81 queue->addCrossing(crossingPoint.value(), *leftOfInsertion, *inserting.begin());
86 if (
auto crossingPoint =
intersect(*inserting.rbegin(), *rightOfInsertion)) {
87 queue->addCrossing(crossingPoint.value(), *inserting.rbegin(), *rightOfInsertion);
91 fSweepLine.insert(rightOfInsertion, inserting.begin(), inserting.end());