@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,569 @@
1
+ // Copyright 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
+ // Simple classes to handle vectors in 2D, 3D, and 4D.
17
+ //
18
+ // Maintainers: Please be mindful of extreme degradations in unoptimized
19
+ // performance here.
20
+ #ifndef S2_UTIL_MATH_VECTOR_H_
21
+ #define S2_UTIL_MATH_VECTOR_H_
22
+
23
+ #include <algorithm>
24
+ #include <cmath>
25
+ #include <cstdlib>
26
+ #include <iosfwd>
27
+ #include <iostream> // NOLINT(readability/streams)
28
+ #include <limits>
29
+ #include <type_traits>
30
+
31
+ #include "s2/base/integral_types.h"
32
+ #include "s2/base/logging.h"
33
+ #include "s2/third_party/absl/base/macros.h"
34
+ #include "s2/third_party/absl/utility/utility.h"
35
+
36
+ template <typename T> class Vector2;
37
+ template <typename T> class Vector3;
38
+ template <typename T> class Vector4;
39
+
40
+ namespace util {
41
+ namespace math {
42
+ namespace internal_vector {
43
+
44
+ // CRTP base class for all Vector templates.
45
+ template <template <typename> class VecTemplate, typename T, std::size_t N>
46
+ class BasicVector {
47
+ using D = VecTemplate<T>;
48
+
49
+ protected:
50
+ // FloatType is the type returned by Norm() and Angle(). These methods are
51
+ // special because they return floating-point values even when VType is an
52
+ // integer.
53
+ typedef typename std::conditional<std::is_integral<T>::value,
54
+ double, T>::type FloatType;
55
+
56
+ using IdxSeqN = typename absl::make_index_sequence<N>;
57
+
58
+ template <std::size_t I, typename F, typename... As>
59
+ static auto Reduce(F f, As*... as)
60
+ -> decltype(f(as[I]...)) {
61
+ return f(as[I]...);
62
+ }
63
+
64
+ template <typename R = D, std::size_t... Is, typename F, typename... As>
65
+ static R GenerateEach(absl::index_sequence<Is...>, F f, As*... as) {
66
+ return R(Reduce<Is>(f, as...)...);
67
+ }
68
+
69
+ // Generate<R>(f,a,b,...) returns an R(...), where the constructor arguments
70
+ // are created as a transform. R(f(a[0],b[0],...), f(a[1],b[1],...), ...),
71
+ // and with a,b,... all optional.
72
+ template <typename R = D, typename F, typename... As>
73
+ static R Generate(F f, As&&... as) {
74
+ return GenerateEach<R>(IdxSeqN(), f, std::forward<As>(as).Data()...);
75
+ }
76
+
77
+ public:
78
+ enum { SIZE = N };
79
+ static int Size() { return SIZE; }
80
+
81
+ void Clear() { AsD() = D(); }
82
+
83
+ T& operator[](int b) {
84
+ S2_DCHECK_GE(b, 0);
85
+ S2_DCHECK_LT(b, SIZE);
86
+ return static_cast<D&>(*this).Data()[b];
87
+ }
88
+ T operator[](int b) const {
89
+ S2_DCHECK_GE(b, 0);
90
+ S2_DCHECK_LT(b, SIZE);
91
+ return static_cast<const D&>(*this).Data()[b];
92
+ }
93
+
94
+ // TODO(user): Relationals should be nonmembers.
95
+ bool operator==(const D& b) const {
96
+ const T* ap = static_cast<const D&>(*this).Data();
97
+ return std::equal(ap, ap + this->Size(), b.Data());
98
+ }
99
+ bool operator!=(const D& b) const { return !(AsD() == b); }
100
+ bool operator<(const D& b) const {
101
+ const T* ap = static_cast<const D&>(*this).Data();
102
+ const T* bp = b.Data();
103
+ return std::lexicographical_compare(
104
+ ap, ap + this->Size(), bp, bp + b.Size());
105
+ }
106
+ bool operator>(const D& b) const { return b < AsD(); }
107
+ bool operator<=(const D& b) const { return !(AsD() > b); }
108
+ bool operator>=(const D& b) const { return !(AsD() < b); }
109
+
110
+ D& operator+=(const D& b) {
111
+ PlusEq(static_cast<D&>(*this).Data(), b.Data(), IdxSeqN{});
112
+ return static_cast<D&>(*this);
113
+ }
114
+
115
+ D& operator-=(const D& b) {
116
+ MinusEq(static_cast<D&>(*this).Data(), b.Data(), IdxSeqN{});
117
+ return static_cast<D&>(*this);
118
+ }
119
+
120
+ D& operator*=(T k) {
121
+ MulEq(static_cast<D&>(*this).Data(), k, IdxSeqN{});
122
+ return static_cast<D&>(*this);
123
+ }
124
+
125
+ D& operator/=(T k) {
126
+ DivEq(static_cast<D&>(*this).Data(), k, IdxSeqN{});
127
+ return static_cast<D&>(*this);
128
+ }
129
+
130
+ D operator+(const D& b) const { return D(AsD()) += b; }
131
+ D operator-(const D& b) const { return D(AsD()) -= b; }
132
+ D operator*(T k) const { return D(AsD()) *= k; }
133
+ D operator/(T k) const { return D(AsD()) /= k; }
134
+
135
+ friend D operator-(const D& a) {
136
+ return Generate([](const T& x) { return -x; }, a);
137
+ }
138
+
139
+ // Convert from another vector type
140
+ template <typename T2>
141
+ static D Cast(const VecTemplate<T2> &b) {
142
+ return Generate([](const T2& x) { return static_cast<T>(x); }, b);
143
+ }
144
+
145
+ // multiply two vectors component by component
146
+ D MulComponents(const D &b) const {
147
+ return Generate([](const T& x, const T& y) { return x * y; }, AsD(), b);
148
+ }
149
+ // divide two vectors component by component
150
+ D DivComponents(const D &b) const {
151
+ return Generate([](const T& x, const T& y) { return x / y; }, AsD(), b);
152
+ }
153
+
154
+ // Element-wise max. {max(a[0],b[0]), max(a[1],b[1]), ...}
155
+ friend D Max(const D &a, const D &b) {
156
+ return Generate([](const T& x, const T& y) {
157
+ return std::max(x, y);
158
+ }, a, b);
159
+ }
160
+
161
+ // Element-wise min. {min(a[0],b[0]), min(a[1],b[1]), ...}
162
+ friend D Min(const D &a, const D &b) {
163
+ return Generate([](const T& x, const T& y) {
164
+ return std::min(x, y);
165
+ }, a, b);
166
+ }
167
+
168
+ T DotProd(const D& b) const {
169
+ return Dot(static_cast<T>(0), static_cast<const D&>(*this).Data(), b.Data(),
170
+ IdxSeqN{});
171
+ }
172
+
173
+ // Squared Euclidean norm (the dot product with itself).
174
+ T Norm2() const { return DotProd(AsD()); }
175
+
176
+ // Euclidean norm. For integer T, correct only if Norm2 does not overflow.
177
+ FloatType Norm() const {
178
+ using std::sqrt;
179
+ return sqrt(Norm2());
180
+ }
181
+
182
+ // Normalized vector if the norm is nonzero. Not for integer types.
183
+ D Normalize() const {
184
+ static_assert(!std::is_integral<T>::value, "must be floating point");
185
+ T n = Norm();
186
+ if (n != T(0.0)) {
187
+ n = T(1.0) / n;
188
+ }
189
+ return D(AsD()) *= n;
190
+ }
191
+
192
+ // Compose a vector from the sqrt of each component.
193
+ D Sqrt() const {
194
+ return Generate([](const T& x) {
195
+ using std::sqrt;
196
+ return sqrt(x);
197
+ }, AsD());
198
+ }
199
+
200
+ // Take the floor of each component.
201
+ D Floor() const {
202
+ return Generate([](const T& x) { return floor(x); }, AsD());
203
+ }
204
+
205
+ // Take the ceil of each component.
206
+ D Ceil() const {
207
+ return Generate([](const T& x) { return ceil(x); }, AsD());
208
+ }
209
+
210
+ // Round of each component.
211
+ D FRound() const {
212
+ using std::rint;
213
+ return Generate([](const T& x) { return rint(x); }, AsD());
214
+ }
215
+
216
+ // Round of each component and return an integer vector.
217
+ VecTemplate<int> IRound() const {
218
+ using std::lrint;
219
+ return Generate<VecTemplate<int>>([](const T& x) { return lrint(x); },
220
+ AsD());
221
+ }
222
+
223
+ // True if any of the components is not a number.
224
+ bool IsNaN() const {
225
+ bool r = false;
226
+ const T* ap = AsD().Data();
227
+ for (int i = 0; i < SIZE; ++i)
228
+ r = r || std::isnan(ap[i]);
229
+ return r;
230
+ }
231
+
232
+ // A Vector populated with all NaN values.
233
+ static D NaN() {
234
+ return Generate([] { return std::numeric_limits<T>::quiet_NaN(); });
235
+ }
236
+
237
+ friend std::ostream& operator<<(std::ostream& out, const D& v) {
238
+ out << "[";
239
+ const char *sep = "";
240
+ for (int i = 0; i < SIZE; ++i) {
241
+ out << sep;
242
+ Print(out, v[i]);
243
+ sep = ", ";
244
+ }
245
+ return out << "]";
246
+ }
247
+
248
+ // These are only public for technical reasons (see cl/121145822).
249
+ template <typename K>
250
+ D MulScalarInternal(const K& k) const {
251
+ return Generate([k](const T& x) { return k * x; }, AsD());
252
+ }
253
+ template <typename K>
254
+ D DivScalarInternal(const K& k) const {
255
+ return Generate([k](const T& x) { return k / x; }, AsD());
256
+ }
257
+
258
+ private:
259
+ const D& AsD() const { return static_cast<const D&>(*this); }
260
+ D& AsD() { return static_cast<D&>(*this); }
261
+
262
+ // ostream << uint8 prints the ASCII character, which is not useful.
263
+ // Cast to int so that numbers will be printed instead.
264
+ template <typename U>
265
+ static void Print(std::ostream& out, const U& v) { out << v; }
266
+ static void Print(std::ostream& out, uint8 v) { out << static_cast<int>(v); }
267
+
268
+ // Ignores its arguments so that side-effects of variadic unpacking can occur.
269
+ static void Ignore(std::initializer_list<bool>) {}
270
+
271
+ template <std::size_t... Is>
272
+ static T Dot(T sum, const T* a, const T* b, absl::index_sequence<Is...>) {
273
+ Ignore({(sum += a[Is] * b[Is], true)...});
274
+ return sum;
275
+ }
276
+
277
+ template <std::size_t... Is>
278
+ static void PlusEq(T* a, const T* b, absl::index_sequence<Is...>) {
279
+ Ignore({(a[Is] += b[Is], true)...});
280
+ }
281
+
282
+ template <std::size_t... Is>
283
+ static void MinusEq(T* a, const T* b, absl::index_sequence<Is...>) {
284
+ Ignore({(a[Is] -= b[Is], true)...});
285
+ }
286
+
287
+ template <std::size_t... Is>
288
+ static void MulEq(T* a, T b, absl::index_sequence<Is...>) {
289
+ Ignore({(a[Is] *= b, true)...});
290
+ }
291
+
292
+ template <std::size_t... Is>
293
+ static void DivEq(T* a, T b, absl::index_sequence<Is...>) {
294
+ Ignore({(a[Is] /= b, true)...});
295
+ }
296
+ };
297
+
298
+ // These templates must be defined outside of BasicVector so that the
299
+ // template specialization match algorithm must deduce 'a'. See the review
300
+ // of cl/119944115.
301
+ template <typename K,
302
+ template <typename> class VT2, typename T2, std::size_t N2>
303
+ VT2<T2> operator*(const K& k, const BasicVector<VT2, T2, N2>& a) {
304
+ return a.MulScalarInternal(k);
305
+ }
306
+ template <typename K,
307
+ template <typename> class VT2, typename T2, std::size_t N2>
308
+ VT2<T2> operator/(const K& k, const BasicVector<VT2, T2, N2>& a) {
309
+ return a.DivScalarInternal(k);
310
+ }
311
+
312
+ } // namespace internal_vector
313
+ } // namespace math
314
+ } // namespace util
315
+
316
+ // ======================================================================
317
+ template <typename T>
318
+ class Vector2
319
+ : public util::math::internal_vector::BasicVector<Vector2, T, 2> {
320
+ private:
321
+ using Base = util::math::internal_vector::BasicVector<::Vector2, T, 2>;
322
+ using VType = T;
323
+
324
+ public:
325
+ typedef VType BaseType;
326
+ using FloatType = typename Base::FloatType;
327
+ using Base::SIZE;
328
+
329
+ Vector2() : c_() {}
330
+ Vector2(T x, T y) {
331
+ c_[0] = x;
332
+ c_[1] = y;
333
+ }
334
+ explicit Vector2(const Vector3<T> &b) : Vector2(b.x(), b.y()) {}
335
+ explicit Vector2(const Vector4<T> &b) : Vector2(b.x(), b.y()) {}
336
+
337
+ T* Data() { return c_; }
338
+ const T* Data() const { return c_; }
339
+
340
+ void x(T v) { c_[0] = v; }
341
+ void y(T v) { c_[1] = v; }
342
+ T x() const { return c_[0]; }
343
+ T y() const { return c_[1]; }
344
+
345
+ bool aequal(const Vector2 &vb, FloatType margin) const {
346
+ using std::fabs;
347
+ return (fabs(c_[0]-vb.c_[0]) < margin) && (fabs(c_[1]-vb.c_[1]) < margin);
348
+ }
349
+
350
+ void Set(T x, T y) { *this = Vector2(x, y); }
351
+
352
+ // Cross product. Be aware that if T is an integer type, the high bits
353
+ // of the result are silently discarded.
354
+ T CrossProd(const Vector2 &vb) const {
355
+ return c_[0] * vb.c_[1] - c_[1] * vb.c_[0];
356
+ }
357
+
358
+ // Returns the angle between "this" and v in radians. If either vector is
359
+ // zero-length, or nearly zero-length, the result will be zero, regardless of
360
+ // the other value.
361
+ FloatType Angle(const Vector2 &v) const {
362
+ using std::atan2;
363
+ return atan2(CrossProd(v), this->DotProd(v));
364
+ }
365
+
366
+ // return a vector orthogonal to the current one
367
+ // with the same norm and counterclockwise to it
368
+ Vector2 Ortho() const { return Vector2(-c_[1], c_[0]); }
369
+
370
+ // TODO(user): unify Fabs/Abs between all Vector classes.
371
+ Vector2 Fabs() const {
372
+ using std::fabs;
373
+ return Vector2(fabs(c_[0]), fabs(c_[1]));
374
+ }
375
+ Vector2 Abs() const {
376
+ static_assert(std::is_integral<VType>::value, "use Fabs for float_types");
377
+ static_assert(static_cast<VType>(-1) == -1, "type must be signed");
378
+ static_assert(sizeof(c_[0]) <= sizeof(int), "Abs truncates to int");
379
+ return Vector2(abs(c_[0]), abs(c_[1]));
380
+ }
381
+
382
+ private:
383
+ VType c_[SIZE];
384
+ };
385
+
386
+ template <typename T>
387
+ class Vector3
388
+ : public util::math::internal_vector::BasicVector<Vector3, T, 3> {
389
+ private:
390
+ using Base = util::math::internal_vector::BasicVector<::Vector3, T, 3>;
391
+ using VType = T;
392
+
393
+ public:
394
+ typedef VType BaseType;
395
+ using FloatType = typename Base::FloatType;
396
+ using Base::SIZE;
397
+
398
+ Vector3() : c_() {}
399
+ Vector3(T x, T y, T z) {
400
+ c_[0] = x;
401
+ c_[1] = y;
402
+ c_[2] = z;
403
+ }
404
+ Vector3(const Vector2<T> &b, T z) : Vector3(b.x(), b.y(), z) {}
405
+ explicit Vector3(const Vector4<T> &b) : Vector3(b.x(), b.y(), b.z()) {}
406
+
407
+ T* Data() { return c_; }
408
+ const T* Data() const { return c_; }
409
+
410
+ void x(const T &v) { c_[0] = v; }
411
+ void y(const T &v) { c_[1] = v; }
412
+ void z(const T &v) { c_[2] = v; }
413
+ T x() const { return c_[0]; }
414
+ T y() const { return c_[1]; }
415
+ T z() const { return c_[2]; }
416
+
417
+ bool aequal(const Vector3 &vb, FloatType margin) const {
418
+ using std::abs;
419
+ return (abs(c_[0] - vb.c_[0]) < margin)
420
+ && (abs(c_[1] - vb.c_[1]) < margin)
421
+ && (abs(c_[2] - vb.c_[2]) < margin);
422
+ }
423
+
424
+ void Set(T x, T y, T z) { *this = Vector3(x, y, z); }
425
+
426
+ // Cross product. Be aware that if VType is an integer type, the high bits
427
+ // of the result are silently discarded.
428
+ Vector3 CrossProd(const Vector3& vb) const {
429
+ return Vector3(c_[1] * vb.c_[2] - c_[2] * vb.c_[1],
430
+ c_[2] * vb.c_[0] - c_[0] * vb.c_[2],
431
+ c_[0] * vb.c_[1] - c_[1] * vb.c_[0]);
432
+ }
433
+
434
+ // Returns a unit vector orthogonal to this one.
435
+ Vector3 Ortho() const {
436
+ int k = LargestAbsComponent() - 1;
437
+ if (k < 0) k = 2;
438
+ Vector3 temp;
439
+ temp[k] = T(1);
440
+ return CrossProd(temp).Normalize();
441
+ }
442
+
443
+ // Returns the angle between two vectors in radians. If either vector is
444
+ // zero-length, or nearly zero-length, the result will be zero, regardless of
445
+ // the other value.
446
+ FloatType Angle(const Vector3 &va) const {
447
+ using std::atan2;
448
+ return atan2(CrossProd(va).Norm(), this->DotProd(va));
449
+ }
450
+
451
+ Vector3 Fabs() const {
452
+ return Abs();
453
+ }
454
+
455
+ Vector3 Abs() const {
456
+ static_assert(
457
+ !std::is_integral<VType>::value || static_cast<VType>(-1) == -1,
458
+ "type must be signed");
459
+ using std::abs;
460
+ return Vector3(abs(c_[0]), abs(c_[1]), abs(c_[2]));
461
+ }
462
+
463
+ // return the index of the largest component (fabs)
464
+ int LargestAbsComponent() const {
465
+ Vector3 temp = Abs();
466
+ return temp[0] > temp[1] ?
467
+ temp[0] > temp[2] ? 0 : 2 :
468
+ temp[1] > temp[2] ? 1 : 2;
469
+ }
470
+
471
+ // return the index of the smallest, median ,largest component of the vector
472
+ Vector3<int> ComponentOrder() const {
473
+ using std::swap;
474
+ Vector3<int> temp(0, 1, 2);
475
+ if (c_[temp[0]] > c_[temp[1]]) swap(temp[0], temp[1]);
476
+ if (c_[temp[1]] > c_[temp[2]]) swap(temp[1], temp[2]);
477
+ if (c_[temp[0]] > c_[temp[1]]) swap(temp[0], temp[1]);
478
+ return temp;
479
+ }
480
+
481
+ private:
482
+ VType c_[SIZE];
483
+ };
484
+
485
+ template <typename T>
486
+ class Vector4
487
+ : public util::math::internal_vector::BasicVector<Vector4, T, 4> {
488
+ private:
489
+ using Base = util::math::internal_vector::BasicVector<::Vector4, T, 4>;
490
+ using VType = T;
491
+
492
+ public:
493
+ typedef VType BaseType;
494
+ using FloatType = typename Base::FloatType;
495
+ using Base::SIZE;
496
+
497
+ Vector4() : c_() {}
498
+ Vector4(T x, T y, T z, T w) {
499
+ c_[0] = x;
500
+ c_[1] = y;
501
+ c_[2] = z;
502
+ c_[3] = w;
503
+ }
504
+
505
+ Vector4(const Vector2<T> &b, T z, T w)
506
+ : Vector4(b.x(), b.y(), z, w) {}
507
+ Vector4(const Vector2<T> &a, const Vector2<T> &b)
508
+ : Vector4(a.x(), a.y(), b.x(), b.y()) {}
509
+ Vector4(const Vector3<T> &b, T w)
510
+ : Vector4(b.x(), b.y(), b.z(), w) {}
511
+
512
+ T* Data() { return c_; }
513
+ const T* Data() const { return c_; }
514
+
515
+ bool aequal(const Vector4 &vb, FloatType margin) const {
516
+ using std::fabs;
517
+ return (fabs(c_[0] - vb.c_[0]) < margin)
518
+ && (fabs(c_[1] - vb.c_[1]) < margin)
519
+ && (fabs(c_[2] - vb.c_[2]) < margin)
520
+ && (fabs(c_[3] - vb.c_[3]) < margin);
521
+ }
522
+
523
+ void x(const T &v) { c_[0] = v; }
524
+ void y(const T &v) { c_[1] = v; }
525
+ void z(const T &v) { c_[2] = v; }
526
+ void w(const T &v) { c_[3] = v; }
527
+ T x() const { return c_[0]; }
528
+ T y() const { return c_[1]; }
529
+ T z() const { return c_[2]; }
530
+ T w() const { return c_[3]; }
531
+
532
+ void Set(T x, T y, T z, T w) { *this = Vector4(x, y, z, w); }
533
+
534
+ Vector4 Fabs() const {
535
+ using std::fabs;
536
+ return Vector4(fabs(c_[0]), fabs(c_[1]), fabs(c_[2]), fabs(c_[3]));
537
+ }
538
+
539
+ Vector4 Abs() const {
540
+ static_assert(std::is_integral<VType>::value, "use Fabs for float types");
541
+ static_assert(static_cast<VType>(-1) == -1, "type must be signed");
542
+ static_assert(sizeof(c_[0]) <= sizeof(int), "Abs truncates to int");
543
+ return Vector4(abs(c_[0]), abs(c_[1]), abs(c_[2]), abs(c_[3]));
544
+ }
545
+
546
+ private:
547
+ VType c_[SIZE];
548
+ };
549
+
550
+ typedef Vector2<uint8> Vector2_b;
551
+ typedef Vector2<int16> Vector2_s;
552
+ typedef Vector2<int> Vector2_i;
553
+ typedef Vector2<float> Vector2_f;
554
+ typedef Vector2<double> Vector2_d;
555
+
556
+ typedef Vector3<uint8> Vector3_b;
557
+ typedef Vector3<int16> Vector3_s;
558
+ typedef Vector3<int> Vector3_i;
559
+ typedef Vector3<float> Vector3_f;
560
+ typedef Vector3<double> Vector3_d;
561
+
562
+ typedef Vector4<uint8> Vector4_b;
563
+ typedef Vector4<int16> Vector4_s;
564
+ typedef Vector4<int> Vector4_i;
565
+ typedef Vector4<float> Vector4_f;
566
+ typedef Vector4<double> Vector4_d;
567
+
568
+
569
+ #endif // S2_UTIL_MATH_VECTOR_H_
@@ -0,0 +1,54 @@
1
+ // Copyright 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
+ #ifndef S2_UTIL_MATH_VECTOR3_HASH_H_
17
+ #define S2_UTIL_MATH_VECTOR3_HASH_H_
18
+
19
+ #include <cstddef>
20
+ #include <functional>
21
+ #include <type_traits>
22
+
23
+ #include "s2/util/hash/mix.h"
24
+ #include "s2/util/math/vector.h"
25
+
26
+ template <class T>
27
+ struct GoodFastHash;
28
+
29
+ template <class VType>
30
+ struct GoodFastHash<Vector2<VType>> {
31
+ std::size_t operator()(const Vector2<VType>& v) const {
32
+ static_assert(std::is_pod<VType>::value, "POD expected");
33
+ // std::hash collapses +/-0.
34
+ std::hash<VType> h;
35
+ HashMix mix(h(v.x()));
36
+ mix.Mix(h(v.y()));
37
+ return mix.get();
38
+ }
39
+ };
40
+
41
+ template <class VType>
42
+ struct GoodFastHash<Vector3<VType>> {
43
+ std::size_t operator()(const Vector3<VType>& v) const {
44
+ static_assert(std::is_pod<VType>::value, "POD expected");
45
+ // std::hash collapses +/-0.
46
+ std::hash<VType> h;
47
+ HashMix mix(h(v.x()));
48
+ mix.Mix(h(v.y()));
49
+ mix.Mix(h(v.z()));
50
+ return mix.get();
51
+ }
52
+ };
53
+
54
+ #endif // S2_UTIL_MATH_VECTOR3_HASH_H_
@@ -0,0 +1,21 @@
1
+ // Copyright 2004 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
+
17
+ // Provide definitions for length unit constants
18
+
19
+ #include "s2/util/units/length-units.h"
20
+
21
+ const char * const util::units::LengthBase::output_suffix = "m";