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