@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,147 @@
1
+ // Copyright 2015 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/s2point_index.h"
19
+
20
+ #include <set>
21
+
22
+ #include <gtest/gtest.h>
23
+ #include "s2/s2cell_id.h"
24
+ #include "s2/s2cell_union.h"
25
+ #include "s2/s2testing.h"
26
+
27
+ class S2PointIndexTest : public ::testing::Test {
28
+ protected:
29
+ using Index = S2PointIndex<int>;
30
+ using PointData = Index::PointData;
31
+ using Contents = std::multiset<PointData>;
32
+ Index index_;
33
+ Contents contents_;
34
+
35
+ public:
36
+ void Add(const S2Point& point, int data) {
37
+ index_.Add(point, data);
38
+ contents_.insert(PointData(point, data));
39
+ }
40
+
41
+ void Remove(const S2Point& point, int data) {
42
+ // If there are multiple copies, remove only one.
43
+ contents_.erase(contents_.find(PointData(point, data)));
44
+ index_.Remove(point, data); // Invalidates "point".
45
+ }
46
+
47
+ void Verify() {
48
+ VerifyContents();
49
+ VerifyIteratorMethods();
50
+ }
51
+
52
+ void VerifyContents() {
53
+ Contents remaining = contents_;
54
+ for (Index::Iterator it(&index_); !it.done(); it.Next()) {
55
+ Contents::iterator element = remaining.find(it.point_data());
56
+ EXPECT_TRUE(element != remaining.end());
57
+ remaining.erase(element);
58
+ }
59
+ EXPECT_TRUE(remaining.empty());
60
+ }
61
+
62
+ void VerifyIteratorMethods() {
63
+ Index::Iterator it(&index_);
64
+ EXPECT_FALSE(it.Prev());
65
+ it.Finish();
66
+ EXPECT_TRUE(it.done());
67
+
68
+ // Iterate through all the cells in the index.
69
+ S2CellId prev_cellid = S2CellId::None();
70
+ S2CellId min_cellid = S2CellId::Begin(S2CellId::kMaxLevel);
71
+ for (it.Begin(); !it.done(); it.Next()) {
72
+ S2CellId cellid = it.id();
73
+ EXPECT_EQ(cellid, S2CellId(it.point()));
74
+ EXPECT_GE(cellid, prev_cellid);
75
+
76
+ typename Index::Iterator it2(&index_);
77
+ if (cellid == prev_cellid) {
78
+ it2.Seek(cellid);
79
+ }
80
+
81
+ // Generate a cellunion that covers the range of empty leaf cells between
82
+ // the last cell and this one. Then make sure that seeking to any of
83
+ // those cells takes us to the immediately following cell.
84
+ if (cellid > prev_cellid) {
85
+ for (S2CellId skipped : S2CellUnion::FromBeginEnd(min_cellid, cellid)) {
86
+ it2.Seek(skipped);
87
+ EXPECT_EQ(cellid, it2.id());
88
+ }
89
+ }
90
+ // Test Prev(), Next(), and Seek().
91
+ if (prev_cellid.is_valid()) {
92
+ it2 = it;
93
+ EXPECT_TRUE(it2.Prev());
94
+ EXPECT_EQ(prev_cellid, it2.id());
95
+ it2.Next();
96
+ EXPECT_EQ(cellid, it2.id());
97
+ it2.Seek(prev_cellid);
98
+ EXPECT_EQ(prev_cellid, it2.id());
99
+ }
100
+ prev_cellid = cellid;
101
+ min_cellid = cellid.next();
102
+ }
103
+ }
104
+ };
105
+
106
+ TEST_F(S2PointIndexTest, NoPoints) {
107
+ Verify();
108
+ }
109
+
110
+ TEST_F(S2PointIndexTest, DuplicatePoints) {
111
+ for (int i = 0; i < 10; ++i) {
112
+ Add(S2Point(1, 0, 0), 123); // All points have same Data argument.
113
+ }
114
+ Verify();
115
+ // Now remove half of the points.
116
+ for (int i = 0; i < 5; ++i) {
117
+ Remove(S2Point(1, 0, 0), 123);
118
+ }
119
+ Verify();
120
+ }
121
+
122
+ TEST_F(S2PointIndexTest, RandomPoints) {
123
+ for (int i = 0; i < 100; ++i) {
124
+ Add(S2Testing::RandomPoint(), S2Testing::rnd.Uniform(100));
125
+ }
126
+ Verify();
127
+ // Now remove some of the points.
128
+ for (int i = 0; i < 10; ++i) {
129
+ S2PointIndex<int>::Iterator it(&index_);
130
+ do {
131
+ it.Seek(S2Testing::GetRandomCellId(S2CellId::kMaxLevel));
132
+ } while (it.done());
133
+ Remove(it.point(), it.data());
134
+ Verify();
135
+ }
136
+ }
137
+
138
+ TEST(S2PointIndex, EmptyData) {
139
+ // Verify that when Data is an empty class, no space is used.
140
+ EXPECT_EQ(sizeof(S2Point), sizeof(S2PointIndex<>::PointData));
141
+
142
+ // Verify that points can be added and removed with an empty Data class.
143
+ S2PointIndex<> index;
144
+ index.Add(S2Point(1, 0, 0));
145
+ index.Remove(S2Point(1, 0, 0));
146
+ EXPECT_EQ(0, index.num_points());
147
+ }
@@ -0,0 +1,72 @@
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/s2point_region.h"
19
+
20
+ #include "s2/base/logging.h"
21
+ #include "s2/util/coding/coder.h"
22
+ #include "s2/s2cap.h"
23
+ #include "s2/s2cell.h"
24
+ #include "s2/s2latlng.h"
25
+ #include "s2/s2latlng_rect.h"
26
+ #include "s2/s2pointutil.h"
27
+
28
+ static const unsigned char kCurrentLosslessEncodingVersionNumber = 1;
29
+
30
+ S2PointRegion::~S2PointRegion() {
31
+ }
32
+
33
+ S2PointRegion* S2PointRegion::Clone() const {
34
+ return new S2PointRegion(point_);
35
+ }
36
+
37
+ S2Cap S2PointRegion::GetCapBound() const {
38
+ return S2Cap::FromPoint(point_);
39
+ }
40
+
41
+ S2LatLngRect S2PointRegion::GetRectBound() const {
42
+ S2LatLng ll(point_);
43
+ return S2LatLngRect(ll, ll);
44
+ }
45
+
46
+ bool S2PointRegion::MayIntersect(const S2Cell& cell) const {
47
+ return cell.Contains(point_);
48
+ }
49
+
50
+ void S2PointRegion::Encode(Encoder* encoder) const {
51
+ encoder->Ensure(30); // sufficient
52
+
53
+ encoder->put8(kCurrentLosslessEncodingVersionNumber);
54
+ for (int i = 0; i < 3; ++i) {
55
+ encoder->putdouble(point_[i]);
56
+ }
57
+ S2_DCHECK_GE(encoder->avail(), 0);
58
+ }
59
+
60
+ bool S2PointRegion::Decode(Decoder* decoder) {
61
+ if (decoder->avail() < sizeof(unsigned char) + 3 * sizeof(double))
62
+ return false;
63
+ unsigned char version = decoder->get8();
64
+ if (version > kCurrentLosslessEncodingVersionNumber) return false;
65
+
66
+ for (int i = 0; i < 3; ++i) {
67
+ point_[i] = decoder->getdouble();
68
+ }
69
+ if (!S2::IsUnitLength(point_)) return false;
70
+
71
+ return true;
72
+ }
@@ -0,0 +1,76 @@
1
+ // Copyright 2005 Google Inc. All Rights Reserved.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS-IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+
16
+ // Author: ericv@google.com (Eric Veach)
17
+
18
+ #ifndef S2_S2POINT_REGION_H_
19
+ #define S2_S2POINT_REGION_H_
20
+
21
+ #include "s2/base/logging.h"
22
+ #include "s2/_fp_contract_off.h"
23
+ #include "s2/s1angle.h"
24
+ #include "s2/s2pointutil.h"
25
+ #include "s2/s2region.h"
26
+ #include "s2/third_party/absl/base/macros.h"
27
+
28
+ class Decoder;
29
+ class Encoder;
30
+ class S2Cap;
31
+ class S2Cell;
32
+ class S2LatLngRect;
33
+
34
+ // An S2PointRegion is a region that contains a single point. It is more
35
+ // expensive than the raw S2Point type and is useful mainly for completeness.
36
+ //
37
+ // This class is intended to be copied by value as desired. It uses
38
+ // the default copy constructor and assignment operator.
39
+ class S2PointRegion final : public S2Region {
40
+ public:
41
+ // Create a region containing the given point, which must be unit length.
42
+ explicit S2PointRegion(const S2Point& point);
43
+
44
+ ~S2PointRegion() override;
45
+
46
+ const S2Point& point() const { return point_; }
47
+
48
+ ////////////////////////////////////////////////////////////////////////
49
+ // S2Region interface (see s2region.h for details):
50
+
51
+ S2PointRegion* Clone() const override;
52
+ S2Cap GetCapBound() const override;
53
+ S2LatLngRect GetRectBound() const override;
54
+ bool Contains(const S2Cell& cell) const override { return false; }
55
+ bool MayIntersect(const S2Cell& cell) const override;
56
+ bool Contains(const S2Point& p) const override { return (point_ == p); }
57
+
58
+ // Appends a serialized representation of the S2Point to "encoder".
59
+ //
60
+ // REQUIRES: "encoder" uses the default constructor, so that its buffer
61
+ // can be enlarged as necessary by calling Ensure(int).
62
+ void Encode(Encoder* const encoder) const;
63
+
64
+ // Decodes an S2Point encoded with Encode(). Returns true on success.
65
+ // (Returns false if the encoded point is not unit length.)
66
+ bool Decode(Decoder* const decoder);
67
+
68
+ private:
69
+ S2Point point_;
70
+ };
71
+
72
+ inline S2PointRegion::S2PointRegion(const S2Point& point) : point_(point) {
73
+ S2_DCHECK(S2::IsUnitLength(point));
74
+ }
75
+
76
+ #endif // S2_S2POINT_REGION_H_
@@ -0,0 +1,100 @@
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/s2point_region.h"
19
+
20
+ #include <memory>
21
+
22
+ #include <gtest/gtest.h>
23
+ #include "s2/util/coding/coder.h"
24
+ #include "s2/s2cap.h"
25
+ #include "s2/s2cell.h"
26
+ #include "s2/s2latlng.h"
27
+ #include "s2/s2latlng_rect.h"
28
+
29
+ using std::unique_ptr;
30
+
31
+ namespace {
32
+
33
+ TEST(S2PointRegionTest, Basic) {
34
+ S2Point p(1, 0, 0);
35
+ S2PointRegion r0(p);
36
+ EXPECT_EQ(r0.point(), p);
37
+ EXPECT_TRUE(r0.Contains(p));
38
+ EXPECT_TRUE(r0.Contains(r0.point()));
39
+ EXPECT_FALSE(r0.Contains(S2Point(1, 0, 1)));
40
+ unique_ptr<S2PointRegion> r0_clone(r0.Clone());
41
+ EXPECT_EQ(r0_clone->point(), r0.point());
42
+ EXPECT_EQ(r0.GetCapBound(), S2Cap::FromPoint(p));
43
+ S2LatLng ll(p);
44
+ EXPECT_EQ(r0.GetRectBound(), S2LatLngRect(ll, ll));
45
+
46
+ // The leaf cell containing a point is still much larger than the point.
47
+ S2Cell cell(p);
48
+ EXPECT_FALSE(r0.Contains(cell));
49
+ EXPECT_TRUE(r0.MayIntersect(cell));
50
+ }
51
+
52
+ TEST(S2PointRegionTest, EncodeAndDecode) {
53
+ S2Point p(.6, .8, 0);
54
+ S2PointRegion r(p);
55
+
56
+ Encoder encoder;
57
+ r.Encode(&encoder);
58
+
59
+ Decoder decoder(encoder.base(), encoder.length());
60
+ S2PointRegion decoded_r(S2Point(1, 0, 0));
61
+ decoded_r.Decode(&decoder);
62
+ S2Point decoded_p = decoded_r.point();
63
+
64
+ EXPECT_EQ(0.6, decoded_p[0]);
65
+ EXPECT_EQ(0.8, decoded_p[1]);
66
+ EXPECT_EQ(0.0, decoded_p[2]);
67
+ }
68
+
69
+ TEST(S2PointRegionTest, DecodeUnitLength) {
70
+ // Ensure that we have the right format for the next test.
71
+ Encoder encoder;
72
+ encoder.Ensure(1 + 3 * 8);
73
+
74
+ encoder.put8(1); // version number
75
+ encoder.putdouble(1.0);
76
+ encoder.putdouble(0.0);
77
+ encoder.putdouble(0.0);
78
+
79
+ Decoder decoder(encoder.base(), encoder.length());
80
+ S2PointRegion r(S2Point(-1, 0, 0));
81
+ ASSERT_TRUE(r.Decode(&decoder));
82
+ }
83
+
84
+ TEST(S2PointRegionTest, DecodeNonUnitLength) {
85
+ // Ensure that a decode of a non-unit length vector returns false,
86
+ // rather than S2_DCHECK fails.
87
+ Encoder encoder;
88
+ encoder.Ensure(1 + 3 * 8);
89
+
90
+ encoder.put8(1); // version number
91
+ encoder.putdouble(1.0);
92
+ encoder.putdouble(1.0);
93
+ encoder.putdouble(1.0);
94
+
95
+ Decoder decoder(encoder.base(), encoder.length());
96
+ S2PointRegion r(S2Point(-1, 0, 0));
97
+ ASSERT_FALSE(r.Decode(&decoder));
98
+ }
99
+
100
+ } // namespace
@@ -0,0 +1,57 @@
1
+ // Copyright 2018 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_S2POINT_SPAN_H_
19
+ #define S2_S2POINT_SPAN_H_
20
+
21
+ #include "s2/base/logging.h"
22
+ #include "s2/third_party/absl/types/span.h"
23
+ #include "s2/s2point.h"
24
+
25
+ // S2PointSpan represents a view of an S2Point array. It is used to pass
26
+ // vertex arrays to functions that don't care about the actual array type
27
+ // (e.g. std::vector<S2Point> or S2Point[]).
28
+ //
29
+ // NOTE: S2PointSpan has an implicit constructor from any container type with
30
+ // data() and size() methods (such as std::vector and std::array). Therefore
31
+ // you can use such containers as arguments for any S2PointSpan parameter.
32
+ using S2PointSpan = absl::Span<const S2Point>;
33
+
34
+ // Like S2PointSpan, except that operator[] maps index values in the range
35
+ // [n, 2*n-1] to the range [0, n-1] by subtracting n (where n == size()).
36
+ // In other words, two full copies of the vertex array are available. (This
37
+ // is a compromise between convenience and efficiency, since computing the
38
+ // index modulo "n" is surprisingly expensive.)
39
+ //
40
+ // This property is useful for implementing algorithms where the elements of
41
+ // the span represent the vertices of a loop.
42
+ class S2PointLoopSpan : public S2PointSpan {
43
+ public:
44
+ // Inherit all constructors.
45
+ using absl::Span<const S2Point>::Span;
46
+
47
+ // Like operator[], but allows index values in the range [0, 2*size()-1]
48
+ // where each index i >= size() is mapped to i - size().
49
+ reference operator[](int i) const noexcept {
50
+ S2_DCHECK_GE(i, 0);
51
+ S2_DCHECK_LT(i, 2 * size());
52
+ int j = i - static_cast<int>(size());
53
+ return S2PointSpan::operator[](j < 0 ? i : j);
54
+ }
55
+ };
56
+
57
+ #endif // S2_S2POINT_SPAN_H_
@@ -0,0 +1,47 @@
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/s2point.h"
19
+
20
+ #include <cstddef>
21
+ #include <unordered_set>
22
+
23
+ #include <gtest/gtest.h>
24
+ #include "s2/s2cell.h"
25
+ #include "s2/s2testing.h"
26
+
27
+ using std::unordered_set;
28
+
29
+ TEST(S2, S2PointHashSpreads) {
30
+ int kTestPoints = 1 << 16;
31
+ unordered_set<size_t> set;
32
+ unordered_set<S2Point, S2PointHash> points;
33
+ S2PointHash hasher;
34
+ S2Point base = S2Point(1, 1, 1);
35
+ for (int i = 0; i < kTestPoints; ++i) {
36
+ // All points in a tiny cap to test avalanche property of hash
37
+ // function (the cap would be of radius 1mm on Earth (4*10^9/2^35).
38
+ S2Point perturbed = base + S2Testing::RandomPoint() / (1ULL << 35);
39
+ perturbed = perturbed.Normalize();
40
+ set.insert(hasher(perturbed));
41
+ points.insert(perturbed);
42
+ }
43
+ // A real collision is extremely unlikely.
44
+ EXPECT_EQ(0, kTestPoints - points.size());
45
+ // Allow a few for the hash.
46
+ EXPECT_GE(10, kTestPoints - set.size());
47
+ }
@@ -0,0 +1,127 @@
1
+ // Copyright 2013 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_S2POINT_VECTOR_SHAPE_H_
19
+ #define S2_S2POINT_VECTOR_SHAPE_H_
20
+
21
+ #include <vector>
22
+ #include "s2/encoded_s2point_vector.h"
23
+ #include "s2/s2shape.h"
24
+
25
+ // S2PointVectorShape is an S2Shape representing a set of S2Points. Each point
26
+ // is reprsented as a degenerate edge with the same starting and ending
27
+ // vertices.
28
+ //
29
+ // This class is useful for adding a collection of points to an S2ShapeIndex.
30
+ class S2PointVectorShape : public S2Shape {
31
+ public:
32
+ static constexpr TypeTag kTypeTag = 3;
33
+
34
+ // Constructs an empty point vector.
35
+ S2PointVectorShape() {}
36
+
37
+ // Constructs an S2PointVectorShape from a vector of points.
38
+ explicit S2PointVectorShape(std::vector<S2Point> points) {
39
+ points_ = std::move(points);
40
+ }
41
+
42
+ ~S2PointVectorShape() override = default;
43
+
44
+ int num_points() const { return static_cast<int>(points_.size()); }
45
+ const S2Point& point(int i) const { return points_[i]; }
46
+
47
+ // Appends an encoded representation of the S2PointVectorShape to "encoder".
48
+ //
49
+ // REQUIRES: "encoder" uses the default constructor, so that its buffer
50
+ // can be enlarged as necessary by calling Ensure(int).
51
+ void Encode(Encoder* encoder,
52
+ s2coding::CodingHint hint = s2coding::CodingHint::COMPACT) const {
53
+ s2coding::EncodeS2PointVector(points_, hint, encoder);
54
+ }
55
+
56
+ // Decodes an S2PointVectorShape, returning true on success. (The method
57
+ // name is chosen for compatibility with EncodedS2PointVectorShape below.)
58
+ bool Init(Decoder* decoder) {
59
+ s2coding::EncodedS2PointVector points;
60
+ if (!points.Init(decoder)) return false;
61
+ points_ = points.Decode();
62
+ return true;
63
+ }
64
+
65
+ // S2Shape interface:
66
+ int num_edges() const final { return num_points(); }
67
+ Edge edge(int e) const final { return Edge(points_[e], points_[e]); }
68
+ int dimension() const final { return 0; }
69
+ ReferencePoint GetReferencePoint() const final {
70
+ return ReferencePoint::Contained(false);
71
+ }
72
+ int num_chains() const final { return num_points(); }
73
+ Chain chain(int i) const final { return Chain(i, 1); }
74
+ Edge chain_edge(int i, int j) const final {
75
+ S2_DCHECK_EQ(j, 0);
76
+ return Edge(points_[i], points_[i]);
77
+ }
78
+ ChainPosition chain_position(int e) const final {
79
+ return ChainPosition(e, 0);
80
+ }
81
+ TypeTag type_tag() const override { return kTypeTag; }
82
+
83
+ private:
84
+ std::vector<S2Point> points_;
85
+ };
86
+
87
+ // Exactly like S2PointVectorShape, except that the points are kept in an
88
+ // encoded form and are decoded only as they are accessed. This allows for
89
+ // very fast initialization and no additional memory use beyond the encoded
90
+ // data. The encoded data is not owned by this class; typically it points
91
+ // into a large contiguous buffer that contains other encoded data as well.
92
+ class EncodedS2PointVectorShape : public S2Shape {
93
+ public:
94
+ // Constructs an uninitialized object; requires Init() to be called.
95
+ EncodedS2PointVectorShape() {}
96
+
97
+ // Initializes an EncodedS2PointVectorShape.
98
+ //
99
+ // REQUIRES: The Decoder data buffer must outlive this object.
100
+ bool Init(Decoder* decoder) { return points_.Init(decoder); }
101
+
102
+ int num_points() const { return static_cast<int>(points_.size()); }
103
+ S2Point point(int i) const { return points_[i]; }
104
+
105
+ // S2Shape interface:
106
+ int num_edges() const final { return num_points(); }
107
+ Edge edge(int e) const final { return Edge(points_[e], points_[e]); }
108
+ int dimension() const final { return 0; }
109
+ ReferencePoint GetReferencePoint() const final {
110
+ return ReferencePoint::Contained(false);
111
+ }
112
+ int num_chains() const final { return num_points(); }
113
+ Chain chain(int i) const final { return Chain(i, 1); }
114
+ Edge chain_edge(int i, int j) const final {
115
+ S2_DCHECK_EQ(j, 0);
116
+ return Edge(points_[i], points_[i]);
117
+ }
118
+ ChainPosition chain_position(int e) const final {
119
+ return ChainPosition(e, 0);
120
+ }
121
+
122
+ private:
123
+ s2coding::EncodedS2PointVector points_;
124
+ };
125
+
126
+
127
+ #endif // S2_S2POINT_VECTOR_SHAPE_H_
@@ -0,0 +1,59 @@
1
+ // Copyright 2013 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/s2point_vector_shape.h"
19
+
20
+ #include <vector>
21
+
22
+ #include <gtest/gtest.h>
23
+ #include "s2/s2testing.h"
24
+
25
+ TEST(S2PointVectorShape, Empty) {
26
+ std::vector<S2Point> points;
27
+ S2PointVectorShape shape(std::move(points));
28
+ EXPECT_EQ(0, shape.num_edges());
29
+ EXPECT_EQ(0, shape.num_chains());
30
+ EXPECT_EQ(0, shape.dimension());
31
+ EXPECT_TRUE(shape.is_empty());
32
+ EXPECT_FALSE(shape.is_full());
33
+ EXPECT_FALSE(shape.GetReferencePoint().contained);
34
+ }
35
+
36
+ TEST(S2PointVectorShape, ConstructionAndAccess) {
37
+ std::vector<S2Point> points;
38
+ S2Testing::rnd.Reset(FLAGS_s2_random_seed);
39
+ const int kNumPoints = 100;
40
+ for (int i = 0; i < kNumPoints; ++i) {
41
+ points.push_back(S2Testing::RandomPoint());
42
+ }
43
+ S2PointVectorShape shape(std::move(points));
44
+
45
+ EXPECT_EQ(kNumPoints, shape.num_edges());
46
+ EXPECT_EQ(kNumPoints, shape.num_chains());
47
+ EXPECT_EQ(0, shape.dimension());
48
+ EXPECT_FALSE(shape.is_empty());
49
+ EXPECT_FALSE(shape.is_full());
50
+ S2Testing::rnd.Reset(FLAGS_s2_random_seed);
51
+ for (int i = 0; i < kNumPoints; ++i) {
52
+ EXPECT_EQ(i, shape.chain(i).start);
53
+ EXPECT_EQ(1, shape.chain(i).length);
54
+ auto edge = shape.edge(i);
55
+ S2Point pt = S2Testing::RandomPoint();
56
+ EXPECT_EQ(pt, edge.v0);
57
+ EXPECT_EQ(pt, edge.v1);
58
+ }
59
+ }