xref: /aosp_15_r20/external/skia/modules/bentleyottmann/src/Point.cpp (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 // Copyright 2023 Google LLC
2 // Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
3 
4 #include "modules/bentleyottmann/include/Point.h"
5 
6 #include <limits>
7 #include <tuple>
8 
9 namespace bentleyottmann {
10 
11 // -- Point ----------------------------------------------------------------------------------------
operator <(const Point & p0,const Point & p1)12 bool operator<(const Point& p0, const Point& p1) {
13     return std::tie(p0.y, p0.x) < std::tie(p1.y, p1.x);
14 }
15 
operator >(const Point & p0,const Point & p1)16 bool operator>(const Point& p0, const Point& p1) {
17     return p1 < p0;
18 }
19 
operator >=(const Point & p0,const Point & p1)20 bool operator>=(const Point& p0, const Point& p1) {
21     return !(p0 < p1);
22 }
23 
operator <=(const Point & p0,const Point & p1)24 bool operator<=(const Point& p0, const Point& p1) {
25     return !(p0 > p1);
26 }
27 
operator ==(const Point & p0,const Point & p1)28 bool operator==(const Point& p0, const Point& p1) {
29     return std::tie(p0.y, p0.x) == std::tie(p1.y, p1.x);
30 }
31 
operator !=(const Point & p0,const Point & p1)32 bool operator!=(const Point& p0, const Point& p1) {
33     return !(p0 == p1);
34 }
35 
Smallest()36 Point Point::Smallest() {
37     const int32_t kMinCoordinate = std::numeric_limits<int32_t>::min();
38     return {kMinCoordinate, kMinCoordinate};
39 }
40 
Largest()41 Point Point::Largest() {
42     const int32_t kMaxCoordinate = std::numeric_limits<int32_t>::max();
43     return {kMaxCoordinate, kMaxCoordinate};
44 }
45 
DifferenceTooBig(Point p0,Point p1)46 bool Point::DifferenceTooBig(Point p0, Point p1) {
47     auto tooBig = [](int32_t a, int32_t b) {
48         return (b > 0 && a < std::numeric_limits<int32_t>::min() + b) ||
49                (b < 0 && a > std::numeric_limits<int32_t>::max() + b);
50     };
51 
52     return tooBig(p0.x, p1.x) || tooBig(p0.y, p1.y);
53 }
54 }  // namespace bentleyottmann
55