@sentryware/s2-node 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (471) hide show
  1. package/.circleci/config.yml +45 -0
  2. package/.dockerignore +1 -0
  3. package/.gitmodules +3 -0
  4. package/CHANGELOG.md +33 -0
  5. package/LICENSE +201 -0
  6. package/README.md +147 -0
  7. package/binding.gyp +170 -0
  8. package/docker/Dockerfile.node20.test +8 -0
  9. package/docker/Dockerfile.node22.test +8 -0
  10. package/docker/Dockerfile.node24.test +8 -0
  11. package/index.d.ts +117 -0
  12. package/index.js +6 -0
  13. package/jest.config.js +184 -0
  14. package/package.json +43 -0
  15. package/publish-linux.sh +18 -0
  16. package/publish-osx.sh +19 -0
  17. package/src/builder.cc +84 -0
  18. package/src/builder.h +29 -0
  19. package/src/cell.cc +71 -0
  20. package/src/cell.h +26 -0
  21. package/src/cell_id.cc +210 -0
  22. package/src/cell_id.h +44 -0
  23. package/src/cell_union.cc +237 -0
  24. package/src/cell_union.h +34 -0
  25. package/src/earth.cc +185 -0
  26. package/src/earth.h +33 -0
  27. package/src/latlng.cc +132 -0
  28. package/src/latlng.h +28 -0
  29. package/src/loop.cc +51 -0
  30. package/src/loop.h +21 -0
  31. package/src/point.cc +69 -0
  32. package/src/point.h +23 -0
  33. package/src/polygon.cc +36 -0
  34. package/src/polygon.h +20 -0
  35. package/src/polyline.cc +186 -0
  36. package/src/polyline.h +34 -0
  37. package/src/region_coverer.cc +450 -0
  38. package/src/region_coverer.h +56 -0
  39. package/src/s2.cc +27 -0
  40. package/test/Cell.test.js +37 -0
  41. package/test/CellId.test.js +135 -0
  42. package/test/CellUnion.test.js +150 -0
  43. package/test/Earth.test.js +62 -0
  44. package/test/LatLng.test.js +45 -0
  45. package/test/Point.test.js +14 -0
  46. package/test/Polyline.test.js +78 -0
  47. package/test/RegionCoverer.test.js +301 -0
  48. package/test.sh +16 -0
  49. package/third_party/s2geometry/.travis.yml +163 -0
  50. package/third_party/s2geometry/AUTHORS +13 -0
  51. package/third_party/s2geometry/CONTRIBUTING.md +65 -0
  52. package/third_party/s2geometry/CONTRIBUTORS +30 -0
  53. package/third_party/s2geometry/LICENSE +202 -0
  54. package/third_party/s2geometry/NOTICE +5 -0
  55. package/third_party/s2geometry/README.md +127 -0
  56. package/third_party/s2geometry/doc/examples/point_index.cc +44 -0
  57. package/third_party/s2geometry/doc/examples/term_index.cc +99 -0
  58. package/third_party/s2geometry/doc/examples/term_index.py +101 -0
  59. package/third_party/s2geometry/src/python/coder.i +125 -0
  60. package/third_party/s2geometry/src/python/pywraps2_test.py +786 -0
  61. package/third_party/s2geometry/src/python/s2.i +37 -0
  62. package/third_party/s2geometry/src/python/s2_common.i +756 -0
  63. package/third_party/s2geometry/src/s2/_fp_contract_off.h +60 -0
  64. package/third_party/s2geometry/src/s2/base/casts.h +318 -0
  65. package/third_party/s2geometry/src/s2/base/commandlineflags.h +67 -0
  66. package/third_party/s2geometry/src/s2/base/integral_types.h +31 -0
  67. package/third_party/s2geometry/src/s2/base/log_severity.h +40 -0
  68. package/third_party/s2geometry/src/s2/base/logging.h +173 -0
  69. package/third_party/s2geometry/src/s2/base/mutex.h +61 -0
  70. package/third_party/s2geometry/src/s2/base/port.h +999 -0
  71. package/third_party/s2geometry/src/s2/base/spinlock.h +60 -0
  72. package/third_party/s2geometry/src/s2/base/stringprintf.cc +107 -0
  73. package/third_party/s2geometry/src/s2/base/stringprintf.h +53 -0
  74. package/third_party/s2geometry/src/s2/base/strtoint.cc +65 -0
  75. package/third_party/s2geometry/src/s2/base/strtoint.h +106 -0
  76. package/third_party/s2geometry/src/s2/base/timer.h +50 -0
  77. package/third_party/s2geometry/src/s2/encoded_s2cell_id_vector.cc +164 -0
  78. package/third_party/s2geometry/src/s2/encoded_s2cell_id_vector.h +110 -0
  79. package/third_party/s2geometry/src/s2/encoded_s2cell_id_vector_test.cc +232 -0
  80. package/third_party/s2geometry/src/s2/encoded_s2point_vector.cc +838 -0
  81. package/third_party/s2geometry/src/s2/encoded_s2point_vector.h +140 -0
  82. package/third_party/s2geometry/src/s2/encoded_s2point_vector_test.cc +344 -0
  83. package/third_party/s2geometry/src/s2/encoded_s2shape_index.cc +181 -0
  84. package/third_party/s2geometry/src/s2/encoded_s2shape_index.h +276 -0
  85. package/third_party/s2geometry/src/s2/encoded_s2shape_index_test.cc +244 -0
  86. package/third_party/s2geometry/src/s2/encoded_string_vector.cc +66 -0
  87. package/third_party/s2geometry/src/s2/encoded_string_vector.h +164 -0
  88. package/third_party/s2geometry/src/s2/encoded_string_vector_test.cc +69 -0
  89. package/third_party/s2geometry/src/s2/encoded_uint_vector.h +299 -0
  90. package/third_party/s2geometry/src/s2/encoded_uint_vector_test.cc +124 -0
  91. package/third_party/s2geometry/src/s2/id_set_lexicon.cc +81 -0
  92. package/third_party/s2geometry/src/s2/id_set_lexicon.h +199 -0
  93. package/third_party/s2geometry/src/s2/id_set_lexicon_test.cc +70 -0
  94. package/third_party/s2geometry/src/s2/mutable_s2shape_index.cc +1585 -0
  95. package/third_party/s2geometry/src/s2/mutable_s2shape_index.h +600 -0
  96. package/third_party/s2geometry/src/s2/mutable_s2shape_index_test.cc +589 -0
  97. package/third_party/s2geometry/src/s2/r1interval.h +220 -0
  98. package/third_party/s2geometry/src/s2/r1interval_test.cc +185 -0
  99. package/third_party/s2geometry/src/s2/r2.h +26 -0
  100. package/third_party/s2geometry/src/s2/r2rect.cc +93 -0
  101. package/third_party/s2geometry/src/s2/r2rect.h +234 -0
  102. package/third_party/s2geometry/src/s2/r2rect_test.cc +228 -0
  103. package/third_party/s2geometry/src/s2/s1angle.cc +54 -0
  104. package/third_party/s2geometry/src/s2/s1angle.h +336 -0
  105. package/third_party/s2geometry/src/s2/s1angle_test.cc +185 -0
  106. package/third_party/s2geometry/src/s2/s1chord_angle.cc +159 -0
  107. package/third_party/s2geometry/src/s2/s1chord_angle.h +369 -0
  108. package/third_party/s2geometry/src/s2/s1chord_angle_test.cc +207 -0
  109. package/third_party/s2geometry/src/s2/s1interval.cc +296 -0
  110. package/third_party/s2geometry/src/s2/s1interval.h +266 -0
  111. package/third_party/s2geometry/src/s2/s1interval_test.cc +469 -0
  112. package/third_party/s2geometry/src/s2/s2boolean_operation.cc +2391 -0
  113. package/third_party/s2geometry/src/s2/s2boolean_operation.h +501 -0
  114. package/third_party/s2geometry/src/s2/s2boolean_operation_test.cc +1400 -0
  115. package/third_party/s2geometry/src/s2/s2builder.cc +1828 -0
  116. package/third_party/s2geometry/src/s2/s2builder.h +1057 -0
  117. package/third_party/s2geometry/src/s2/s2builder_graph.cc +1084 -0
  118. package/third_party/s2geometry/src/s2/s2builder_graph.h +799 -0
  119. package/third_party/s2geometry/src/s2/s2builder_graph_test.cc +462 -0
  120. package/third_party/s2geometry/src/s2/s2builder_layer.h +50 -0
  121. package/third_party/s2geometry/src/s2/s2builder_test.cc +1329 -0
  122. package/third_party/s2geometry/src/s2/s2builderutil_closed_set_normalizer.cc +313 -0
  123. package/third_party/s2geometry/src/s2/s2builderutil_closed_set_normalizer.h +221 -0
  124. package/third_party/s2geometry/src/s2/s2builderutil_closed_set_normalizer_test.cc +261 -0
  125. package/third_party/s2geometry/src/s2/s2builderutil_find_polygon_degeneracies.cc +392 -0
  126. package/third_party/s2geometry/src/s2/s2builderutil_find_polygon_degeneracies.h +86 -0
  127. package/third_party/s2geometry/src/s2/s2builderutil_find_polygon_degeneracies_test.cc +182 -0
  128. package/third_party/s2geometry/src/s2/s2builderutil_graph_shape.h +57 -0
  129. package/third_party/s2geometry/src/s2/s2builderutil_lax_polygon_layer.cc +212 -0
  130. package/third_party/s2geometry/src/s2/s2builderutil_lax_polygon_layer.h +218 -0
  131. package/third_party/s2geometry/src/s2/s2builderutil_lax_polygon_layer_test.cc +367 -0
  132. package/third_party/s2geometry/src/s2/s2builderutil_s2point_vector_layer.cc +74 -0
  133. package/third_party/s2geometry/src/s2/s2builderutil_s2point_vector_layer.h +122 -0
  134. package/third_party/s2geometry/src/s2/s2builderutil_s2point_vector_layer_test.cc +167 -0
  135. package/third_party/s2geometry/src/s2/s2builderutil_s2polygon_layer.cc +191 -0
  136. package/third_party/s2geometry/src/s2/s2builderutil_s2polygon_layer.h +211 -0
  137. package/third_party/s2geometry/src/s2/s2builderutil_s2polygon_layer_test.cc +312 -0
  138. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_layer.cc +105 -0
  139. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_layer.h +174 -0
  140. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_layer_test.cc +220 -0
  141. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_vector_layer.cc +98 -0
  142. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_vector_layer.h +292 -0
  143. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_vector_layer_test.cc +233 -0
  144. package/third_party/s2geometry/src/s2/s2builderutil_snap_functions.cc +354 -0
  145. package/third_party/s2geometry/src/s2/s2builderutil_snap_functions.h +239 -0
  146. package/third_party/s2geometry/src/s2/s2builderutil_snap_functions_test.cc +716 -0
  147. package/third_party/s2geometry/src/s2/s2builderutil_testing.cc +37 -0
  148. package/third_party/s2geometry/src/s2/s2builderutil_testing.h +100 -0
  149. package/third_party/s2geometry/src/s2/s2builderutil_testing_test.cc +85 -0
  150. package/third_party/s2geometry/src/s2/s2cap.cc +347 -0
  151. package/third_party/s2geometry/src/s2/s2cap.h +286 -0
  152. package/third_party/s2geometry/src/s2/s2cap_test.cc +379 -0
  153. package/third_party/s2geometry/src/s2/s2cell.cc +552 -0
  154. package/third_party/s2geometry/src/s2/s2cell.h +249 -0
  155. package/third_party/s2geometry/src/s2/s2cell_id.cc +619 -0
  156. package/third_party/s2geometry/src/s2/s2cell_id.h +705 -0
  157. package/third_party/s2geometry/src/s2/s2cell_id_test.cc +633 -0
  158. package/third_party/s2geometry/src/s2/s2cell_index.cc +149 -0
  159. package/third_party/s2geometry/src/s2/s2cell_index.h +660 -0
  160. package/third_party/s2geometry/src/s2/s2cell_index_test.cc +411 -0
  161. package/third_party/s2geometry/src/s2/s2cell_test.cc +687 -0
  162. package/third_party/s2geometry/src/s2/s2cell_union.cc +515 -0
  163. package/third_party/s2geometry/src/s2/s2cell_union.h +399 -0
  164. package/third_party/s2geometry/src/s2/s2cell_union_test.cc +598 -0
  165. package/third_party/s2geometry/src/s2/s2centroids.cc +84 -0
  166. package/third_party/s2geometry/src/s2/s2centroids.h +87 -0
  167. package/third_party/s2geometry/src/s2/s2centroids_test.cc +82 -0
  168. package/third_party/s2geometry/src/s2/s2closest_cell_query.cc +123 -0
  169. package/third_party/s2geometry/src/s2/s2closest_cell_query.h +385 -0
  170. package/third_party/s2geometry/src/s2/s2closest_cell_query_base.h +841 -0
  171. package/third_party/s2geometry/src/s2/s2closest_cell_query_base_test.cc +63 -0
  172. package/third_party/s2geometry/src/s2/s2closest_cell_query_test.cc +412 -0
  173. package/third_party/s2geometry/src/s2/s2closest_edge_query.cc +106 -0
  174. package/third_party/s2geometry/src/s2/s2closest_edge_query.h +421 -0
  175. package/third_party/s2geometry/src/s2/s2closest_edge_query_base.h +946 -0
  176. package/third_party/s2geometry/src/s2/s2closest_edge_query_base_test.cc +59 -0
  177. package/third_party/s2geometry/src/s2/s2closest_edge_query_test.cc +505 -0
  178. package/third_party/s2geometry/src/s2/s2closest_edge_query_testing.h +91 -0
  179. package/third_party/s2geometry/src/s2/s2closest_point_query.cc +66 -0
  180. package/third_party/s2geometry/src/s2/s2closest_point_query.h +465 -0
  181. package/third_party/s2geometry/src/s2/s2closest_point_query_base.h +767 -0
  182. package/third_party/s2geometry/src/s2/s2closest_point_query_base_test.cc +63 -0
  183. package/third_party/s2geometry/src/s2/s2closest_point_query_test.cc +312 -0
  184. package/third_party/s2geometry/src/s2/s2contains_point_query.h +328 -0
  185. package/third_party/s2geometry/src/s2/s2contains_point_query_test.cc +159 -0
  186. package/third_party/s2geometry/src/s2/s2contains_vertex_query.cc +39 -0
  187. package/third_party/s2geometry/src/s2/s2contains_vertex_query.h +66 -0
  188. package/third_party/s2geometry/src/s2/s2contains_vertex_query_test.cc +67 -0
  189. package/third_party/s2geometry/src/s2/s2convex_hull_query.cc +198 -0
  190. package/third_party/s2geometry/src/s2/s2convex_hull_query.h +110 -0
  191. package/third_party/s2geometry/src/s2/s2convex_hull_query_test.cc +208 -0
  192. package/third_party/s2geometry/src/s2/s2coords.cc +146 -0
  193. package/third_party/s2geometry/src/s2/s2coords.h +459 -0
  194. package/third_party/s2geometry/src/s2/s2coords_internal.h +71 -0
  195. package/third_party/s2geometry/src/s2/s2coords_test.cc +218 -0
  196. package/third_party/s2geometry/src/s2/s2crossing_edge_query.cc +380 -0
  197. package/third_party/s2geometry/src/s2/s2crossing_edge_query.h +220 -0
  198. package/third_party/s2geometry/src/s2/s2crossing_edge_query_test.cc +382 -0
  199. package/third_party/s2geometry/src/s2/s2debug.cc +23 -0
  200. package/third_party/s2geometry/src/s2/s2debug.h +69 -0
  201. package/third_party/s2geometry/src/s2/s2distance_target.h +165 -0
  202. package/third_party/s2geometry/src/s2/s2earth.cc +52 -0
  203. package/third_party/s2geometry/src/s2/s2earth.h +268 -0
  204. package/third_party/s2geometry/src/s2/s2earth_test.cc +146 -0
  205. package/third_party/s2geometry/src/s2/s2edge_clipping.cc +462 -0
  206. package/third_party/s2geometry/src/s2/s2edge_clipping.h +183 -0
  207. package/third_party/s2geometry/src/s2/s2edge_clipping_test.cc +335 -0
  208. package/third_party/s2geometry/src/s2/s2edge_crosser.cc +85 -0
  209. package/third_party/s2geometry/src/s2/s2edge_crosser.h +343 -0
  210. package/third_party/s2geometry/src/s2/s2edge_crosser_test.cc +264 -0
  211. package/third_party/s2geometry/src/s2/s2edge_crossings.cc +515 -0
  212. package/third_party/s2geometry/src/s2/s2edge_crossings.h +138 -0
  213. package/third_party/s2geometry/src/s2/s2edge_crossings_internal.h +59 -0
  214. package/third_party/s2geometry/src/s2/s2edge_crossings_test.cc +246 -0
  215. package/third_party/s2geometry/src/s2/s2edge_distances.cc +419 -0
  216. package/third_party/s2geometry/src/s2/s2edge_distances.h +192 -0
  217. package/third_party/s2geometry/src/s2/s2edge_distances_test.cc +539 -0
  218. package/third_party/s2geometry/src/s2/s2edge_tessellator.cc +276 -0
  219. package/third_party/s2geometry/src/s2/s2edge_tessellator.h +101 -0
  220. package/third_party/s2geometry/src/s2/s2edge_tessellator_test.cc +492 -0
  221. package/third_party/s2geometry/src/s2/s2edge_vector_shape.h +85 -0
  222. package/third_party/s2geometry/src/s2/s2edge_vector_shape_test.cc +66 -0
  223. package/third_party/s2geometry/src/s2/s2error.cc +29 -0
  224. package/third_party/s2geometry/src/s2/s2error.h +147 -0
  225. package/third_party/s2geometry/src/s2/s2error_test.cc +31 -0
  226. package/third_party/s2geometry/src/s2/s2furthest_edge_query.cc +117 -0
  227. package/third_party/s2geometry/src/s2/s2furthest_edge_query.h +439 -0
  228. package/third_party/s2geometry/src/s2/s2furthest_edge_query_test.cc +487 -0
  229. package/third_party/s2geometry/src/s2/s2latlng.cc +90 -0
  230. package/third_party/s2geometry/src/s2/s2latlng.h +234 -0
  231. package/third_party/s2geometry/src/s2/s2latlng_rect.cc +727 -0
  232. package/third_party/s2geometry/src/s2/s2latlng_rect.h +434 -0
  233. package/third_party/s2geometry/src/s2/s2latlng_rect_bounder.cc +344 -0
  234. package/third_party/s2geometry/src/s2/s2latlng_rect_bounder.h +89 -0
  235. package/third_party/s2geometry/src/s2/s2latlng_rect_bounder_test.cc +306 -0
  236. package/third_party/s2geometry/src/s2/s2latlng_rect_test.cc +1030 -0
  237. package/third_party/s2geometry/src/s2/s2latlng_test.cc +165 -0
  238. package/third_party/s2geometry/src/s2/s2lax_loop_shape.cc +104 -0
  239. package/third_party/s2geometry/src/s2/s2lax_loop_shape.h +153 -0
  240. package/third_party/s2geometry/src/s2/s2lax_loop_shape_test.cc +101 -0
  241. package/third_party/s2geometry/src/s2/s2lax_polygon_shape.cc +348 -0
  242. package/third_party/s2geometry/src/s2/s2lax_polygon_shape.h +183 -0
  243. package/third_party/s2geometry/src/s2/s2lax_polygon_shape_test.cc +234 -0
  244. package/third_party/s2geometry/src/s2/s2lax_polyline_shape.cc +118 -0
  245. package/third_party/s2geometry/src/s2/s2lax_polyline_shape.h +124 -0
  246. package/third_party/s2geometry/src/s2/s2lax_polyline_shape_test.cc +62 -0
  247. package/third_party/s2geometry/src/s2/s2loop.cc +1509 -0
  248. package/third_party/s2geometry/src/s2/s2loop.h +711 -0
  249. package/third_party/s2geometry/src/s2/s2loop_measures.cc +313 -0
  250. package/third_party/s2geometry/src/s2/s2loop_measures.h +280 -0
  251. package/third_party/s2geometry/src/s2/s2loop_measures_test.cc +367 -0
  252. package/third_party/s2geometry/src/s2/s2loop_test.cc +1371 -0
  253. package/third_party/s2geometry/src/s2/s2max_distance_targets.cc +265 -0
  254. package/third_party/s2geometry/src/s2/s2max_distance_targets.h +241 -0
  255. package/third_party/s2geometry/src/s2/s2max_distance_targets_test.cc +367 -0
  256. package/third_party/s2geometry/src/s2/s2measures.cc +128 -0
  257. package/third_party/s2geometry/src/s2/s2measures.h +78 -0
  258. package/third_party/s2geometry/src/s2/s2measures_test.cc +135 -0
  259. package/third_party/s2geometry/src/s2/s2metrics.cc +122 -0
  260. package/third_party/s2geometry/src/s2/s2metrics.h +199 -0
  261. package/third_party/s2geometry/src/s2/s2metrics_test.cc +127 -0
  262. package/third_party/s2geometry/src/s2/s2min_distance_targets.cc +295 -0
  263. package/third_party/s2geometry/src/s2/s2min_distance_targets.h +273 -0
  264. package/third_party/s2geometry/src/s2/s2min_distance_targets_test.cc +239 -0
  265. package/third_party/s2geometry/src/s2/s2padded_cell.cc +162 -0
  266. package/third_party/s2geometry/src/s2/s2padded_cell.h +108 -0
  267. package/third_party/s2geometry/src/s2/s2padded_cell_test.cc +138 -0
  268. package/third_party/s2geometry/src/s2/s2point.h +38 -0
  269. package/third_party/s2geometry/src/s2/s2point_compression.cc +388 -0
  270. package/third_party/s2geometry/src/s2/s2point_compression.h +78 -0
  271. package/third_party/s2geometry/src/s2/s2point_compression_test.cc +305 -0
  272. package/third_party/s2geometry/src/s2/s2point_index.h +345 -0
  273. package/third_party/s2geometry/src/s2/s2point_index_test.cc +147 -0
  274. package/third_party/s2geometry/src/s2/s2point_region.cc +72 -0
  275. package/third_party/s2geometry/src/s2/s2point_region.h +76 -0
  276. package/third_party/s2geometry/src/s2/s2point_region_test.cc +100 -0
  277. package/third_party/s2geometry/src/s2/s2point_span.h +57 -0
  278. package/third_party/s2geometry/src/s2/s2point_test.cc +47 -0
  279. package/third_party/s2geometry/src/s2/s2point_vector_shape.h +127 -0
  280. package/third_party/s2geometry/src/s2/s2point_vector_shape_test.cc +59 -0
  281. package/third_party/s2geometry/src/s2/s2pointutil.cc +131 -0
  282. package/third_party/s2geometry/src/s2/s2pointutil.h +138 -0
  283. package/third_party/s2geometry/src/s2/s2pointutil_test.cc +157 -0
  284. package/third_party/s2geometry/src/s2/s2polygon.cc +1569 -0
  285. package/third_party/s2geometry/src/s2/s2polygon.h +934 -0
  286. package/third_party/s2geometry/src/s2/s2polygon_test.cc +3025 -0
  287. package/third_party/s2geometry/src/s2/s2polyline.cc +645 -0
  288. package/third_party/s2geometry/src/s2/s2polyline.h +379 -0
  289. package/third_party/s2geometry/src/s2/s2polyline_alignment.cc +414 -0
  290. package/third_party/s2geometry/src/s2/s2polyline_alignment.h +245 -0
  291. package/third_party/s2geometry/src/s2/s2polyline_alignment_internal.h +158 -0
  292. package/third_party/s2geometry/src/s2/s2polyline_alignment_test.cc +610 -0
  293. package/third_party/s2geometry/src/s2/s2polyline_measures.cc +42 -0
  294. package/third_party/s2geometry/src/s2/s2polyline_measures.h +53 -0
  295. package/third_party/s2geometry/src/s2/s2polyline_measures_test.cc +57 -0
  296. package/third_party/s2geometry/src/s2/s2polyline_simplifier.cc +187 -0
  297. package/third_party/s2geometry/src/s2/s2polyline_simplifier.h +109 -0
  298. package/third_party/s2geometry/src/s2/s2polyline_simplifier_test.cc +165 -0
  299. package/third_party/s2geometry/src/s2/s2polyline_test.cc +554 -0
  300. package/third_party/s2geometry/src/s2/s2predicates.cc +1486 -0
  301. package/third_party/s2geometry/src/s2/s2predicates.h +282 -0
  302. package/third_party/s2geometry/src/s2/s2predicates_internal.h +135 -0
  303. package/third_party/s2geometry/src/s2/s2predicates_test.cc +1427 -0
  304. package/third_party/s2geometry/src/s2/s2projections.cc +109 -0
  305. package/third_party/s2geometry/src/s2/s2projections.h +161 -0
  306. package/third_party/s2geometry/src/s2/s2projections_test.cc +78 -0
  307. package/third_party/s2geometry/src/s2/s2r2rect.cc +88 -0
  308. package/third_party/s2geometry/src/s2/s2r2rect.h +292 -0
  309. package/third_party/s2geometry/src/s2/s2r2rect_test.cc +312 -0
  310. package/third_party/s2geometry/src/s2/s2region.cc +26 -0
  311. package/third_party/s2geometry/src/s2/s2region.h +142 -0
  312. package/third_party/s2geometry/src/s2/s2region_coverer.cc +514 -0
  313. package/third_party/s2geometry/src/s2/s2region_coverer.h +356 -0
  314. package/third_party/s2geometry/src/s2/s2region_coverer_test.cc +509 -0
  315. package/third_party/s2geometry/src/s2/s2region_intersection.cc +84 -0
  316. package/third_party/s2geometry/src/s2/s2region_intersection.h +79 -0
  317. package/third_party/s2geometry/src/s2/s2region_term_indexer.cc +270 -0
  318. package/third_party/s2geometry/src/s2/s2region_term_indexer.h +299 -0
  319. package/third_party/s2geometry/src/s2/s2region_term_indexer_test.cc +209 -0
  320. package/third_party/s2geometry/src/s2/s2region_test.cc +370 -0
  321. package/third_party/s2geometry/src/s2/s2region_union.cc +90 -0
  322. package/third_party/s2geometry/src/s2/s2region_union.h +83 -0
  323. package/third_party/s2geometry/src/s2/s2region_union_test.cc +89 -0
  324. package/third_party/s2geometry/src/s2/s2shape.h +283 -0
  325. package/third_party/s2geometry/src/s2/s2shape_index.cc +321 -0
  326. package/third_party/s2geometry/src/s2/s2shape_index.h +781 -0
  327. package/third_party/s2geometry/src/s2/s2shape_index_buffered_region.cc +113 -0
  328. package/third_party/s2geometry/src/s2/s2shape_index_buffered_region.h +135 -0
  329. package/third_party/s2geometry/src/s2/s2shape_index_buffered_region_test.cc +162 -0
  330. package/third_party/s2geometry/src/s2/s2shape_index_measures.cc +92 -0
  331. package/third_party/s2geometry/src/s2/s2shape_index_measures.h +100 -0
  332. package/third_party/s2geometry/src/s2/s2shape_index_measures_test.cc +136 -0
  333. package/third_party/s2geometry/src/s2/s2shape_index_region.h +350 -0
  334. package/third_party/s2geometry/src/s2/s2shape_index_region_test.cc +161 -0
  335. package/third_party/s2geometry/src/s2/s2shape_index_test.cc +24 -0
  336. package/third_party/s2geometry/src/s2/s2shape_measures.cc +138 -0
  337. package/third_party/s2geometry/src/s2/s2shape_measures.h +95 -0
  338. package/third_party/s2geometry/src/s2/s2shape_measures_test.cc +139 -0
  339. package/third_party/s2geometry/src/s2/s2shapeutil_build_polygon_boundaries.cc +120 -0
  340. package/third_party/s2geometry/src/s2/s2shapeutil_build_polygon_boundaries.h +66 -0
  341. package/third_party/s2geometry/src/s2/s2shapeutil_build_polygon_boundaries_test.cc +170 -0
  342. package/third_party/s2geometry/src/s2/s2shapeutil_coding.cc +253 -0
  343. package/third_party/s2geometry/src/s2/s2shapeutil_coding.h +283 -0
  344. package/third_party/s2geometry/src/s2/s2shapeutil_coding_test.cc +54 -0
  345. package/third_party/s2geometry/src/s2/s2shapeutil_contains_brute_force.cc +40 -0
  346. package/third_party/s2geometry/src/s2/s2shapeutil_contains_brute_force.h +41 -0
  347. package/third_party/s2geometry/src/s2/s2shapeutil_contains_brute_force_test.cc +55 -0
  348. package/third_party/s2geometry/src/s2/s2shapeutil_count_edges.h +57 -0
  349. package/third_party/s2geometry/src/s2/s2shapeutil_count_edges_test.cc +43 -0
  350. package/third_party/s2geometry/src/s2/s2shapeutil_edge_iterator.cc +45 -0
  351. package/third_party/s2geometry/src/s2/s2shapeutil_edge_iterator.h +72 -0
  352. package/third_party/s2geometry/src/s2/s2shapeutil_edge_iterator_test.cc +116 -0
  353. package/third_party/s2geometry/src/s2/s2shapeutil_get_reference_point.cc +107 -0
  354. package/third_party/s2geometry/src/s2/s2shapeutil_get_reference_point.h +48 -0
  355. package/third_party/s2geometry/src/s2/s2shapeutil_get_reference_point_test.cc +104 -0
  356. package/third_party/s2geometry/src/s2/s2shapeutil_range_iterator.cc +58 -0
  357. package/third_party/s2geometry/src/s2/s2shapeutil_range_iterator.h +65 -0
  358. package/third_party/s2geometry/src/s2/s2shapeutil_range_iterator_test.cc +61 -0
  359. package/third_party/s2geometry/src/s2/s2shapeutil_shape_edge.h +58 -0
  360. package/third_party/s2geometry/src/s2/s2shapeutil_shape_edge_id.h +97 -0
  361. package/third_party/s2geometry/src/s2/s2shapeutil_testing.cc +104 -0
  362. package/third_party/s2geometry/src/s2/s2shapeutil_testing.h +36 -0
  363. package/third_party/s2geometry/src/s2/s2shapeutil_visit_crossing_edge_pairs.cc +440 -0
  364. package/third_party/s2geometry/src/s2/s2shapeutil_visit_crossing_edge_pairs.h +72 -0
  365. package/third_party/s2geometry/src/s2/s2shapeutil_visit_crossing_edge_pairs_test.cc +184 -0
  366. package/third_party/s2geometry/src/s2/s2testing.cc +464 -0
  367. package/third_party/s2geometry/src/s2/s2testing.h +385 -0
  368. package/third_party/s2geometry/src/s2/s2testing_test.cc +166 -0
  369. package/third_party/s2geometry/src/s2/s2text_format.cc +506 -0
  370. package/third_party/s2geometry/src/s2/s2text_format.h +289 -0
  371. package/third_party/s2geometry/src/s2/s2text_format_test.cc +417 -0
  372. package/third_party/s2geometry/src/s2/s2wedge_relations.cc +80 -0
  373. package/third_party/s2geometry/src/s2/s2wedge_relations.h +64 -0
  374. package/third_party/s2geometry/src/s2/s2wedge_relations_test.cc +89 -0
  375. package/third_party/s2geometry/src/s2/sequence_lexicon.h +296 -0
  376. package/third_party/s2geometry/src/s2/sequence_lexicon_test.cc +113 -0
  377. package/third_party/s2geometry/src/s2/strings/ostringstream.cc +35 -0
  378. package/third_party/s2geometry/src/s2/strings/ostringstream.h +105 -0
  379. package/third_party/s2geometry/src/s2/strings/serialize.cc +46 -0
  380. package/third_party/s2geometry/src/s2/strings/serialize.h +40 -0
  381. package/third_party/s2geometry/src/s2/third_party/absl/algorithm/algorithm.h +187 -0
  382. package/third_party/s2geometry/src/s2/third_party/absl/base/attributes.h +666 -0
  383. package/third_party/s2geometry/src/s2/third_party/absl/base/casts.h +189 -0
  384. package/third_party/s2geometry/src/s2/third_party/absl/base/config.h +462 -0
  385. package/third_party/s2geometry/src/s2/third_party/absl/base/dynamic_annotations.cc +129 -0
  386. package/third_party/s2geometry/src/s2/third_party/absl/base/dynamic_annotations.h +394 -0
  387. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/atomic_hook.h +168 -0
  388. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/identity.h +33 -0
  389. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/inline_variable.h +117 -0
  390. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/invoke.h +188 -0
  391. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/raw_logging.cc +254 -0
  392. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/raw_logging.h +205 -0
  393. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/throw_delegate.cc +106 -0
  394. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/throw_delegate.h +71 -0
  395. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/unaligned_access.h +322 -0
  396. package/third_party/s2geometry/src/s2/third_party/absl/base/log_severity.h +77 -0
  397. package/third_party/s2geometry/src/s2/third_party/absl/base/macros.h +236 -0
  398. package/third_party/s2geometry/src/s2/third_party/absl/base/optimization.h +177 -0
  399. package/third_party/s2geometry/src/s2/third_party/absl/base/policy_checks.h +124 -0
  400. package/third_party/s2geometry/src/s2/third_party/absl/base/port.h +97 -0
  401. package/third_party/s2geometry/src/s2/third_party/absl/base/thread_annotations.h +277 -0
  402. package/third_party/s2geometry/src/s2/third_party/absl/container/fixed_array.h +523 -0
  403. package/third_party/s2geometry/src/s2/third_party/absl/container/inlined_vector.h +1453 -0
  404. package/third_party/s2geometry/src/s2/third_party/absl/container/internal/compressed_tuple.h +191 -0
  405. package/third_party/s2geometry/src/s2/third_party/absl/container/internal/container_memory.h +424 -0
  406. package/third_party/s2geometry/src/s2/third_party/absl/container/internal/layout.h +739 -0
  407. package/third_party/s2geometry/src/s2/third_party/absl/memory/memory.h +755 -0
  408. package/third_party/s2geometry/src/s2/third_party/absl/meta/type_traits.h +436 -0
  409. package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128.cc +232 -0
  410. package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128.h +656 -0
  411. package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128_have_intrinsic.inc +3 -0
  412. package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128_no_intrinsic.inc +3 -0
  413. package/third_party/s2geometry/src/s2/third_party/absl/strings/ascii.cc +198 -0
  414. package/third_party/s2geometry/src/s2/third_party/absl/strings/ascii.h +239 -0
  415. package/third_party/s2geometry/src/s2/third_party/absl/strings/ascii_ctype.h +66 -0
  416. package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/bits.h +53 -0
  417. package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/memutil.cc +110 -0
  418. package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/memutil.h +146 -0
  419. package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/resize_uninitialized.h +72 -0
  420. package/third_party/s2geometry/src/s2/third_party/absl/strings/match.cc +38 -0
  421. package/third_party/s2geometry/src/s2/third_party/absl/strings/match.h +89 -0
  422. package/third_party/s2geometry/src/s2/third_party/absl/strings/numbers.cc +909 -0
  423. package/third_party/s2geometry/src/s2/third_party/absl/strings/numbers.h +187 -0
  424. package/third_party/s2geometry/src/s2/third_party/absl/strings/str_cat.cc +240 -0
  425. package/third_party/s2geometry/src/s2/third_party/absl/strings/str_cat.h +398 -0
  426. package/third_party/s2geometry/src/s2/third_party/absl/strings/str_join.h +22 -0
  427. package/third_party/s2geometry/src/s2/third_party/absl/strings/str_split.cc +47 -0
  428. package/third_party/s2geometry/src/s2/third_party/absl/strings/str_split.h +43 -0
  429. package/third_party/s2geometry/src/s2/third_party/absl/strings/string_view.cc +245 -0
  430. package/third_party/s2geometry/src/s2/third_party/absl/strings/string_view.h +602 -0
  431. package/third_party/s2geometry/src/s2/third_party/absl/strings/strip.cc +42 -0
  432. package/third_party/s2geometry/src/s2/third_party/absl/strings/strip.h +130 -0
  433. package/third_party/s2geometry/src/s2/third_party/absl/types/span.h +793 -0
  434. package/third_party/s2geometry/src/s2/third_party/absl/utility/utility.h +299 -0
  435. package/third_party/s2geometry/src/s2/util/bits/bit-interleave.cc +274 -0
  436. package/third_party/s2geometry/src/s2/util/bits/bit-interleave.h +53 -0
  437. package/third_party/s2geometry/src/s2/util/bits/bits.cc +155 -0
  438. package/third_party/s2geometry/src/s2/util/bits/bits.h +745 -0
  439. package/third_party/s2geometry/src/s2/util/coding/coder.cc +83 -0
  440. package/third_party/s2geometry/src/s2/util/coding/coder.h +553 -0
  441. package/third_party/s2geometry/src/s2/util/coding/nth-derivative.h +134 -0
  442. package/third_party/s2geometry/src/s2/util/coding/transforms.h +62 -0
  443. package/third_party/s2geometry/src/s2/util/coding/varint.cc +289 -0
  444. package/third_party/s2geometry/src/s2/util/coding/varint.h +476 -0
  445. package/third_party/s2geometry/src/s2/util/endian/endian.h +859 -0
  446. package/third_party/s2geometry/src/s2/util/gtl/btree.h +2471 -0
  447. package/third_party/s2geometry/src/s2/util/gtl/btree_container.h +411 -0
  448. package/third_party/s2geometry/src/s2/util/gtl/btree_map.h +79 -0
  449. package/third_party/s2geometry/src/s2/util/gtl/btree_set.h +73 -0
  450. package/third_party/s2geometry/src/s2/util/gtl/compact_array.h +653 -0
  451. package/third_party/s2geometry/src/s2/util/gtl/container_logging.h +291 -0
  452. package/third_party/s2geometry/src/s2/util/gtl/dense_hash_set.h +358 -0
  453. package/third_party/s2geometry/src/s2/util/gtl/densehashtable.h +1493 -0
  454. package/third_party/s2geometry/src/s2/util/gtl/hashtable_common.h +253 -0
  455. package/third_party/s2geometry/src/s2/util/gtl/layout.h +28 -0
  456. package/third_party/s2geometry/src/s2/util/gtl/legacy_random_shuffle.h +77 -0
  457. package/third_party/s2geometry/src/s2/util/hash/mix.h +76 -0
  458. package/third_party/s2geometry/src/s2/util/math/exactfloat/exactfloat.cc +832 -0
  459. package/third_party/s2geometry/src/s2/util/math/exactfloat/exactfloat.h +646 -0
  460. package/third_party/s2geometry/src/s2/util/math/mathutil.cc +75 -0
  461. package/third_party/s2geometry/src/s2/util/math/mathutil.h +189 -0
  462. package/third_party/s2geometry/src/s2/util/math/matrix3x3.h +574 -0
  463. package/third_party/s2geometry/src/s2/util/math/vector.h +569 -0
  464. package/third_party/s2geometry/src/s2/util/math/vector3_hash.h +54 -0
  465. package/third_party/s2geometry/src/s2/util/units/length-units.cc +21 -0
  466. package/third_party/s2geometry/src/s2/util/units/length-units.h +135 -0
  467. package/third_party/s2geometry/src/s2/util/units/physical-units.h +313 -0
  468. package/third_party/s2geometry/src/s2/value_lexicon.h +234 -0
  469. package/third_party/s2geometry/src/s2/value_lexicon_test.cc +121 -0
  470. package/third_party/s2geometry/third_party/cmake/FindGFlags.cmake +48 -0
  471. package/third_party/s2geometry/third_party/cmake/FindGlog.cmake +48 -0
@@ -0,0 +1,220 @@
1
+ // Copyright 2005 Google Inc. All Rights Reserved.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS-IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+
16
+ // Author: ericv@google.com (Eric Veach)
17
+
18
+ #ifndef S2_R1INTERVAL_H_
19
+ #define S2_R1INTERVAL_H_
20
+
21
+ #include <algorithm>
22
+ #include <cmath>
23
+ #include <iosfwd>
24
+ #include <iostream>
25
+
26
+ #include "s2/base/logging.h"
27
+ #include "s2/_fp_contract_off.h"
28
+ #include "s2/util/math/vector.h" // IWYU pragma: export
29
+
30
+ // An R1Interval represents a closed, bounded interval on the real line.
31
+ // It is capable of representing the empty interval (containing no points)
32
+ // and zero-length intervals (containing a single point).
33
+ //
34
+ // This class is intended to be copied by value as desired. It uses
35
+ // the default copy constructor and assignment operator.
36
+ class R1Interval {
37
+ public:
38
+ // Constructor. If lo > hi, the interval is empty.
39
+ R1Interval(double lo, double hi) : bounds_(lo, hi) {}
40
+
41
+ // The default constructor creates an empty interval. (Any interval where
42
+ // lo > hi is considered to be empty.)
43
+ //
44
+ // Note: Don't construct an interval using the default constructor and
45
+ // set_lo()/set_hi(), since this technique doesn't work with S1Interval and
46
+ // is bad programming style anyways. If you need to set both endpoints, use
47
+ // the constructor above:
48
+ //
49
+ // lat_bounds_ = R1Interval(lat_lo, lat_hi);
50
+ R1Interval() : bounds_(1, 0) {}
51
+
52
+ // Returns an empty interval.
53
+ static R1Interval Empty() { return R1Interval(); }
54
+
55
+ // Convenience method to construct an interval containing a single point.
56
+ static R1Interval FromPoint(double p) { return R1Interval(p, p); }
57
+
58
+ // Convenience method to construct the minimal interval containing
59
+ // the two given points. This is equivalent to starting with an empty
60
+ // interval and calling AddPoint() twice, but it is more efficient.
61
+ static R1Interval FromPointPair(double p1, double p2) {
62
+ if (p1 <= p2) {
63
+ return R1Interval(p1, p2);
64
+ } else {
65
+ return R1Interval(p2, p1);
66
+ }
67
+ }
68
+
69
+ // Accessors methods.
70
+ double lo() const { return bounds_[0]; }
71
+ double hi() const { return bounds_[1]; }
72
+
73
+ // Methods to modify one endpoint of an existing R1Interval. Do not use
74
+ // these methods if you want to replace both endpoints of the interval; use
75
+ // a constructor instead. For example:
76
+ //
77
+ // *lat_bounds = R1Interval(lat_lo, lat_hi);
78
+ void set_lo(double p) { bounds_[0] = p; }
79
+ void set_hi(double p) { bounds_[1] = p; }
80
+
81
+ // Methods that allow the R1Interval to be accessed as a vector. (The
82
+ // recommended style is to use lo() and hi() whenever possible, but these
83
+ // methods are useful when the endpoint to be selected is not constant.)
84
+ double operator[](int i) const { return bounds_[i]; }
85
+ double& operator[](int i) { return bounds_[i]; }
86
+ const Vector2_d& bounds() const { return bounds_; }
87
+ Vector2_d* mutable_bounds() { return &bounds_; }
88
+
89
+ // Return true if the interval is empty, i.e. it contains no points.
90
+ bool is_empty() const { return lo() > hi(); }
91
+
92
+ // Return the center of the interval. For empty intervals,
93
+ // the result is arbitrary.
94
+ double GetCenter() const { return 0.5 * (lo() + hi()); }
95
+
96
+ // Return the length of the interval. The length of an empty interval
97
+ // is negative.
98
+ double GetLength() const { return hi() - lo(); }
99
+
100
+ bool Contains(double p) const {
101
+ return p >= lo() && p <= hi();
102
+ }
103
+
104
+ bool InteriorContains(double p) const {
105
+ return p > lo() && p < hi();
106
+ }
107
+
108
+ // Return true if this interval contains the interval 'y'.
109
+ bool Contains(const R1Interval& y) const {
110
+ if (y.is_empty()) return true;
111
+ return y.lo() >= lo() && y.hi() <= hi();
112
+ }
113
+
114
+ // Return true if the interior of this interval contains the entire
115
+ // interval 'y' (including its boundary).
116
+ bool InteriorContains(const R1Interval& y) const {
117
+ if (y.is_empty()) return true;
118
+ return y.lo() > lo() && y.hi() < hi();
119
+ }
120
+
121
+ // Return true if this interval intersects the given interval,
122
+ // i.e. if they have any points in common.
123
+ bool Intersects(const R1Interval& y) const {
124
+ if (lo() <= y.lo()) {
125
+ return y.lo() <= hi() && y.lo() <= y.hi();
126
+ } else {
127
+ return lo() <= y.hi() && lo() <= hi();
128
+ }
129
+ }
130
+
131
+ // Return true if the interior of this interval intersects
132
+ // any point of the given interval (including its boundary).
133
+ bool InteriorIntersects(const R1Interval& y) const {
134
+ return y.lo() < hi() && lo() < y.hi() && lo() < hi() && y.lo() <= y.hi();
135
+ }
136
+
137
+ // Return the Hausdorff distance to the given interval 'y'. For two
138
+ // R1Intervals x and y, this distance is defined as
139
+ // h(x, y) = max_{p in x} min_{q in y} d(p, q).
140
+ double GetDirectedHausdorffDistance(const R1Interval& y) const {
141
+ if (is_empty()) return 0.0;
142
+ if (y.is_empty()) return HUGE_VAL;
143
+ return std::max(0.0, std::max(hi() - y.hi(), y.lo() - lo()));
144
+ }
145
+
146
+ // Expand the interval so that it contains the given point "p".
147
+ void AddPoint(double p) {
148
+ if (is_empty()) { set_lo(p); set_hi(p); }
149
+ else if (p < lo()) { set_lo(p); } // NOLINT
150
+ else if (p > hi()) { set_hi(p); } // NOLINT
151
+ }
152
+
153
+ // Expand the interval so that it contains the given interval "y".
154
+ void AddInterval(const R1Interval& y) {
155
+ if (y.is_empty()) return;
156
+ if (is_empty()) { *this = y; return; }
157
+ if (y.lo() < lo()) set_lo(y.lo());
158
+ if (y.hi() > hi()) set_hi(y.hi());
159
+ }
160
+
161
+ // Return the closest point in the interval to the given point "p".
162
+ // The interval must be non-empty.
163
+ double Project(double p) const {
164
+ S2_DCHECK(!is_empty());
165
+ return std::max(lo(), std::min(hi(), p));
166
+ }
167
+
168
+ // Return an interval that has been expanded on each side by the given
169
+ // distance "margin". If "margin" is negative, then shrink the interval on
170
+ // each side by "margin" instead. The resulting interval may be empty. Any
171
+ // expansion of an empty interval remains empty.
172
+ R1Interval Expanded(double margin) const {
173
+ if (is_empty()) return *this;
174
+ return R1Interval(lo() - margin, hi() + margin);
175
+ }
176
+
177
+ // Return the smallest interval that contains this interval and the
178
+ // given interval "y".
179
+ R1Interval Union(const R1Interval& y) const {
180
+ if (is_empty()) return y;
181
+ if (y.is_empty()) return *this;
182
+ return R1Interval(std::min(lo(), y.lo()), std::max(hi(), y.hi()));
183
+ }
184
+
185
+ // Return the intersection of this interval with the given interval.
186
+ // Empty intervals do not need to be special-cased.
187
+ R1Interval Intersection(const R1Interval& y) const {
188
+ return R1Interval(std::max(lo(), y.lo()), std::min(hi(), y.hi()));
189
+ }
190
+
191
+ // Return true if two intervals contain the same set of points.
192
+ bool operator==(const R1Interval& y) const {
193
+ return (lo() == y.lo() && hi() == y.hi()) || (is_empty() && y.is_empty());
194
+ }
195
+
196
+ // Return true if two intervals do not contain the same set of points.
197
+ bool operator!=(const R1Interval& y) const {
198
+ return !operator==(y);
199
+ }
200
+
201
+ // Return true if this interval can be transformed into the given interval
202
+ // by moving each endpoint by at most "max_error". The empty interval is
203
+ // considered to be positioned arbitrarily on the real line, thus any
204
+ // interval with (length <= 2*max_error) matches the empty interval.
205
+ bool ApproxEquals(const R1Interval& y, double max_error = 1e-15) const {
206
+ if (is_empty()) return y.GetLength() <= 2 * max_error;
207
+ if (y.is_empty()) return GetLength() <= 2 * max_error;
208
+ return (std::fabs(y.lo() - lo()) <= max_error &&
209
+ std::fabs(y.hi() - hi()) <= max_error);
210
+ }
211
+
212
+ private:
213
+ Vector2_d bounds_;
214
+ };
215
+
216
+ inline std::ostream& operator<<(std::ostream& os, const R1Interval& x) {
217
+ return os << "[" << x.lo() << ", " << x.hi() << "]";
218
+ }
219
+
220
+ #endif // S2_R1INTERVAL_H_
@@ -0,0 +1,185 @@
1
+ // Copyright 2005 Google Inc. All Rights Reserved.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS-IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+
16
+ // Author: ericv@google.com (Eric Veach)
17
+
18
+ #include "s2/r1interval.h"
19
+
20
+ #include <cfloat>
21
+
22
+ #include <gtest/gtest.h>
23
+
24
+ static void TestIntervalOps(const R1Interval& x, const R1Interval& y,
25
+ const char* expected) {
26
+ // Test all of the interval operations on the given pair of intervals.
27
+ // "expected" is a sequence of "T" and "F" characters corresponding to
28
+ // the expected results of Contains(), InteriorContains(), Intersects(),
29
+ // and InteriorIntersects() respectively.
30
+
31
+ EXPECT_EQ(expected[0] == 'T', x.Contains(y));
32
+ EXPECT_EQ(expected[1] == 'T', x.InteriorContains(y));
33
+ EXPECT_EQ(expected[2] == 'T', x.Intersects(y));
34
+ EXPECT_EQ(expected[3] == 'T', x.InteriorIntersects(y));
35
+
36
+ EXPECT_EQ(x.Contains(y), x.Union(y) == x);
37
+ EXPECT_EQ(x.Intersects(y), !x.Intersection(y).is_empty());
38
+
39
+ R1Interval z = x;
40
+ z.AddInterval(y);
41
+ EXPECT_EQ(x.Union(y), z);
42
+ }
43
+
44
+ TEST(R1Interval, TestBasic) {
45
+ // Constructors and accessors.
46
+ R1Interval unit(0, 1);
47
+ R1Interval negunit(-1, 0);
48
+ EXPECT_EQ(0, unit.lo());
49
+ EXPECT_EQ(1, unit.hi());
50
+ EXPECT_EQ(-1, negunit[0]);
51
+ EXPECT_EQ(0, negunit[1]);
52
+ R1Interval ten(0, 0);
53
+ ten.set_hi(10);
54
+ EXPECT_EQ(R1Interval(0, 10), ten);
55
+ ten[0] = -10;
56
+ EXPECT_EQ(R1Interval(-10, 10), ten);
57
+ ten[1] = 0;
58
+ EXPECT_EQ(Vector2_d(-10, 0), ten.bounds());
59
+ *ten.mutable_bounds() = Vector2_d(0, 10);
60
+ EXPECT_EQ(R1Interval(0, 10), ten);
61
+
62
+ // is_empty()
63
+ R1Interval half(0.5, 0.5);
64
+ EXPECT_FALSE(unit.is_empty());
65
+ EXPECT_FALSE(half.is_empty());
66
+ R1Interval empty = R1Interval::Empty();
67
+ EXPECT_TRUE(empty.is_empty());
68
+
69
+ // == and !=
70
+ EXPECT_TRUE(empty == empty);
71
+ EXPECT_TRUE(unit == unit);
72
+ EXPECT_TRUE(unit != empty);
73
+ EXPECT_TRUE(R1Interval(1, 2) != R1Interval(1, 3));
74
+
75
+ // Check that the default R1Interval is identical to Empty().
76
+ R1Interval default_empty;
77
+ EXPECT_TRUE(default_empty.is_empty());
78
+ EXPECT_EQ(empty.lo(), default_empty.lo());
79
+ EXPECT_EQ(empty.hi(), default_empty.hi());
80
+
81
+ // GetCenter(), GetLength()
82
+ EXPECT_EQ(unit.GetCenter(), 0.5);
83
+ EXPECT_EQ(half.GetCenter(), 0.5);
84
+ EXPECT_EQ(negunit.GetLength(), 1.0);
85
+ EXPECT_EQ(half.GetLength(), 0);
86
+ EXPECT_LT(empty.GetLength(), 0);
87
+
88
+ // Contains(double), InteriorContains(double)
89
+ EXPECT_TRUE(unit.Contains(0.5));
90
+ EXPECT_TRUE(unit.InteriorContains(0.5));
91
+ EXPECT_TRUE(unit.Contains(0));
92
+ EXPECT_FALSE(unit.InteriorContains(0));
93
+ EXPECT_TRUE(unit.Contains(1));
94
+ EXPECT_FALSE(unit.InteriorContains(1));
95
+
96
+ // Contains(R1Interval), InteriorContains(R1Interval)
97
+ // Intersects(R1Interval), InteriorIntersects(R1Interval)
98
+ { SCOPED_TRACE(""); TestIntervalOps(empty, empty, "TTFF"); }
99
+ { SCOPED_TRACE(""); TestIntervalOps(empty, unit, "FFFF"); }
100
+ { SCOPED_TRACE(""); TestIntervalOps(unit, half, "TTTT"); }
101
+ { SCOPED_TRACE(""); TestIntervalOps(unit, unit, "TFTT"); }
102
+ { SCOPED_TRACE(""); TestIntervalOps(unit, empty, "TTFF"); }
103
+ { SCOPED_TRACE(""); TestIntervalOps(unit, negunit, "FFTF"); }
104
+ { SCOPED_TRACE(""); TestIntervalOps(unit, R1Interval(0, 0.5), "TFTT"); }
105
+ { SCOPED_TRACE(""); TestIntervalOps(half, R1Interval(0, 0.5), "FFTF"); }
106
+
107
+ // AddPoint()
108
+ R1Interval r = empty;
109
+ r.AddPoint(5);
110
+ EXPECT_EQ(5, r.lo());
111
+ EXPECT_EQ(5, r.hi());
112
+ r.AddPoint(-1);
113
+ EXPECT_EQ(-1, r.lo());
114
+ EXPECT_EQ(5, r.hi());
115
+ r.AddPoint(0);
116
+ EXPECT_EQ(-1, r.lo());
117
+ EXPECT_EQ(5, r.hi());
118
+
119
+ // Project()
120
+ EXPECT_EQ(0.3, R1Interval(0.1, 0.4).Project(0.3));
121
+ EXPECT_EQ(0.1, R1Interval(0.1, 0.4).Project(-7.0));
122
+ EXPECT_EQ(0.4, R1Interval(0.1, 0.4).Project(0.6));
123
+
124
+ // FromPointPair()
125
+ EXPECT_EQ(R1Interval(4, 4), R1Interval::FromPointPair(4, 4));
126
+ EXPECT_EQ(R1Interval(-2, -1), R1Interval::FromPointPair(-1, -2));
127
+ EXPECT_EQ(R1Interval(-5, 3), R1Interval::FromPointPair(-5, 3));
128
+
129
+ // Expanded()
130
+ EXPECT_EQ(empty, empty.Expanded(0.45));
131
+ EXPECT_EQ(R1Interval(-0.5, 1.5), unit.Expanded(0.5));
132
+ EXPECT_EQ(R1Interval(0.5, 0.5), unit.Expanded(-0.5));
133
+ EXPECT_TRUE(unit.Expanded(-0.51).is_empty());
134
+ EXPECT_TRUE(unit.Expanded(-0.51).Expanded(0.51).is_empty());
135
+
136
+ // Union(), Intersection()
137
+ EXPECT_EQ(R1Interval(99, 100), R1Interval(99, 100).Union(empty));
138
+ EXPECT_EQ(R1Interval(99, 100), empty.Union(R1Interval(99, 100)));
139
+ EXPECT_TRUE(R1Interval(5, 3).Union(R1Interval(0, -2)).is_empty());
140
+ EXPECT_TRUE(R1Interval(0, -2).Union(R1Interval(5, 3)).is_empty());
141
+ EXPECT_EQ(unit, unit.Union(unit));
142
+ EXPECT_EQ(R1Interval(-1, 1), unit.Union(negunit));
143
+ EXPECT_EQ(R1Interval(-1, 1), negunit.Union(unit));
144
+ EXPECT_EQ(unit, half.Union(unit));
145
+ EXPECT_EQ(half, unit.Intersection(half));
146
+ EXPECT_EQ(R1Interval(0, 0), unit.Intersection(negunit));
147
+ EXPECT_TRUE(negunit.Intersection(half).is_empty());
148
+ EXPECT_TRUE(unit.Intersection(empty).is_empty());
149
+ EXPECT_TRUE(empty.Intersection(unit).is_empty());
150
+ }
151
+
152
+ TEST(R1Interval, ApproxEquals) {
153
+ // Choose two values kLo and kHi such that it's okay to shift an endpoint by
154
+ // kLo (i.e., the resulting interval is equivalent) but not by kHi.
155
+ static const double kLo = 4 * DBL_EPSILON; // < max_error default
156
+ static const double kHi = 6 * DBL_EPSILON; // > max_error default
157
+
158
+ // Empty intervals.
159
+ R1Interval empty = R1Interval::Empty();
160
+ EXPECT_TRUE(empty.ApproxEquals(empty));
161
+ EXPECT_TRUE(R1Interval(0, 0).ApproxEquals(empty));
162
+ EXPECT_TRUE(empty.ApproxEquals(R1Interval(0, 0)));
163
+ EXPECT_TRUE(R1Interval(1, 1).ApproxEquals(empty));
164
+ EXPECT_TRUE(empty.ApproxEquals(R1Interval(1, 1)));
165
+ EXPECT_FALSE(empty.ApproxEquals(R1Interval(0, 1)));
166
+ EXPECT_TRUE(empty.ApproxEquals(R1Interval(1, 1 + 2*kLo)));
167
+ EXPECT_FALSE(empty.ApproxEquals(R1Interval(1, 1 + 2*kHi)));
168
+
169
+ // Singleton intervals.
170
+ EXPECT_TRUE(R1Interval(1, 1).ApproxEquals(R1Interval(1, 1)));
171
+ EXPECT_TRUE(R1Interval(1, 1).ApproxEquals(R1Interval(1 - kLo, 1 - kLo)));
172
+ EXPECT_TRUE(R1Interval(1, 1).ApproxEquals(R1Interval(1 + kLo, 1 + kLo)));
173
+ EXPECT_FALSE(R1Interval(1, 1).ApproxEquals(R1Interval(1 - kHi, 1)));
174
+ EXPECT_FALSE(R1Interval(1, 1).ApproxEquals(R1Interval(1, 1 + kHi)));
175
+ EXPECT_TRUE(R1Interval(1, 1).ApproxEquals(R1Interval(1 - kLo, 1 + kLo)));
176
+ EXPECT_FALSE(R1Interval(0, 0).ApproxEquals(R1Interval(1, 1)));
177
+
178
+ // Other intervals.
179
+ EXPECT_TRUE(R1Interval(1 - kLo, 2 + kLo).ApproxEquals(R1Interval(1, 2)));
180
+ EXPECT_TRUE(R1Interval(1 + kLo, 2 - kLo).ApproxEquals(R1Interval(1, 2)));
181
+ EXPECT_FALSE(R1Interval(1 - kHi, 2 + kLo).ApproxEquals(R1Interval(1, 2)));
182
+ EXPECT_FALSE(R1Interval(1 + kHi, 2 - kLo).ApproxEquals(R1Interval(1, 2)));
183
+ EXPECT_FALSE(R1Interval(1 - kLo, 2 + kHi).ApproxEquals(R1Interval(1, 2)));
184
+ EXPECT_FALSE(R1Interval(1 + kLo, 2 - kHi).ApproxEquals(R1Interval(1, 2)));
185
+ }
@@ -0,0 +1,26 @@
1
+ // Copyright 2012 Google Inc. All Rights Reserved.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS-IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+
16
+ // Author: ericv@google.com (Eric Veach)
17
+
18
+ #ifndef S2_R2_H_
19
+ #define S2_R2_H_
20
+
21
+ #include "s2/_fp_contract_off.h"
22
+ #include "s2/util/math/vector.h" // IWYU pragma: export
23
+
24
+ using R2Point = Vector2_d;
25
+
26
+ #endif // S2_R2_H_
@@ -0,0 +1,93 @@
1
+ // Copyright 2012 Google Inc. All Rights Reserved.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS-IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+
16
+ // Author: ericv@google.com (Eric Veach)
17
+
18
+ #include "s2/r2rect.h"
19
+
20
+ #include <iosfwd>
21
+
22
+ #include "s2/base/logging.h"
23
+ #include "s2/r1interval.h"
24
+ #include "s2/r2.h"
25
+
26
+ R2Rect R2Rect::FromCenterSize(const R2Point& center, const R2Point& size) {
27
+ return R2Rect(R1Interval(center.x() - 0.5 * size.x(),
28
+ center.x() + 0.5 * size.x()),
29
+ R1Interval(center.y() - 0.5 * size.y(),
30
+ center.y() + 0.5 * size.y()));
31
+ }
32
+
33
+ R2Rect R2Rect::FromPointPair(const R2Point& p1, const R2Point& p2) {
34
+ return R2Rect(R1Interval::FromPointPair(p1.x(), p2.x()),
35
+ R1Interval::FromPointPair(p1.y(), p2.y()));
36
+ }
37
+
38
+ bool R2Rect::Contains(const R2Rect& other) const {
39
+ return x().Contains(other.x()) && y().Contains(other.y());
40
+ }
41
+
42
+ bool R2Rect::InteriorContains(const R2Rect& other) const {
43
+ return x().InteriorContains(other.x()) && y().InteriorContains(other.y());
44
+ }
45
+
46
+ bool R2Rect::Intersects(const R2Rect& other) const {
47
+ return x().Intersects(other.x()) && y().Intersects(other.y());
48
+ }
49
+
50
+ bool R2Rect::InteriorIntersects(const R2Rect& other) const {
51
+ return x().InteriorIntersects(other.x()) && y().InteriorIntersects(other.y());
52
+ }
53
+
54
+ void R2Rect::AddPoint(const R2Point& p) {
55
+ bounds_[0].AddPoint(p[0]);
56
+ bounds_[1].AddPoint(p[1]);
57
+ }
58
+
59
+ void R2Rect::AddRect(const R2Rect& other) {
60
+ bounds_[0].AddInterval(other[0]);
61
+ bounds_[1].AddInterval(other[1]);
62
+ }
63
+
64
+ R2Point R2Rect::Project(const R2Point& p) const {
65
+ return R2Point(x().Project(p.x()), y().Project(p.y()));
66
+ }
67
+
68
+ R2Rect R2Rect::Expanded(const R2Point& margin) const {
69
+ R1Interval xx = x().Expanded(margin.x());
70
+ R1Interval yy = y().Expanded(margin.y());
71
+ if (xx.is_empty() || yy.is_empty()) return Empty();
72
+ return R2Rect(xx, yy);
73
+ }
74
+
75
+ R2Rect R2Rect::Union(const R2Rect& other) const {
76
+ return R2Rect(x().Union(other.x()), y().Union(other.y()));
77
+ }
78
+
79
+ R2Rect R2Rect::Intersection(const R2Rect& other) const {
80
+ R1Interval xx = x().Intersection(other.x());
81
+ R1Interval yy = y().Intersection(other.y());
82
+ if (xx.is_empty() || yy.is_empty()) return Empty();
83
+ return R2Rect(xx, yy);
84
+ }
85
+
86
+ bool R2Rect::ApproxEquals(const R2Rect& other, double max_error) const {
87
+ return (x().ApproxEquals(other.x(), max_error) &&
88
+ y().ApproxEquals(other.y(), max_error));
89
+ }
90
+
91
+ std::ostream& operator<<(std::ostream& os, const R2Rect& r) {
92
+ return os << "[Lo" << r.lo() << ", Hi" << r.hi() << "]";
93
+ }