IntRect Region::Shape::bounds() const { if (isEmpty()) return IntRect(); SpanIterator span = spans_begin(); int minY = span->y; SpanIterator lastSpan = spans_end() - 1; int maxY = lastSpan->y; int minX = std::numeric_limits<int>::max(); int maxX = std::numeric_limits<int>::min(); while (span != lastSpan) { SegmentIterator firstSegment = segments_begin(span); SegmentIterator lastSegment = segments_end(span) - 1; if (firstSegment && lastSegment) { ASSERT(firstSegment != lastSegment); if (*firstSegment < minX) minX = *firstSegment; if (*lastSegment > maxX) maxX = *lastSegment; } ++span; } ASSERT(minX <= maxX); ASSERT(minY <= maxY); return IntRect(minX, minY, maxX - minX, maxY - minY); }
static inline iterator_type end(Geometry& geometry) { return segments_end(geometry); }