1#ifndef TREE_SITTER_POINT_H_
 2#define TREE_SITTER_POINT_H_
 3
 4#include "api.h"
 5
 6#define POINT_ZERO ((TSPoint) {0, 0})
 7#define POINT_MAX ((TSPoint) {UINT32_MAX, UINT32_MAX})
 8
 9static inline TSPoint point__new(unsigned row, unsigned column) {
10  TSPoint result = {row, column};
11  return result;
12}
13
14static inline TSPoint point_add(TSPoint a, TSPoint b) {
15  if (b.row > 0)
16    return point__new(a.row + b.row, b.column);
17  else
18    return point__new(a.row, a.column + b.column);
19}
20
21static inline TSPoint point_sub(TSPoint a, TSPoint b) {
22  if (a.row > b.row)
23    return point__new(a.row - b.row, a.column);
24  else
25    return point__new(0, a.column - b.column);
26}
27
28static inline bool point_lte(TSPoint a, TSPoint b) {
29  return (a.row < b.row) || (a.row == b.row && a.column <= b.column);
30}
31
32static inline bool point_lt(TSPoint a, TSPoint b) {
33  return (a.row < b.row) || (a.row == b.row && a.column < b.column);
34}
35
36static inline bool point_gt(TSPoint a, TSPoint b) {
37  return (a.row > b.row) || (a.row == b.row && a.column > b.column);
38}
39
40static inline bool point_gte(TSPoint a, TSPoint b) {
41  return (a.row > b.row) || (a.row == b.row && a.column >= b.column);
42}
43
44static inline bool point_eq(TSPoint a, TSPoint b) {
45  return a.row == b.row && a.column == b.column;
46}
47
48static inline TSPoint point_min(TSPoint a, TSPoint b) {
49  if (a.row < b.row || (a.row == b.row && a.column < b.column))
50    return a;
51  else
52    return b;
53}
54
55static inline TSPoint point_max(TSPoint a, TSPoint b) {
56  if (a.row > b.row || (a.row == b.row && a.column > b.column))
57    return a;
58  else
59    return b;
60}
61
62#endif