@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,234 @@
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_R2RECT_H_
19
+ #define S2_R2RECT_H_
20
+
21
+ #include <iosfwd>
22
+
23
+ #include "s2/base/logging.h"
24
+ #include "s2/_fp_contract_off.h"
25
+ #include "s2/r1interval.h"
26
+ #include "s2/r2.h"
27
+
28
+ // An R2Rect represents a closed axis-aligned rectangle in the (x,y) plane.
29
+ //
30
+ // This class is intended to be copied by value as desired. It uses
31
+ // the default copy constructor and assignment operator, however it is
32
+ // not a "plain old datatype" (POD) because it has virtual functions.
33
+ class R2Rect {
34
+ public:
35
+ // Construct a rectangle from the given lower-left and upper-right points.
36
+ R2Rect(const R2Point& lo, const R2Point& hi);
37
+
38
+ // Construct a rectangle from the given intervals in x and y. The two
39
+ // intervals must either be both empty or both non-empty.
40
+ R2Rect(const R1Interval& x, const R1Interval& y);
41
+
42
+ // The default constructor creates an empty R2Rect.
43
+ R2Rect();
44
+
45
+ // The canonical empty rectangle. Use is_empty() to test for empty
46
+ // rectangles, since they have more than one representation.
47
+ static R2Rect Empty();
48
+
49
+ // Construct a rectangle from a center point and size in each dimension.
50
+ // Both components of size should be non-negative, i.e. this method cannot
51
+ // be used to create an empty rectangle.
52
+ static R2Rect FromCenterSize(const R2Point& center, const R2Point& size);
53
+
54
+ // Convenience method to construct a rectangle containing a single point.
55
+ static R2Rect FromPoint(const R2Point& p);
56
+
57
+ // Convenience method to construct the minimal bounding rectangle containing
58
+ // the two given points. This is equivalent to starting with an empty
59
+ // rectangle and calling AddPoint() twice. Note that it is different than
60
+ // the R2Rect(lo, hi) constructor, where the first point is always
61
+ // used as the lower-left corner of the resulting rectangle.
62
+ static R2Rect FromPointPair(const R2Point& p1, const R2Point& p2);
63
+
64
+ // Accessor methods.
65
+ const R1Interval& x() const { return bounds_[0]; }
66
+ const R1Interval& y() const { return bounds_[1]; }
67
+ R2Point lo() const { return R2Point(x().lo(), y().lo()); }
68
+ R2Point hi() const { return R2Point(x().hi(), y().hi()); }
69
+
70
+ // Methods that allow the R2Rect to be accessed as a vector.
71
+ const R1Interval& operator[](int i) const { return bounds_[i]; }
72
+ R1Interval& operator[](int i) { return bounds_[i]; }
73
+
74
+ // Return true if the rectangle is valid, which essentially just means
75
+ // that if the bound for either axis is empty then both must be.
76
+ bool is_valid() const;
77
+
78
+ // Return true if the rectangle is empty, i.e. it contains no points at all.
79
+ bool is_empty() const;
80
+
81
+ // Return the k-th vertex of the rectangle (k = 0,1,2,3) in CCW order.
82
+ // Vertex 0 is in the lower-left corner. For convenience, the argument is
83
+ // reduced modulo 4 to the range [0..3].
84
+ R2Point GetVertex(int k) const;
85
+
86
+ // Return the vertex in direction "i" along the x-axis (0=left, 1=right) and
87
+ // direction "j" along the y-axis (0=down, 1=up). Equivalently, return the
88
+ // vertex constructed by selecting endpoint "i" of the x-interval (0=lo,
89
+ // 1=hi) and vertex "j" of the y-interval.
90
+ R2Point GetVertex(int i, int j) const;
91
+
92
+ // Return the center of the rectangle in (x,y)-space.
93
+ R2Point GetCenter() const;
94
+
95
+ // Return the width and height of this rectangle in (x,y)-space. Empty
96
+ // rectangles have a negative width and height.
97
+ R2Point GetSize() const;
98
+
99
+ // Return true if the rectangle contains the given point. Note that
100
+ // rectangles are closed regions, i.e. they contain their boundary.
101
+ bool Contains(const R2Point& p) const;
102
+
103
+ // Return true if and only if the given point is contained in the interior
104
+ // of the region (i.e. the region excluding its boundary).
105
+ bool InteriorContains(const R2Point& p) const;
106
+
107
+ // Return true if and only if the rectangle contains the given other
108
+ // rectangle.
109
+ bool Contains(const R2Rect& other) const;
110
+
111
+ // Return true if and only if the interior of this rectangle contains all
112
+ // points of the given other rectangle (including its boundary).
113
+ bool InteriorContains(const R2Rect& other) const;
114
+
115
+ // Return true if this rectangle and the given other rectangle have any
116
+ // points in common.
117
+ bool Intersects(const R2Rect& other) const;
118
+
119
+ // Return true if and only if the interior of this rectangle intersects
120
+ // any point (including the boundary) of the given other rectangle.
121
+ bool InteriorIntersects(const R2Rect& other) const;
122
+
123
+ // Expand the rectangle to include the given point. The rectangle is
124
+ // expanded by the minimum amount possible.
125
+ void AddPoint(const R2Point& p);
126
+
127
+ // Expand the rectangle to include the given other rectangle. This is the
128
+ // same as replacing the rectangle by the union of the two rectangles, but
129
+ // is somewhat more efficient.
130
+ void AddRect(const R2Rect& other);
131
+
132
+ // Return the closest point in the rectangle to the given point "p".
133
+ // The rectangle must be non-empty.
134
+ R2Point Project(const R2Point& p) const;
135
+
136
+ // Return a rectangle that has been expanded on each side in the x-direction
137
+ // by margin.x(), and on each side in the y-direction by margin.y(). If
138
+ // either margin is empty, then shrink the interval on the corresponding
139
+ // sides instead. The resulting rectangle may be empty. Any expansion of
140
+ // an empty rectangle remains empty.
141
+ R2Rect Expanded(const R2Point& margin) const;
142
+ R2Rect Expanded(double margin) const;
143
+
144
+ // Return the smallest rectangle containing the union of this rectangle and
145
+ // the given rectangle.
146
+ R2Rect Union(const R2Rect& other) const;
147
+
148
+ // Return the smallest rectangle containing the intersection of this
149
+ // rectangle and the given rectangle.
150
+ R2Rect Intersection(const R2Rect& other) const;
151
+
152
+ // Return true if two rectangles contains the same set of points.
153
+ bool operator==(const R2Rect& other) const;
154
+
155
+ // Return true if the x- and y-intervals of the two rectangles are the same
156
+ // up to the given tolerance (see r1interval.h for details).
157
+ bool ApproxEquals(const R2Rect& other, double max_error = 1e-15) const;
158
+
159
+ private:
160
+ R1Interval bounds_[2];
161
+ };
162
+
163
+ inline R2Rect::R2Rect(const R2Point& lo, const R2Point& hi) {
164
+ bounds_[0] = R1Interval(lo.x(), hi.x());
165
+ bounds_[1] = R1Interval(lo.y(), hi.y());
166
+ S2_DCHECK(is_valid());
167
+ }
168
+
169
+ inline R2Rect::R2Rect(const R1Interval& x, const R1Interval& y) {
170
+ bounds_[0] = x;
171
+ bounds_[1] = y;
172
+ S2_DCHECK(is_valid());
173
+ }
174
+
175
+ inline R2Rect::R2Rect() {
176
+ // The default R1Interval constructor creates an empty interval.
177
+ S2_DCHECK(is_valid());
178
+ }
179
+
180
+ inline R2Rect R2Rect::Empty() {
181
+ return R2Rect(R1Interval::Empty(), R1Interval::Empty());
182
+ }
183
+
184
+ inline bool R2Rect::is_valid() const {
185
+ // The x/y ranges must either be both empty or both non-empty.
186
+ return x().is_empty() == y().is_empty();
187
+ }
188
+
189
+ inline bool R2Rect::is_empty() const {
190
+ return x().is_empty();
191
+ }
192
+
193
+ inline R2Rect R2Rect::FromPoint(const R2Point& p) {
194
+ return R2Rect(p, p);
195
+ }
196
+
197
+ inline R2Point R2Rect::GetVertex(int k) const {
198
+ // Twiddle bits to return the points in CCW order (lower left, lower right,
199
+ // upper right, upper left).
200
+ int j = (k >> 1) & 1;
201
+ return GetVertex(j ^ (k & 1), j);
202
+ }
203
+
204
+ inline R2Point R2Rect::GetVertex(int i, int j) const {
205
+ return R2Point(bounds_[0][i], bounds_[1][j]);
206
+ }
207
+
208
+ inline R2Point R2Rect::GetCenter() const {
209
+ return R2Point(x().GetCenter(), y().GetCenter());
210
+ }
211
+
212
+ inline R2Point R2Rect::GetSize() const {
213
+ return R2Point(x().GetLength(), y().GetLength());
214
+ }
215
+
216
+ inline bool R2Rect::Contains(const R2Point& p) const {
217
+ return x().Contains(p.x()) && y().Contains(p.y());
218
+ }
219
+
220
+ inline bool R2Rect::InteriorContains(const R2Point& p) const {
221
+ return x().InteriorContains(p.x()) && y().InteriorContains(p.y());
222
+ }
223
+
224
+ inline R2Rect R2Rect::Expanded(double margin) const {
225
+ return Expanded(R2Point(margin, margin));
226
+ }
227
+
228
+ inline bool R2Rect::operator==(const R2Rect& other) const {
229
+ return x() == other.x() && y() == other.y();
230
+ }
231
+
232
+ std::ostream& operator<<(std::ostream& os, const R2Rect& r);
233
+
234
+ #endif // S2_R2RECT_H_
@@ -0,0 +1,228 @@
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
+ // Most of the R2Rect methods have trivial implementations in terms of the
19
+ // R1Interval class, so most of the testing is done in that unit test.
20
+
21
+ #include "s2/r2rect.h"
22
+
23
+ #include <gtest/gtest.h>
24
+ #include "s2/r2.h"
25
+
26
+ static void TestIntervalOps(const R2Rect& x, const R2Rect& y,
27
+ const char* expected_rexion,
28
+ const R2Rect& expected_union,
29
+ const R2Rect& expected_intersection) {
30
+ // Test all of the interval operations on the given pair of intervals.
31
+ // "expected_rexion" is a sequence of "T" and "F" characters corresponding
32
+ // to the expected results of Contains(), InteriorContains(), Intersects(),
33
+ // and InteriorIntersects() respectively.
34
+
35
+ EXPECT_EQ(expected_rexion[0] == 'T', x.Contains(y));
36
+ EXPECT_EQ(expected_rexion[1] == 'T', x.InteriorContains(y));
37
+ EXPECT_EQ(expected_rexion[2] == 'T', x.Intersects(y));
38
+ EXPECT_EQ(expected_rexion[3] == 'T', x.InteriorIntersects(y));
39
+
40
+ EXPECT_EQ(x.Union(y) == x, x.Contains(y));
41
+ EXPECT_EQ(!x.Intersection(y).is_empty(), x.Intersects(y));
42
+
43
+ EXPECT_EQ(expected_union, x.Union(y));
44
+ EXPECT_EQ(expected_intersection, x.Intersection(y));
45
+
46
+ R2Rect r = x;
47
+ r.AddRect(y);
48
+ EXPECT_EQ(expected_union, r);
49
+ if (y.GetSize() == R2Point(0, 0)) {
50
+ r = x;
51
+ r.AddPoint(y.lo());
52
+ EXPECT_EQ(expected_union, r);
53
+ }
54
+ }
55
+
56
+ TEST(R2Rect, EmptyRectangles) {
57
+ // Test basic properties of empty rectangles.
58
+ R2Rect empty = R2Rect::Empty();
59
+ EXPECT_TRUE(empty.is_valid());
60
+ EXPECT_TRUE(empty.is_empty());
61
+ }
62
+
63
+ TEST(R2Rect, ConstructorsAndAccessors) {
64
+ // Check various constructors and accessor methods.
65
+ R2Rect r = R2Rect(R2Point(0.1, 0), R2Point(0.25, 1));
66
+ EXPECT_EQ(0.1, r.x().lo());
67
+ EXPECT_EQ(0.25, r.x().hi());
68
+ EXPECT_EQ(0.0, r.y().lo());
69
+ EXPECT_EQ(1.0, r.y().hi());
70
+
71
+ EXPECT_EQ(0.1, r[0][0]);
72
+ EXPECT_EQ(0.25, r[0][1]);
73
+ EXPECT_EQ(0.0, r[1][0]);
74
+ EXPECT_EQ(1.0, r[1][1]);
75
+
76
+ EXPECT_EQ(R1Interval(0.1, 0.25), r.x());
77
+ EXPECT_EQ(R1Interval(0, 1), r.y());
78
+
79
+ EXPECT_EQ(R1Interval(0.1, 0.25), r[0]);
80
+ EXPECT_EQ(R1Interval(0, 1), r[1]);
81
+
82
+ r[0] = R1Interval(3, 4);
83
+ r[1][0] = 5;
84
+ r[1][1] = 6;
85
+ EXPECT_EQ(R1Interval(3, 4), r[0]);
86
+ EXPECT_EQ(R1Interval(5, 6), r[1]);
87
+
88
+ R2Rect r2;
89
+ EXPECT_TRUE(r2.is_empty());
90
+ }
91
+
92
+ TEST(R2Rect, FromCenterSize) {
93
+ // FromCenterSize()
94
+ EXPECT_TRUE(R2Rect::FromCenterSize(R2Point(0.3, 0.5), R2Point(0.2, 0.4)).
95
+ ApproxEquals(R2Rect(R2Point(0.2, 0.3), R2Point(0.4, 0.7))));
96
+ EXPECT_TRUE(R2Rect::FromCenterSize(R2Point(1, 0.1), R2Point(0, 2)).
97
+ ApproxEquals(R2Rect(R2Point(1, -0.9), R2Point(1, 1.1))));
98
+ }
99
+
100
+ TEST(R2Rect, FromPoint) {
101
+ // FromPoint(), FromPointPair()
102
+ R2Rect d1 = R2Rect(R2Point(0.1, 0), R2Point(0.25, 1));
103
+ EXPECT_EQ(R2Rect(d1.lo(), d1.lo()), R2Rect::FromPoint(d1.lo()));
104
+ EXPECT_EQ(R2Rect(R2Point(0.15, 0.3), R2Point(0.35, 0.9)),
105
+ R2Rect::FromPointPair(R2Point(0.15, 0.9), R2Point(0.35, 0.3)));
106
+ EXPECT_EQ(R2Rect(R2Point(0.12, 0), R2Point(0.83, 0.5)),
107
+ R2Rect::FromPointPair(R2Point(0.83, 0), R2Point(0.12, 0.5)));
108
+ }
109
+
110
+ TEST(R2Rect, SimplePredicates) {
111
+ // GetCenter(), GetVertex(), Contains(R2Point), InteriorContains(R2Point).
112
+ R2Point sw1 = R2Point(0, 0.25);
113
+ R2Point ne1 = R2Point(0.5, 0.75);
114
+ R2Rect r1(sw1, ne1);
115
+
116
+ EXPECT_EQ(R2Point(0.25, 0.5), r1.GetCenter());
117
+ EXPECT_EQ(R2Point(0, 0.25), r1.GetVertex(0));
118
+ EXPECT_EQ(R2Point(0.5, 0.25), r1.GetVertex(1));
119
+ EXPECT_EQ(R2Point(0.5, 0.75), r1.GetVertex(2));
120
+ EXPECT_EQ(R2Point(0, 0.75), r1.GetVertex(3));
121
+ EXPECT_TRUE(r1.Contains(R2Point(0.2, 0.4)));
122
+ EXPECT_FALSE(r1.Contains(R2Point(0.2, 0.8)));
123
+ EXPECT_FALSE(r1.Contains(R2Point(-0.1, 0.4)));
124
+ EXPECT_FALSE(r1.Contains(R2Point(0.6, 0.1)));
125
+ EXPECT_TRUE(r1.Contains(sw1));
126
+ EXPECT_TRUE(r1.Contains(ne1));
127
+ EXPECT_FALSE(r1.InteriorContains(sw1));
128
+ EXPECT_FALSE(r1.InteriorContains(ne1));
129
+
130
+ // Make sure that GetVertex() returns vertices in CCW order.
131
+ for (int k = 0; k < 4; ++k) {
132
+ R2Point a = r1.GetVertex(k - 1);
133
+ R2Point b = r1.GetVertex(k);
134
+ R2Point c = r1.GetVertex(k + 1);
135
+ EXPECT_GT((b - a).Ortho().DotProd(c - a), 0);
136
+ }
137
+ }
138
+
139
+ TEST(R2Rect, IntervalOperations) {
140
+ // Contains(R2Rect), InteriorContains(R2Rect),
141
+ // Intersects(), InteriorIntersects(), Union(), Intersection().
142
+ //
143
+ // Much more testing of these methods is done in s1interval_test
144
+ // and r1interval_test.
145
+
146
+ R2Rect empty = R2Rect::Empty();
147
+ R2Point sw1 = R2Point(0, 0.25);
148
+ R2Point ne1 = R2Point(0.5, 0.75);
149
+ R2Rect r1(sw1, ne1);
150
+ R2Rect r1_mid = R2Rect(R2Point(0.25, 0.5), R2Point(0.25, 0.5));
151
+ R2Rect r_sw1(sw1, sw1);
152
+ R2Rect r_ne1(ne1, ne1);
153
+
154
+ TestIntervalOps(r1, r1_mid, "TTTT", r1, r1_mid);
155
+ TestIntervalOps(r1, r_sw1, "TFTF", r1, r_sw1);
156
+ TestIntervalOps(r1, r_ne1, "TFTF", r1, r_ne1);
157
+
158
+ EXPECT_EQ(R2Rect(R2Point(0, 0.25), R2Point(0.5, 0.75)), r1);
159
+ TestIntervalOps(r1, R2Rect(R2Point(0.45, 0.1), R2Point(0.75, 0.3)), "FFTT",
160
+ R2Rect(R2Point(0, 0.1), R2Point(0.75, 0.75)),
161
+ R2Rect(R2Point(0.45, 0.25), R2Point(0.5, 0.3)));
162
+ TestIntervalOps(r1, R2Rect(R2Point(0.5, 0.1), R2Point(0.7, 0.3)), "FFTF",
163
+ R2Rect(R2Point(0, 0.1), R2Point(0.7, 0.75)),
164
+ R2Rect(R2Point(0.5, 0.25), R2Point(0.5, 0.3)));
165
+ TestIntervalOps(r1, R2Rect(R2Point(0.45, 0.1), R2Point(0.7, 0.25)), "FFTF",
166
+ R2Rect(R2Point(0, 0.1), R2Point(0.7, 0.75)),
167
+ R2Rect(R2Point(0.45, 0.25), R2Point(0.5, 0.25)));
168
+
169
+ TestIntervalOps(R2Rect(R2Point(0.1, 0.2), R2Point(0.1, 0.3)),
170
+ R2Rect(R2Point(0.15, 0.7), R2Point(0.2, 0.8)), "FFFF",
171
+ R2Rect(R2Point(0.1, 0.2), R2Point(0.2, 0.8)),
172
+ empty);
173
+
174
+ // Check that the intersection of two rectangles that overlap in x but not y
175
+ // is valid, and vice versa.
176
+ TestIntervalOps(R2Rect(R2Point(0.1, 0.2), R2Point(0.4, 0.5)),
177
+ R2Rect(R2Point(0, 0), R2Point(0.2, 0.1)), "FFFF",
178
+ R2Rect(R2Point(0, 0), R2Point(0.4, 0.5)), empty);
179
+ TestIntervalOps(R2Rect(R2Point(0, 0), R2Point(0.1, 0.3)),
180
+ R2Rect(R2Point(0.2, 0.1), R2Point(0.3, 0.4)), "FFFF",
181
+ R2Rect(R2Point(0, 0), R2Point(0.3, 0.4)), empty);
182
+ }
183
+
184
+ TEST(R2Rect, AddPoint) {
185
+ // AddPoint()
186
+ R2Point sw1 = R2Point(0, 0.25);
187
+ R2Point ne1 = R2Point(0.5, 0.75);
188
+ R2Rect r1(sw1, ne1);
189
+
190
+ R2Rect r2 = R2Rect::Empty();
191
+ r2.AddPoint(R2Point(0, 0.25));
192
+ r2.AddPoint(R2Point(0.5, 0.25));
193
+ r2.AddPoint(R2Point(0, 0.75));
194
+ r2.AddPoint(R2Point(0.1, 0.4));
195
+ EXPECT_EQ(r1, r2);
196
+ }
197
+
198
+ TEST(R2Rect, Project) {
199
+ R2Rect r1(R1Interval(0, 0.5), R1Interval(0.25, 0.75));
200
+
201
+ EXPECT_EQ(R2Point(0, 0.25), r1.Project(R2Point(-0.01, 0.24)));
202
+ EXPECT_EQ(R2Point(0, 0.48), r1.Project(R2Point(-5.0, 0.48)));
203
+ EXPECT_EQ(R2Point(0, 0.75), r1.Project(R2Point(-5.0, 2.48)));
204
+ EXPECT_EQ(R2Point(0.19, 0.75), r1.Project(R2Point(0.19, 2.48)));
205
+ EXPECT_EQ(R2Point(0.5, 0.75), r1.Project(R2Point(6.19, 2.48)));
206
+ EXPECT_EQ(R2Point(0.5, 0.53), r1.Project(R2Point(6.19, 0.53)));
207
+ EXPECT_EQ(R2Point(0.5, 0.25), r1.Project(R2Point(6.19, -2.53)));
208
+ EXPECT_EQ(R2Point(0.33, 0.25), r1.Project(R2Point(0.33, -2.53)));
209
+ EXPECT_EQ(R2Point(0.33, 0.37), r1.Project(R2Point(0.33, 0.37)));
210
+ }
211
+
212
+ TEST(R2Rect, Expanded) {
213
+ // Expanded()
214
+ EXPECT_TRUE(R2Rect::Empty().Expanded(R2Point(0.1, 0.3)).is_empty());
215
+ EXPECT_TRUE(R2Rect::Empty().Expanded(R2Point(-0.1, -0.3)).is_empty());
216
+ EXPECT_TRUE(R2Rect(R2Point(0.2, 0.4), R2Point(0.3, 0.7)).
217
+ Expanded(R2Point(0.1, 0.3)).
218
+ ApproxEquals(R2Rect(R2Point(0.1, 0.1), R2Point(0.4, 1.0))));
219
+ EXPECT_TRUE(R2Rect(R2Point(0.2, 0.4), R2Point(0.3, 0.7)).
220
+ Expanded(R2Point(-0.1, 0.3)).is_empty());
221
+ EXPECT_TRUE(R2Rect(R2Point(0.2, 0.4), R2Point(0.3, 0.7)).
222
+ Expanded(R2Point(0.1, -0.2)).is_empty());
223
+ EXPECT_TRUE(R2Rect(R2Point(0.2, 0.4), R2Point(0.3, 0.7)).
224
+ Expanded(R2Point(0.1, -0.1)).
225
+ ApproxEquals(R2Rect(R2Point(0.1, 0.5), R2Point(0.4, 0.6))));
226
+ EXPECT_TRUE(R2Rect(R2Point(0.2, 0.4), R2Point(0.3, 0.7)).Expanded(0.1).
227
+ ApproxEquals(R2Rect(R2Point(0.1, 0.3), R2Point(0.4, 0.8))));
228
+ }
@@ -0,0 +1,54 @@
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/s1angle.h"
19
+
20
+ #include <cmath>
21
+ #include <cstdio>
22
+ #include <ostream>
23
+
24
+ #include "s2/s2latlng.h"
25
+
26
+ S1Angle::S1Angle(const S2Point& x, const S2Point& y)
27
+ : radians_(x.Angle(y)) {
28
+ }
29
+
30
+ S1Angle::S1Angle(const S2LatLng& x, const S2LatLng& y)
31
+ : radians_(x.GetDistance(y).radians()) {
32
+ }
33
+
34
+ S1Angle S1Angle::Normalized() const {
35
+ S1Angle a(radians_);
36
+ a.Normalize();
37
+ return a;
38
+ }
39
+
40
+ void S1Angle::Normalize() {
41
+ radians_ = remainder(radians_, 2.0 * M_PI);
42
+ if (radians_ <= -M_PI) radians_ = M_PI;
43
+ }
44
+
45
+ std::ostream& operator<<(std::ostream& os, S1Angle a) {
46
+ double degrees = a.degrees();
47
+ char buffer[13];
48
+ int sz = snprintf(buffer, sizeof(buffer), "%.7f", degrees);
49
+ if (sz >= 0 && sz < sizeof(buffer)) {
50
+ return os << buffer;
51
+ } else {
52
+ return os << degrees;
53
+ }
54
+ }