@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,411 @@
1
+ // Copyright 2007 Google Inc. All Rights Reserved.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS-IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+
16
+ //
17
+
18
+ #ifndef S2_UTIL_GTL_BTREE_CONTAINER_H_
19
+ #define S2_UTIL_GTL_BTREE_CONTAINER_H_
20
+
21
+ #include <algorithm>
22
+ #include <initializer_list>
23
+ #include <utility>
24
+
25
+ #include "s2/third_party/absl/base/internal/throw_delegate.h"
26
+ #include "s2/util/gtl/btree.h" // IWYU pragma: export
27
+
28
+ namespace gtl {
29
+ namespace internal_btree {
30
+
31
+ // A common base class for btree_set, btree_map, btree_multiset, and
32
+ // btree_multimap.
33
+ template <typename Tree>
34
+ class btree_container {
35
+ public:
36
+ using key_type = typename Tree::key_type;
37
+ using value_type = typename Tree::value_type;
38
+ using size_type = typename Tree::size_type;
39
+ using difference_type = typename Tree::difference_type;
40
+ using key_compare = typename Tree::key_compare;
41
+ using value_compare = typename Tree::value_compare;
42
+ using allocator_type = typename Tree::allocator_type;
43
+ using reference = typename Tree::reference;
44
+ using const_reference = typename Tree::const_reference;
45
+ using pointer = typename Tree::pointer;
46
+ using const_pointer = typename Tree::const_pointer;
47
+ using iterator = typename Tree::iterator;
48
+ using const_iterator = typename Tree::const_iterator;
49
+ using reverse_iterator = typename Tree::reverse_iterator;
50
+ using const_reverse_iterator = typename Tree::const_reverse_iterator;
51
+
52
+ // Constructors/assignments.
53
+ btree_container() : tree_(key_compare(), allocator_type()) {}
54
+ explicit btree_container(const key_compare &comp,
55
+ const allocator_type &alloc = allocator_type())
56
+ : tree_(comp, alloc) {}
57
+ btree_container(const btree_container &x) = default;
58
+ btree_container(btree_container &&x) noexcept = default;
59
+ btree_container &operator=(const btree_container &x) = default;
60
+ btree_container &operator=(btree_container &&x) noexcept(
61
+ std::is_nothrow_move_assignable<Tree>::value) = default;
62
+
63
+ // Iterator routines.
64
+ iterator begin() { return tree_.begin(); }
65
+ const_iterator begin() const { return tree_.begin(); }
66
+ const_iterator cbegin() const { return tree_.begin(); }
67
+ iterator end() { return tree_.end(); }
68
+ const_iterator end() const { return tree_.end(); }
69
+ const_iterator cend() const { return tree_.end(); }
70
+ reverse_iterator rbegin() { return tree_.rbegin(); }
71
+ const_reverse_iterator rbegin() const { return tree_.rbegin(); }
72
+ const_reverse_iterator crbegin() const { return tree_.rbegin(); }
73
+ reverse_iterator rend() { return tree_.rend(); }
74
+ const_reverse_iterator rend() const { return tree_.rend(); }
75
+ const_reverse_iterator crend() const { return tree_.rend(); }
76
+
77
+ // Lookup routines.
78
+ template <typename K>
79
+ iterator lower_bound(const K &key) {
80
+ return tree_.lower_bound(key);
81
+ }
82
+ template <typename K>
83
+ const_iterator lower_bound(const K &key) const {
84
+ return tree_.lower_bound(key);
85
+ }
86
+ template <typename K>
87
+ iterator upper_bound(const K &key) {
88
+ return tree_.upper_bound(key);
89
+ }
90
+ template <typename K>
91
+ const_iterator upper_bound(const K &key) const {
92
+ return tree_.upper_bound(key);
93
+ }
94
+ template <typename K>
95
+ std::pair<iterator, iterator> equal_range(const K &key) {
96
+ return tree_.equal_range(key);
97
+ }
98
+ template <typename K>
99
+ std::pair<const_iterator, const_iterator> equal_range(const K &key) const {
100
+ return tree_.equal_range(key);
101
+ }
102
+
103
+ // Utility routines.
104
+ void clear() { tree_.clear(); }
105
+ void swap(btree_container &x) { tree_.swap(x.tree_); }
106
+ void verify() const { tree_.verify(); }
107
+
108
+ // Size routines.
109
+ size_type size() const { return tree_.size(); }
110
+ size_type max_size() const { return tree_.max_size(); }
111
+ bool empty() const { return tree_.empty(); }
112
+ size_type height() const { return tree_.height(); }
113
+ size_type internal_nodes() const { return tree_.internal_nodes(); }
114
+ size_type leaf_nodes() const { return tree_.leaf_nodes(); }
115
+ size_type nodes() const { return tree_.nodes(); }
116
+ size_type bytes_used() const { return tree_.bytes_used(); }
117
+ static double average_bytes_per_value() {
118
+ return Tree::average_bytes_per_value();
119
+ }
120
+ double fullness() const { return tree_.fullness(); }
121
+ double overhead() const { return tree_.overhead(); }
122
+
123
+ friend bool operator==(const btree_container &x, const btree_container &y) {
124
+ if (x.size() != y.size()) return false;
125
+ return std::equal(x.begin(), x.end(), y.begin());
126
+ }
127
+
128
+ friend bool operator!=(const btree_container &x, const btree_container &y) {
129
+ return !(x == y);
130
+ }
131
+
132
+ friend bool operator<(const btree_container &x, const btree_container &y) {
133
+ return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end());
134
+ }
135
+
136
+ friend bool operator>(const btree_container &x, const btree_container &y) {
137
+ return y < x;
138
+ }
139
+
140
+ friend bool operator<=(const btree_container &x, const btree_container &y) {
141
+ return !(y < x);
142
+ }
143
+
144
+ friend bool operator>=(const btree_container &x, const btree_container &y) {
145
+ return !(x < y);
146
+ }
147
+
148
+ // The allocator used by the btree.
149
+ allocator_type get_allocator() const { return tree_.get_allocator(); }
150
+
151
+ // The key comparator used by the btree.
152
+ key_compare key_comp() const { return tree_.key_comp(); }
153
+ value_compare value_comp() const { return tree_.value_comp(); }
154
+
155
+ // Support absl::Hash.
156
+ template <typename State>
157
+ friend State AbslHashValue(State h, const btree_container &b) {
158
+ for (const auto &v : b) {
159
+ h = State::combine(std::move(h), v);
160
+ }
161
+ return State::combine(std::move(h), b.size());
162
+ }
163
+
164
+ // Exposed only for tests.
165
+ static bool testonly_uses_linear_node_search() {
166
+ return Tree::testonly_uses_linear_node_search();
167
+ }
168
+
169
+ protected:
170
+ Tree tree_;
171
+ };
172
+
173
+ // A common base class for btree_set and btree_map.
174
+ template <typename Tree>
175
+ class btree_set_container : public btree_container<Tree> {
176
+ using super_type = btree_container<Tree>;
177
+ using mutable_value_type = typename Tree::mutable_value_type;
178
+ using params_type = typename Tree::params_type;
179
+ friend class BtreeNodePeer;
180
+
181
+ public:
182
+ using value_type = typename Tree::value_type;
183
+ using size_type = typename Tree::size_type;
184
+ using key_compare = typename Tree::key_compare;
185
+ using allocator_type = typename Tree::allocator_type;
186
+ using iterator = typename Tree::iterator;
187
+ using const_iterator = typename Tree::const_iterator;
188
+
189
+ // Inherit constructors.
190
+ using super_type::super_type;
191
+ btree_set_container() {}
192
+
193
+ // Range constructor.
194
+ template <class InputIterator>
195
+ btree_set_container(InputIterator b, InputIterator e,
196
+ const key_compare &comp = key_compare(),
197
+ const allocator_type &alloc = allocator_type())
198
+ : super_type(comp, alloc) {
199
+ insert(b, e);
200
+ }
201
+
202
+ // Initializer list constructor.
203
+ btree_set_container(std::initializer_list<value_type> init,
204
+ const key_compare &comp = key_compare(),
205
+ const allocator_type &alloc = allocator_type())
206
+ : btree_set_container(init.begin(), init.end(), comp, alloc) {}
207
+
208
+ // Lookup routines.
209
+ template <typename K>
210
+ iterator find(const K &key) {
211
+ return this->tree_.find_unique(key);
212
+ }
213
+ template <typename K>
214
+ const_iterator find(const K &key) const {
215
+ return this->tree_.find_unique(key);
216
+ }
217
+ template <typename K>
218
+ size_type count(const K &key) const {
219
+ return this->tree_.count_unique(key);
220
+ }
221
+
222
+ // Insertion routines.
223
+ std::pair<iterator, bool> insert(const value_type &x) {
224
+ return this->tree_.insert_unique(params_type::key(x), x);
225
+ }
226
+ std::pair<iterator, bool> insert(value_type &&x) {
227
+ return this->tree_.insert_unique(params_type::key(x), std::move(x));
228
+ }
229
+ template <typename... Args>
230
+ std::pair<iterator, bool> emplace(Args &&... args) {
231
+ mutable_value_type v(std::forward<Args>(args)...);
232
+ return this->tree_.insert_unique(params_type::key(v), std::move(v));
233
+ }
234
+ iterator insert(iterator position, const value_type &x) {
235
+ return this->tree_.insert_hint_unique(position, params_type::key(x), x);
236
+ }
237
+ iterator insert(iterator position, value_type &&x) {
238
+ return this->tree_.insert_hint_unique(position, params_type::key(x),
239
+ std::move(x));
240
+ }
241
+ template <typename... Args>
242
+ iterator emplace_hint(iterator position, Args &&... args) {
243
+ mutable_value_type v(std::forward<Args>(args)...);
244
+ return this->tree_.insert_hint_unique(position, params_type::key(v),
245
+ std::move(v));
246
+ }
247
+ template <typename InputIterator>
248
+ void insert(InputIterator b, InputIterator e) {
249
+ this->tree_.insert_iterator_unique(b, e);
250
+ }
251
+ void insert(std::initializer_list<value_type> init) {
252
+ this->tree_.insert_iterator_unique(init.begin(), init.end());
253
+ }
254
+
255
+ // Deletion routines.
256
+ template <typename K>
257
+ int erase(const K &key) {
258
+ return this->tree_.erase_unique(key);
259
+ }
260
+ // Erase the specified iterator from the btree. The iterator must be valid
261
+ // (i.e. not equal to end()). Return an iterator pointing to the node after
262
+ // the one that was erased (or end() if none exists).
263
+ iterator erase(const iterator &iter) { return this->tree_.erase(iter); }
264
+ void erase(const iterator &first, const iterator &last) {
265
+ this->tree_.erase(first, last);
266
+ }
267
+ };
268
+
269
+ // Base class for btree_map.
270
+ template <typename Tree>
271
+ class btree_map_container : public btree_set_container<Tree> {
272
+ using super_type = btree_set_container<Tree>;
273
+
274
+ public:
275
+ using key_type = typename Tree::key_type;
276
+ using mapped_type = typename Tree::mapped_type;
277
+ using value_type = typename Tree::value_type;
278
+ using key_compare = typename Tree::key_compare;
279
+ using allocator_type = typename Tree::allocator_type;
280
+
281
+ // Inherit constructors.
282
+ using super_type::super_type;
283
+ btree_map_container() {}
284
+
285
+ // Insertion routines.
286
+ mapped_type &operator[](const key_type &key) {
287
+ return this->tree_
288
+ .insert_unique(key, std::piecewise_construct,
289
+ std::forward_as_tuple(key), std::forward_as_tuple())
290
+ .first->second;
291
+ }
292
+ mapped_type &operator[](key_type &&key) {
293
+ return this->tree_
294
+ .insert_unique(key, std::piecewise_construct,
295
+ std::forward_as_tuple(std::move(key)),
296
+ std::forward_as_tuple())
297
+ .first->second;
298
+ }
299
+
300
+ mapped_type &at(const key_type &key) {
301
+ auto it = this->find(key);
302
+ if (it == this->end())
303
+ absl::base_internal::ThrowStdOutOfRange("btree_map::at");
304
+ return it->second;
305
+ }
306
+ const mapped_type &at(const key_type &key) const {
307
+ auto it = this->find(key);
308
+ if (it == this->end())
309
+ absl::base_internal::ThrowStdOutOfRange("btree_map::at");
310
+ return it->second;
311
+ }
312
+ };
313
+
314
+ // A common base class for btree_multiset and btree_multimap.
315
+ template <typename Tree>
316
+ class btree_multiset_container : public btree_container<Tree> {
317
+ using super_type = btree_container<Tree>;
318
+
319
+ public:
320
+ using key_type = typename Tree::key_type;
321
+ using value_type = typename Tree::value_type;
322
+ using mapped_type = typename Tree::mapped_type;
323
+ using size_type = typename Tree::size_type;
324
+ using key_compare = typename Tree::key_compare;
325
+ using allocator_type = typename Tree::allocator_type;
326
+ using iterator = typename Tree::iterator;
327
+ using const_iterator = typename Tree::const_iterator;
328
+
329
+ // Inherit constructors.
330
+ using super_type::super_type;
331
+ btree_multiset_container() {}
332
+
333
+ // Range constructor.
334
+ template <class InputIterator>
335
+ btree_multiset_container(InputIterator b, InputIterator e,
336
+ const key_compare &comp = key_compare(),
337
+ const allocator_type &alloc = allocator_type())
338
+ : super_type(comp, alloc) {
339
+ insert(b, e);
340
+ }
341
+
342
+ // Initializer list constructor.
343
+ btree_multiset_container(std::initializer_list<value_type> init,
344
+ const key_compare &comp = key_compare(),
345
+ const allocator_type &alloc = allocator_type())
346
+ : btree_multiset_container(init.begin(), init.end(), comp, alloc) {}
347
+
348
+ // Lookup routines.
349
+ template <typename K>
350
+ iterator find(const K &key) {
351
+ return this->tree_.find_multi(key);
352
+ }
353
+ template <typename K>
354
+ const_iterator find(const K &key) const {
355
+ return this->tree_.find_multi(key);
356
+ }
357
+ template <typename K>
358
+ size_type count(const K &key) const {
359
+ return this->tree_.count_multi(key);
360
+ }
361
+
362
+ // Insertion routines.
363
+ iterator insert(const value_type &x) { return this->tree_.insert_multi(x); }
364
+ iterator insert(value_type &&x) {
365
+ return this->tree_.insert_multi(std::move(x));
366
+ }
367
+ iterator insert(iterator position, const value_type &x) {
368
+ return this->tree_.insert_hint_multi(position, x);
369
+ }
370
+ iterator insert(iterator position, value_type &&x) {
371
+ return this->tree_.insert_hint_multi(position, std::move(x));
372
+ }
373
+ template <typename InputIterator>
374
+ void insert(InputIterator b, InputIterator e) {
375
+ this->tree_.insert_iterator_multi(b, e);
376
+ }
377
+ void insert(std::initializer_list<value_type> init) {
378
+ this->tree_.insert_iterator_multi(init.begin(), init.end());
379
+ }
380
+
381
+ // Deletion routines.
382
+ template <typename K>
383
+ int erase(const K &key) {
384
+ return this->tree_.erase_multi(key);
385
+ }
386
+ // Erase the specified iterator from the btree. The iterator must be valid
387
+ // (i.e. not equal to end()). Return an iterator pointing to the node after
388
+ // the one that was erased (or end() if none exists).
389
+ iterator erase(const iterator &iter) { return this->tree_.erase(iter); }
390
+ void erase(const iterator &first, const iterator &last) {
391
+ this->tree_.erase(first, last);
392
+ }
393
+ };
394
+
395
+ // A base class for btree_multimap.
396
+ template <typename Tree>
397
+ class btree_multimap_container : public btree_multiset_container<Tree> {
398
+ using super_type = btree_multiset_container<Tree>;
399
+
400
+ public:
401
+ using mapped_type = typename Tree::mapped_type;
402
+
403
+ // Inherit constructors.
404
+ using super_type::super_type;
405
+ btree_multimap_container() {}
406
+ };
407
+
408
+ } // namespace internal_btree
409
+ } // namespace gtl
410
+
411
+ #endif // S2_UTIL_GTL_BTREE_CONTAINER_H_
@@ -0,0 +1,79 @@
1
+ // Copyright 2007 Google Inc. All Rights Reserved.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS-IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+
16
+ //
17
+ // A btree_map<> implements the STL unique sorted associative container
18
+ // interface and the pair associative container interface (a.k.a map<>) using a
19
+ // btree. A btree_multimap<> implements the STL multiple sorted associative
20
+ // container interface and the pair associative container interface (a.k.a
21
+ // multimap<>) using a btree. See btree.h for details of the btree
22
+ // implementation and caveats.
23
+ //
24
+
25
+ #ifndef S2_UTIL_GTL_BTREE_MAP_H_
26
+ #define S2_UTIL_GTL_BTREE_MAP_H_
27
+
28
+ #include <algorithm>
29
+ #include <functional>
30
+ #include <memory>
31
+ #include <string>
32
+ #include <utility>
33
+
34
+ #include "s2/util/gtl/btree.h" // IWYU pragma: export
35
+ #include "s2/util/gtl/btree_container.h" // IWYU pragma: export
36
+
37
+ namespace gtl {
38
+
39
+ template <typename Key, typename Value, typename Compare = std::less<Key>,
40
+ typename Alloc = std::allocator<std::pair<const Key, Value>>,
41
+ int TargetNodeSize = 256>
42
+ class btree_map
43
+ : public internal_btree::btree_map_container<
44
+ internal_btree::btree<internal_btree::map_params<
45
+ Key, Value, Compare, Alloc, TargetNodeSize, /*Multi=*/false>>> {
46
+ using Base = typename btree_map::btree_map_container;
47
+
48
+ public:
49
+ btree_map() {}
50
+ using Base::Base;
51
+ };
52
+
53
+ template <typename K, typename V, typename C, typename A, int T>
54
+ void swap(btree_map<K, V, C, A, T> &x, btree_map<K, V, C, A, T> &y) {
55
+ return x.swap(y);
56
+ }
57
+
58
+ template <typename Key, typename Value, typename Compare = std::less<Key>,
59
+ typename Alloc = std::allocator<std::pair<const Key, Value>>,
60
+ int TargetNodeSize = 256>
61
+ class btree_multimap
62
+ : public internal_btree::btree_multimap_container<
63
+ internal_btree::btree<internal_btree::map_params<
64
+ Key, Value, Compare, Alloc, TargetNodeSize, /*Multi=*/true>>> {
65
+ using Base = typename btree_multimap::btree_multimap_container;
66
+
67
+ public:
68
+ btree_multimap() {}
69
+ using Base::Base;
70
+ };
71
+
72
+ template <typename K, typename V, typename C, typename A, int T>
73
+ void swap(btree_multimap<K, V, C, A, T> &x, btree_multimap<K, V, C, A, T> &y) {
74
+ return x.swap(y);
75
+ }
76
+
77
+ } // namespace gtl
78
+
79
+ #endif // S2_UTIL_GTL_BTREE_MAP_H_
@@ -0,0 +1,73 @@
1
+ // Copyright 2007 Google Inc. All Rights Reserved.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS-IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+
16
+ //
17
+ // A btree_set<> implements the STL unique sorted associative container
18
+ // interface (a.k.a set<>) using a btree. A btree_multiset<> implements the STL
19
+ // multiple sorted associative container interface (a.k.a multiset<>) using a
20
+ // btree. See btree.h for details of the btree implementation and caveats.
21
+ //
22
+
23
+ #ifndef S2_UTIL_GTL_BTREE_SET_H_
24
+ #define S2_UTIL_GTL_BTREE_SET_H_
25
+
26
+ #include <functional>
27
+ #include <memory>
28
+ #include <string>
29
+
30
+ #include "s2/util/gtl/btree.h" // IWYU pragma: export
31
+ #include "s2/util/gtl/btree_container.h" // IWYU pragma: export
32
+
33
+ namespace gtl {
34
+
35
+ template <typename Key, typename Compare = std::less<Key>,
36
+ typename Alloc = std::allocator<Key>, int TargetNodeSize = 256>
37
+ class btree_set
38
+ : public internal_btree::btree_set_container<
39
+ internal_btree::btree<internal_btree::set_params<
40
+ Key, Compare, Alloc, TargetNodeSize, /*Multi=*/false>>> {
41
+ using Base = typename btree_set::btree_set_container;
42
+
43
+ public:
44
+ btree_set() {}
45
+ using Base::Base;
46
+ };
47
+
48
+ template <typename K, typename C, typename A, int T>
49
+ void swap(btree_set<K, C, A, T> &x, btree_set<K, C, A, T> &y) {
50
+ return x.swap(y);
51
+ }
52
+
53
+ template <typename Key, typename Compare = std::less<Key>,
54
+ typename Alloc = std::allocator<Key>, int TargetNodeSize = 256>
55
+ class btree_multiset
56
+ : public internal_btree::btree_multiset_container<
57
+ internal_btree::btree<internal_btree::set_params<
58
+ Key, Compare, Alloc, TargetNodeSize, /*Multi=*/true>>> {
59
+ using Base = typename btree_multiset::btree_multiset_container;
60
+
61
+ public:
62
+ btree_multiset() {}
63
+ using Base::Base;
64
+ };
65
+
66
+ template <typename K, typename C, typename A, int T>
67
+ void swap(btree_multiset<K, C, A, T> &x, btree_multiset<K, C, A, T> &y) {
68
+ return x.swap(y);
69
+ }
70
+
71
+ } // namespace gtl
72
+
73
+ #endif // S2_UTIL_GTL_BTREE_SET_H_