@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,276 @@
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_ENCODED_S2SHAPE_INDEX_H_
19
+ #define S2_ENCODED_S2SHAPE_INDEX_H_
20
+
21
+ #include "s2/encoded_s2cell_id_vector.h"
22
+ #include "s2/encoded_string_vector.h"
23
+ #include "s2/mutable_s2shape_index.h"
24
+
25
+ class EncodedS2ShapeIndex final : public S2ShapeIndex {
26
+ public:
27
+ using Options = MutableS2ShapeIndex::Options;
28
+ using ShapeFactory = S2ShapeIndex::ShapeFactory;
29
+
30
+ // Creates an index that must be initialized by calling Init().
31
+ EncodedS2ShapeIndex();
32
+
33
+ ~EncodedS2ShapeIndex() override;
34
+
35
+ // Initializes the EncodedS2ShapeIndex, returning true on success.
36
+ //
37
+ // This method does not decode the S2Shape objects in the index; this is
38
+ // the responsibility of the client-provided function "shape_factory"
39
+ // (see s2shapeutil_coding.h). Example usage:
40
+ //
41
+ // index.Init(decoder, s2shapeutil::LazyDecodeShapeFactory(decoder));
42
+ //
43
+ // Note that the encoded shape vector must *precede* the encoded S2ShapeIndex
44
+ // in the Decoder's data buffer in this example.
45
+ bool Init(Decoder* decoder, const ShapeFactory& shape_factory);
46
+
47
+ const Options& options() const { return options_; }
48
+
49
+ // The number of distinct shape ids in the index. This equals the number of
50
+ // shapes in the index provided that no shapes have ever been removed.
51
+ // (Shape ids are not reused.)
52
+ int num_shape_ids() const override { return shapes_.size(); }
53
+
54
+ // Return a pointer to the shape with the given id, or nullptr if the shape
55
+ // has been removed from the index.
56
+ S2Shape* shape(int id) const override;
57
+
58
+ // Minimizes memory usage by requesting that any data structures that can be
59
+ // rebuilt should be discarded. This method invalidates all iterators.
60
+ //
61
+ // Like all non-const methods, this method is not thread-safe.
62
+ void Minimize() override;
63
+
64
+ class Iterator final : public IteratorBase {
65
+ public:
66
+ // Default constructor; must be followed by a call to Init().
67
+ Iterator();
68
+
69
+ // Constructs an iterator positioned as specified. By default iterators
70
+ // are unpositioned, since this avoids an extra seek in this situation
71
+ // where one of the seek methods (such as Locate) is immediately called.
72
+ //
73
+ // If you want to position the iterator at the beginning, e.g. in order to
74
+ // loop through the entire index, do this instead:
75
+ //
76
+ // for (EncodedS2ShapeIndex::Iterator it(&index, S2ShapeIndex::BEGIN);
77
+ // !it.done(); it.Next()) { ... }
78
+ explicit Iterator(const EncodedS2ShapeIndex* index,
79
+ InitialPosition pos = UNPOSITIONED);
80
+
81
+ // Initializes an iterator for the given EncodedS2ShapeIndex.
82
+ void Init(const EncodedS2ShapeIndex* index,
83
+ InitialPosition pos = UNPOSITIONED);
84
+
85
+ // Inherited non-virtual methods:
86
+ // S2CellId id() const;
87
+ // const S2ShapeIndexCell& cell() const;
88
+ // bool done() const;
89
+ // S2Point center() const;
90
+
91
+ // IteratorBase API:
92
+ void Begin() override;
93
+ void Finish() override;
94
+ void Next() override;
95
+ bool Prev() override;
96
+ void Seek(S2CellId target) override;
97
+ bool Locate(const S2Point& target) override;
98
+ CellRelation Locate(S2CellId target) override;
99
+
100
+ protected:
101
+ const S2ShapeIndexCell* GetCell() const override;
102
+ std::unique_ptr<IteratorBase> Clone() const override;
103
+ void Copy(const IteratorBase& other) override;
104
+
105
+ private:
106
+ void Refresh(); // Updates the IteratorBase fields.
107
+ const EncodedS2ShapeIndex* index_;
108
+ int32 cell_pos_; // Current position in the vector of index cells.
109
+ int32 num_cells_;
110
+ };
111
+
112
+ // Returns the number of bytes currently occupied by the index (including any
113
+ // unused space at the end of vectors, etc). It has the same thread safety
114
+ // as the other "const" methods (see introduction).
115
+ size_t SpaceUsed() const override;
116
+
117
+ protected:
118
+ std::unique_ptr<IteratorBase> NewIterator(InitialPosition pos) const override;
119
+
120
+ private:
121
+ friend class Iterator;
122
+
123
+ // Returns a value indicating that a shape has not been decoded yet.
124
+ inline static S2Shape* kUndecodedShape() {
125
+ return reinterpret_cast<S2Shape*>(1);
126
+ }
127
+
128
+ // Like std::atomic<S2Shape*>, but defaults to kUndecodedShape().
129
+ class AtomicShape : public std::atomic<S2Shape*> {
130
+ public:
131
+ AtomicShape() : std::atomic<S2Shape*>(kUndecodedShape()) {}
132
+ };
133
+
134
+ S2Shape* GetShape(int id) const;
135
+ const S2ShapeIndexCell* GetCell(int i) const;
136
+ bool cell_decoded(int i) const;
137
+ bool test_and_set_cell_decoded(int i) const;
138
+ int max_cell_cache_size() const;
139
+
140
+ std::unique_ptr<ShapeFactory> shape_factory_;
141
+
142
+ // The options specified for this index.
143
+ Options options_;
144
+
145
+ // A vector containing all shapes in the index. Initially all shapes are
146
+ // set to kUndecodedShape(); as shapes are decoded, they are added to the
147
+ // vector using std::atomic::compare_exchange_strong.
148
+ mutable std::vector<AtomicShape> shapes_;
149
+
150
+ // A vector containing the S2CellIds of each cell in the index.
151
+ s2coding::EncodedS2CellIdVector cell_ids_;
152
+
153
+ // A vector containing the encoded contents of each cell in the index.
154
+ s2coding::EncodedStringVector encoded_cells_;
155
+
156
+ // A raw array containing the decoded contents of each cell in the index.
157
+ // Initially all values are *uninitialized memory*. The cells_decoded_
158
+ // field below keeps track of which elements are present.
159
+ mutable std::unique_ptr<std::atomic<S2ShapeIndexCell*>[]> cells_;
160
+
161
+ // A bit vector indicating which elements of cells_ have been decoded.
162
+ // All other elements of cells_ contain uninitialized (random) memory.
163
+ mutable std::vector<std::atomic<uint64>> cells_decoded_;
164
+
165
+ // In order to minimize destructor time when very few cells of a large
166
+ // S2ShapeIndex are needed, we keep track of the indices of the first few
167
+ // cells to be decoded. This lets us avoid scanning the cells_decoded_
168
+ // vector when the number of cells decoded is very small.
169
+ mutable std::vector<int> cell_cache_;
170
+
171
+ // Protects all updates to cells_ and cells_decoded_.
172
+ mutable SpinLock cells_lock_;
173
+
174
+ EncodedS2ShapeIndex(const EncodedS2ShapeIndex&) = delete;
175
+ void operator=(const EncodedS2ShapeIndex&) = delete;
176
+ };
177
+
178
+
179
+ ////////////////// Implementation details follow ////////////////////
180
+
181
+
182
+ inline EncodedS2ShapeIndex::Iterator::Iterator() : index_(nullptr) {
183
+ }
184
+
185
+ inline EncodedS2ShapeIndex::Iterator::Iterator(
186
+ const EncodedS2ShapeIndex* index, InitialPosition pos) {
187
+ Init(index, pos);
188
+ }
189
+
190
+ inline void EncodedS2ShapeIndex::Iterator::Init(
191
+ const EncodedS2ShapeIndex* index, InitialPosition pos) {
192
+ index_ = index;
193
+ num_cells_ = index->cell_ids_.size();
194
+ cell_pos_ = (pos == BEGIN) ? 0 : num_cells_;
195
+ Refresh();
196
+ }
197
+
198
+ inline void EncodedS2ShapeIndex::Iterator::Refresh() {
199
+ if (cell_pos_ == num_cells_) {
200
+ set_finished();
201
+ } else {
202
+ // It's faster to initialize the cell to nullptr even if it has already
203
+ // been decoded, since algorithms frequently don't need it (i.e., based on
204
+ // the S2CellId they might not need to look at the cell contents).
205
+ set_state(index_->cell_ids_[cell_pos_], nullptr);
206
+ }
207
+ }
208
+
209
+ inline void EncodedS2ShapeIndex::Iterator::Begin() {
210
+ cell_pos_ = 0;
211
+ Refresh();
212
+ }
213
+
214
+ inline void EncodedS2ShapeIndex::Iterator::Finish() {
215
+ cell_pos_ = num_cells_;
216
+ Refresh();
217
+ }
218
+
219
+ inline void EncodedS2ShapeIndex::Iterator::Next() {
220
+ S2_DCHECK(!done());
221
+ ++cell_pos_;
222
+ Refresh();
223
+ }
224
+
225
+ inline bool EncodedS2ShapeIndex::Iterator::Prev() {
226
+ if (cell_pos_ == 0) return false;
227
+ --cell_pos_;
228
+ Refresh();
229
+ return true;
230
+ }
231
+
232
+ inline void EncodedS2ShapeIndex::Iterator::Seek(S2CellId target) {
233
+ cell_pos_ = index_->cell_ids_.lower_bound(target);
234
+ Refresh();
235
+ }
236
+
237
+ inline std::unique_ptr<EncodedS2ShapeIndex::IteratorBase>
238
+ EncodedS2ShapeIndex::NewIterator(InitialPosition pos) const {
239
+ return absl::make_unique<Iterator>(this, pos);
240
+ }
241
+
242
+ inline S2Shape* EncodedS2ShapeIndex::shape(int id) const {
243
+ S2Shape* shape = shapes_[id].load(std::memory_order_relaxed);
244
+ if (shape != kUndecodedShape()) return shape;
245
+ return GetShape(id);
246
+ }
247
+
248
+ // Returns true if the given cell has been decoded yet.
249
+ inline bool EncodedS2ShapeIndex::cell_decoded(int i) const {
250
+ uint64 group_bits = cells_decoded_[i >> 6].load(std::memory_order_relaxed);
251
+ return (group_bits & (1ULL << (i & 63))) != 0;
252
+ }
253
+
254
+ // Marks the given cell as decoded and returns true if it was already marked.
255
+ inline bool EncodedS2ShapeIndex::test_and_set_cell_decoded(int i) const {
256
+ std::atomic<uint64>* group = &cells_decoded_[i >> 6];
257
+ uint64 group_bits = group->load(std::memory_order_relaxed);
258
+ uint64 test_bit = 1ULL << (i & 63);
259
+ group->store(group_bits | test_bit, std::memory_order_relaxed);
260
+ return (group_bits & test_bit) != 0;
261
+ }
262
+
263
+ inline int EncodedS2ShapeIndex::max_cell_cache_size() const {
264
+ // The cell cache is sized so that scanning decoded_cells_ in the destructor
265
+ // costs about 30 cycles per decoded cell in the worst case. (This overhead
266
+ // is acceptable relative to the other costs of decoding each cell.)
267
+ //
268
+ // For example, if there are 65,536 cells then we won't need to scan
269
+ // encoded_cells_ unless we decode at least (65536/2048) == 32 cells. It
270
+ // takes about 1 cycle per 64 cells to scan encoded_cells_, so that works
271
+ // out to (65536/64) == 1024 cycles. However this cost is amortized over
272
+ // the 32 cells decoded, which works out to 32 cycles per cell.
273
+ return cell_ids_.size() >> 11;
274
+ }
275
+
276
+ #endif // S2_ENCODED_S2SHAPE_INDEX_H_
@@ -0,0 +1,244 @@
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
+ #include "s2/encoded_s2shape_index.h"
19
+
20
+ #include <map>
21
+ #include <vector>
22
+ #include <gtest/gtest.h>
23
+ #include "s2/third_party/absl/memory/memory.h"
24
+ #include "s2/third_party/absl/strings/str_cat.h"
25
+ #include "s2/mutable_s2shape_index.h"
26
+ #include "s2/s2builder.h"
27
+ #include "s2/s2builderutil_s2polyline_layer.h"
28
+ #include "s2/s2builderutil_snap_functions.h"
29
+ #include "s2/s2cap.h"
30
+ #include "s2/s2closest_edge_query.h"
31
+ #include "s2/s2contains_point_query.h"
32
+ #include "s2/s2edge_distances.h"
33
+ #include "s2/s2latlng.h"
34
+ #include "s2/s2lax_polygon_shape.h"
35
+ #include "s2/s2lax_polyline_shape.h"
36
+ #include "s2/s2loop.h"
37
+ #include "s2/s2point_vector_shape.h"
38
+ #include "s2/s2pointutil.h"
39
+ #include "s2/s2shapeutil_coding.h"
40
+ #include "s2/s2shapeutil_testing.h"
41
+ #include "s2/s2testing.h"
42
+ #include "s2/s2text_format.h"
43
+
44
+ using absl::make_unique;
45
+ using absl::StrCat;
46
+ using s2builderutil::S2CellIdSnapFunction;
47
+ using s2builderutil::S2PolylineLayer;
48
+ using std::max;
49
+ using std::unique_ptr;
50
+ using std::vector;
51
+
52
+ template <class Shape>
53
+ bool DecodeHomegeneousShapeIndex(EncodedS2ShapeIndex* index, Decoder* decoder) {
54
+ return index->Init(decoder,
55
+ s2shapeutil::HomogeneousShapeFactory<Shape>(decoder));
56
+ }
57
+
58
+ template <class InShape, class OutShape>
59
+ void TestEncodedS2ShapeIndex(const MutableS2ShapeIndex& expected,
60
+ size_t expected_bytes) {
61
+ Encoder encoder;
62
+ s2shapeutil::EncodeHomogeneousShapes<InShape>(expected, &encoder);
63
+ size_t shapes_bytes = encoder.length();
64
+ expected.Encode(&encoder);
65
+ EXPECT_EQ(expected_bytes, encoder.length() - shapes_bytes);
66
+ Decoder decoder(encoder.base(), encoder.length());
67
+ EncodedS2ShapeIndex actual;
68
+ ASSERT_TRUE(DecodeHomegeneousShapeIndex<OutShape>(&actual, &decoder));
69
+ EXPECT_EQ(expected.options().max_edges_per_cell(),
70
+ actual.options().max_edges_per_cell());
71
+ s2testing::ExpectEqual(expected, actual);
72
+ }
73
+
74
+ TEST(EncodedS2ShapeIndex, Empty) {
75
+ MutableS2ShapeIndex index;
76
+ TestEncodedS2ShapeIndex<S2LaxPolylineShape, S2LaxPolylineShape>(index, 4);
77
+ }
78
+
79
+ TEST(EncodedS2ShapeIndex, OneEdge) {
80
+ MutableS2ShapeIndex index;
81
+ index.Add(s2textformat::MakeLaxPolylineOrDie("1:1, 2:2"));
82
+ TestEncodedS2ShapeIndex<S2LaxPolylineShape, S2LaxPolylineShape>(index, 8);
83
+ }
84
+
85
+ TEST(EncodedS2ShapeIndex, RegularLoops) {
86
+ struct TestCase {
87
+ int num_edges;
88
+ size_t expected_bytes;
89
+ };
90
+ vector<TestCase> test_cases = {
91
+ {4, 8},
92
+ {8, 8},
93
+ {16, 16},
94
+ {64, 77},
95
+ {256, 327},
96
+ {4096, 8813},
97
+ {65536, 168291},
98
+ };
99
+ for (const auto& test_case : test_cases) {
100
+ MutableS2ShapeIndex index;
101
+ S2Testing::rnd.Reset(test_case.num_edges);
102
+ SCOPED_TRACE(StrCat("num_edges = ", test_case.num_edges));
103
+ S2Polygon polygon(S2Loop::MakeRegularLoop(S2Point(3, 2, 1).Normalize(),
104
+ S1Angle::Degrees(0.1),
105
+ test_case.num_edges));
106
+ index.Add(make_unique<S2LaxPolygonShape>(polygon));
107
+ TestEncodedS2ShapeIndex<S2LaxPolygonShape, EncodedS2LaxPolygonShape>(
108
+ index, test_case.expected_bytes);
109
+ }
110
+ }
111
+
112
+ TEST(EncodedS2ShapeIndex, OverlappingPointClouds) {
113
+ struct TestCase {
114
+ int num_shapes, num_points_per_shape;
115
+ size_t expected_bytes;
116
+ };
117
+ vector<TestCase> test_cases = {
118
+ {1, 50, 83},
119
+ {2, 100, 583},
120
+ {4, 100, 1383},
121
+ };
122
+ S2Cap cap(S2Point(0.1, -0.4, 0.3).Normalize(), S1Angle::Degrees(1));
123
+ for (const auto& test_case : test_cases) {
124
+ MutableS2ShapeIndex index;
125
+ S2Testing::rnd.Reset(test_case.num_shapes);
126
+ SCOPED_TRACE(StrCat("num_shapes = ", test_case.num_shapes));
127
+ for (int i = 0; i < test_case.num_shapes; ++i) {
128
+ vector<S2Point> points;
129
+ for (int j = 0; j < test_case.num_points_per_shape; ++j) {
130
+ points.push_back(S2Testing::SamplePoint(cap));
131
+ }
132
+ index.Add(make_unique<S2PointVectorShape>(points));
133
+ }
134
+ TestEncodedS2ShapeIndex<S2PointVectorShape, EncodedS2PointVectorShape>(
135
+ index, test_case.expected_bytes);
136
+ }
137
+ }
138
+
139
+ TEST(EncodedS2ShapeIndex, OverlappingPolylines) {
140
+ struct TestCase {
141
+ int num_shapes, num_shape_edges;
142
+ size_t expected_bytes;
143
+ };
144
+ vector<TestCase> test_cases = {
145
+ {2, 50, 139},
146
+ {10, 50, 777},
147
+ {20, 50, 2219},
148
+ };
149
+ S2Cap cap(S2Point(-0.2, -0.3, 0.4).Normalize(), S1Angle::Degrees(0.1));
150
+ for (const auto& test_case : test_cases) {
151
+ S1Angle edge_len = 2 * cap.GetRadius() / test_case.num_shape_edges;
152
+ MutableS2ShapeIndex index;
153
+ S2Testing::rnd.Reset(test_case.num_shapes);
154
+ SCOPED_TRACE(StrCat("num_shapes = ", test_case.num_shapes));
155
+ for (int i = 0; i < test_case.num_shapes; ++i) {
156
+ S2Point a = S2Testing::SamplePoint(cap), b = S2Testing::RandomPoint();
157
+ vector<S2Point> vertices;
158
+ int n = test_case.num_shape_edges;
159
+ for (int j = 0; j <= n; ++j) {
160
+ vertices.push_back(S2::InterpolateAtDistance(j * edge_len, a, b));
161
+ }
162
+ index.Add(make_unique<S2LaxPolylineShape>(vertices));
163
+ }
164
+ TestEncodedS2ShapeIndex<S2LaxPolylineShape, EncodedS2LaxPolylineShape>(
165
+ index, test_case.expected_bytes);
166
+ }
167
+ }
168
+
169
+ TEST(EncodedS2ShapeIndex, OverlappingLoops) {
170
+ struct TestCase {
171
+ int num_shapes, max_edges_per_loop;
172
+ size_t expected_bytes;
173
+ };
174
+ vector<TestCase> test_cases = {
175
+ {2, 250, 138},
176
+ {5, 250, 1084},
177
+ {25, 50, 3673},
178
+ };
179
+ S2Cap cap(S2Point(-0.1, 0.25, 0.2).Normalize(), S1Angle::Degrees(3));
180
+ for (const auto& test_case : test_cases) {
181
+ MutableS2ShapeIndex index;
182
+ S2Testing::rnd.Reset(test_case.num_shapes);
183
+ SCOPED_TRACE(StrCat("num_shapes = ", test_case.num_shapes));
184
+ for (int i = 0; i < test_case.num_shapes; ++i) {
185
+ S2Point center = S2Testing::SamplePoint(cap);
186
+ double radius_fraction = S2Testing::rnd.RandDouble();
187
+ // Scale the number of edges so that they are all about the same length
188
+ // (similar to modeling all geometry at a similar resolution).
189
+ int num_edges = max(3.0, test_case.max_edges_per_loop * radius_fraction);
190
+ S2Polygon polygon(S2Loop::MakeRegularLoop(
191
+ center, cap.GetRadius() * radius_fraction, num_edges));
192
+ index.Add(make_unique<S2LaxPolygonShape>(polygon));
193
+ }
194
+ TestEncodedS2ShapeIndex<S2LaxPolygonShape, EncodedS2LaxPolygonShape>(
195
+ index, test_case.expected_bytes);
196
+ }
197
+ }
198
+
199
+ // Like S2PolylineLayer, but converts the polyline to an S2LaxPolylineShape
200
+ // and adds it to an S2ShapeIndex (if the polyline is non-empty).
201
+ class IndexedLaxPolylineLayer : public S2Builder::Layer {
202
+ public:
203
+ using Options = S2PolylineLayer::Options;
204
+ explicit IndexedLaxPolylineLayer(MutableS2ShapeIndex* index,
205
+ const Options& options = Options())
206
+ : index_(index), polyline_(make_unique<S2Polyline>()),
207
+ layer_(polyline_.get(), options) {}
208
+
209
+ GraphOptions graph_options() const override {
210
+ return layer_.graph_options();
211
+ }
212
+
213
+ void Build(const Graph& g, S2Error* error) override {
214
+ layer_.Build(g, error);
215
+ if (error->ok() && polyline_->num_vertices() > 0) {
216
+ index_->Add(absl::make_unique<S2LaxPolylineShape>(*polyline_));
217
+ }
218
+ }
219
+
220
+ private:
221
+ MutableS2ShapeIndex* index_;
222
+ std::unique_ptr<S2Polyline> polyline_;
223
+ S2PolylineLayer layer_;
224
+ };
225
+
226
+ TEST(EncodedS2ShapeIndex, SnappedFractalPolylines) {
227
+ MutableS2ShapeIndex index;
228
+ S2Builder builder{S2Builder::Options{S2CellIdSnapFunction()}};
229
+ for (int i = 0; i < 5; ++i) {
230
+ builder.StartLayer(make_unique<IndexedLaxPolylineLayer>(&index));
231
+ S2Testing::Fractal fractal;
232
+ fractal.SetLevelForApproxMaxEdges(3 * 256);
233
+ auto frame = S2::GetFrame(S2LatLng::FromDegrees(10, i).ToPoint());
234
+ auto loop = fractal.MakeLoop(frame, S1Angle::Degrees(0.1));
235
+ std::vector<S2Point> vertices;
236
+ S2Testing::AppendLoopVertices(*loop, &vertices);
237
+ S2Polyline polyline(vertices);
238
+ builder.AddPolyline(polyline);
239
+ }
240
+ S2Error error;
241
+ ASSERT_TRUE(builder.Build(&error)) << error.text();
242
+ TestEncodedS2ShapeIndex<S2LaxPolylineShape, EncodedS2LaxPolylineShape>(
243
+ index, 8698);
244
+ }
@@ -0,0 +1,66 @@
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
+ #include "s2/encoded_string_vector.h"
19
+
20
+ using absl::MakeSpan;
21
+ using absl::Span;
22
+ using absl::string_view;
23
+ using std::vector;
24
+
25
+ namespace s2coding {
26
+
27
+ StringVectorEncoder::StringVectorEncoder() {
28
+ }
29
+
30
+ void StringVectorEncoder::Encode(Encoder* encoder) {
31
+ offsets_.push_back(data_.length());
32
+ // We don't encode the first element of "offsets_", which is always zero.
33
+ EncodeUintVector<uint64>(
34
+ MakeSpan(offsets_.data() + 1, offsets_.data() + offsets_.size()),
35
+ encoder);
36
+ encoder->Ensure(data_.length());
37
+ encoder->putn(data_.base(), data_.length());
38
+ }
39
+
40
+ void StringVectorEncoder::Encode(Span<const string> v, Encoder* encoder) {
41
+ StringVectorEncoder string_vector;
42
+ for (const auto& str : v) string_vector.Add(str);
43
+ string_vector.Encode(encoder);
44
+ }
45
+
46
+ bool EncodedStringVector::Init(Decoder* decoder) {
47
+ if (!offsets_.Init(decoder)) return false;
48
+ data_ = reinterpret_cast<const char*>(decoder->ptr());
49
+ if (offsets_.size() > 0) {
50
+ uint64 length = offsets_[offsets_.size() - 1];
51
+ if (decoder->avail() < length) return false;
52
+ decoder->skip(length);
53
+ }
54
+ return true;
55
+ }
56
+
57
+ vector<string_view> EncodedStringVector::Decode() const {
58
+ size_t n = size();
59
+ vector<string_view> result(n);
60
+ for (int i = 0; i < n; ++i) {
61
+ result[i] = (*this)[i];
62
+ }
63
+ return result;
64
+ }
65
+
66
+ } // namespace s2coding