@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.
- package/.circleci/config.yml +45 -0
- package/.dockerignore +1 -0
- package/.gitmodules +3 -0
- package/CHANGELOG.md +33 -0
- package/LICENSE +201 -0
- package/README.md +147 -0
- package/binding.gyp +170 -0
- package/docker/Dockerfile.node20.test +8 -0
- package/docker/Dockerfile.node22.test +8 -0
- package/docker/Dockerfile.node24.test +8 -0
- package/index.d.ts +117 -0
- package/index.js +6 -0
- package/jest.config.js +184 -0
- package/package.json +43 -0
- package/publish-linux.sh +18 -0
- package/publish-osx.sh +19 -0
- package/src/builder.cc +84 -0
- package/src/builder.h +29 -0
- package/src/cell.cc +71 -0
- package/src/cell.h +26 -0
- package/src/cell_id.cc +210 -0
- package/src/cell_id.h +44 -0
- package/src/cell_union.cc +237 -0
- package/src/cell_union.h +34 -0
- package/src/earth.cc +185 -0
- package/src/earth.h +33 -0
- package/src/latlng.cc +132 -0
- package/src/latlng.h +28 -0
- package/src/loop.cc +51 -0
- package/src/loop.h +21 -0
- package/src/point.cc +69 -0
- package/src/point.h +23 -0
- package/src/polygon.cc +36 -0
- package/src/polygon.h +20 -0
- package/src/polyline.cc +186 -0
- package/src/polyline.h +34 -0
- package/src/region_coverer.cc +450 -0
- package/src/region_coverer.h +56 -0
- package/src/s2.cc +27 -0
- package/test/Cell.test.js +37 -0
- package/test/CellId.test.js +135 -0
- package/test/CellUnion.test.js +150 -0
- package/test/Earth.test.js +62 -0
- package/test/LatLng.test.js +45 -0
- package/test/Point.test.js +14 -0
- package/test/Polyline.test.js +78 -0
- package/test/RegionCoverer.test.js +301 -0
- package/test.sh +16 -0
- package/third_party/s2geometry/.travis.yml +163 -0
- package/third_party/s2geometry/AUTHORS +13 -0
- package/third_party/s2geometry/CONTRIBUTING.md +65 -0
- package/third_party/s2geometry/CONTRIBUTORS +30 -0
- package/third_party/s2geometry/LICENSE +202 -0
- package/third_party/s2geometry/NOTICE +5 -0
- package/third_party/s2geometry/README.md +127 -0
- package/third_party/s2geometry/doc/examples/point_index.cc +44 -0
- package/third_party/s2geometry/doc/examples/term_index.cc +99 -0
- package/third_party/s2geometry/doc/examples/term_index.py +101 -0
- package/third_party/s2geometry/src/python/coder.i +125 -0
- package/third_party/s2geometry/src/python/pywraps2_test.py +786 -0
- package/third_party/s2geometry/src/python/s2.i +37 -0
- package/third_party/s2geometry/src/python/s2_common.i +756 -0
- package/third_party/s2geometry/src/s2/_fp_contract_off.h +60 -0
- package/third_party/s2geometry/src/s2/base/casts.h +318 -0
- package/third_party/s2geometry/src/s2/base/commandlineflags.h +67 -0
- package/third_party/s2geometry/src/s2/base/integral_types.h +31 -0
- package/third_party/s2geometry/src/s2/base/log_severity.h +40 -0
- package/third_party/s2geometry/src/s2/base/logging.h +173 -0
- package/third_party/s2geometry/src/s2/base/mutex.h +61 -0
- package/third_party/s2geometry/src/s2/base/port.h +999 -0
- package/third_party/s2geometry/src/s2/base/spinlock.h +60 -0
- package/third_party/s2geometry/src/s2/base/stringprintf.cc +107 -0
- package/third_party/s2geometry/src/s2/base/stringprintf.h +53 -0
- package/third_party/s2geometry/src/s2/base/strtoint.cc +65 -0
- package/third_party/s2geometry/src/s2/base/strtoint.h +106 -0
- package/third_party/s2geometry/src/s2/base/timer.h +50 -0
- package/third_party/s2geometry/src/s2/encoded_s2cell_id_vector.cc +164 -0
- package/third_party/s2geometry/src/s2/encoded_s2cell_id_vector.h +110 -0
- package/third_party/s2geometry/src/s2/encoded_s2cell_id_vector_test.cc +232 -0
- package/third_party/s2geometry/src/s2/encoded_s2point_vector.cc +838 -0
- package/third_party/s2geometry/src/s2/encoded_s2point_vector.h +140 -0
- package/third_party/s2geometry/src/s2/encoded_s2point_vector_test.cc +344 -0
- package/third_party/s2geometry/src/s2/encoded_s2shape_index.cc +181 -0
- package/third_party/s2geometry/src/s2/encoded_s2shape_index.h +276 -0
- package/third_party/s2geometry/src/s2/encoded_s2shape_index_test.cc +244 -0
- package/third_party/s2geometry/src/s2/encoded_string_vector.cc +66 -0
- package/third_party/s2geometry/src/s2/encoded_string_vector.h +164 -0
- package/third_party/s2geometry/src/s2/encoded_string_vector_test.cc +69 -0
- package/third_party/s2geometry/src/s2/encoded_uint_vector.h +299 -0
- package/third_party/s2geometry/src/s2/encoded_uint_vector_test.cc +124 -0
- package/third_party/s2geometry/src/s2/id_set_lexicon.cc +81 -0
- package/third_party/s2geometry/src/s2/id_set_lexicon.h +199 -0
- package/third_party/s2geometry/src/s2/id_set_lexicon_test.cc +70 -0
- package/third_party/s2geometry/src/s2/mutable_s2shape_index.cc +1585 -0
- package/third_party/s2geometry/src/s2/mutable_s2shape_index.h +600 -0
- package/third_party/s2geometry/src/s2/mutable_s2shape_index_test.cc +589 -0
- package/third_party/s2geometry/src/s2/r1interval.h +220 -0
- package/third_party/s2geometry/src/s2/r1interval_test.cc +185 -0
- package/third_party/s2geometry/src/s2/r2.h +26 -0
- package/third_party/s2geometry/src/s2/r2rect.cc +93 -0
- package/third_party/s2geometry/src/s2/r2rect.h +234 -0
- package/third_party/s2geometry/src/s2/r2rect_test.cc +228 -0
- package/third_party/s2geometry/src/s2/s1angle.cc +54 -0
- package/third_party/s2geometry/src/s2/s1angle.h +336 -0
- package/third_party/s2geometry/src/s2/s1angle_test.cc +185 -0
- package/third_party/s2geometry/src/s2/s1chord_angle.cc +159 -0
- package/third_party/s2geometry/src/s2/s1chord_angle.h +369 -0
- package/third_party/s2geometry/src/s2/s1chord_angle_test.cc +207 -0
- package/third_party/s2geometry/src/s2/s1interval.cc +296 -0
- package/third_party/s2geometry/src/s2/s1interval.h +266 -0
- package/third_party/s2geometry/src/s2/s1interval_test.cc +469 -0
- package/third_party/s2geometry/src/s2/s2boolean_operation.cc +2391 -0
- package/third_party/s2geometry/src/s2/s2boolean_operation.h +501 -0
- package/third_party/s2geometry/src/s2/s2boolean_operation_test.cc +1400 -0
- package/third_party/s2geometry/src/s2/s2builder.cc +1828 -0
- package/third_party/s2geometry/src/s2/s2builder.h +1057 -0
- package/third_party/s2geometry/src/s2/s2builder_graph.cc +1084 -0
- package/third_party/s2geometry/src/s2/s2builder_graph.h +799 -0
- package/third_party/s2geometry/src/s2/s2builder_graph_test.cc +462 -0
- package/third_party/s2geometry/src/s2/s2builder_layer.h +50 -0
- package/third_party/s2geometry/src/s2/s2builder_test.cc +1329 -0
- package/third_party/s2geometry/src/s2/s2builderutil_closed_set_normalizer.cc +313 -0
- package/third_party/s2geometry/src/s2/s2builderutil_closed_set_normalizer.h +221 -0
- package/third_party/s2geometry/src/s2/s2builderutil_closed_set_normalizer_test.cc +261 -0
- package/third_party/s2geometry/src/s2/s2builderutil_find_polygon_degeneracies.cc +392 -0
- package/third_party/s2geometry/src/s2/s2builderutil_find_polygon_degeneracies.h +86 -0
- package/third_party/s2geometry/src/s2/s2builderutil_find_polygon_degeneracies_test.cc +182 -0
- package/third_party/s2geometry/src/s2/s2builderutil_graph_shape.h +57 -0
- package/third_party/s2geometry/src/s2/s2builderutil_lax_polygon_layer.cc +212 -0
- package/third_party/s2geometry/src/s2/s2builderutil_lax_polygon_layer.h +218 -0
- package/third_party/s2geometry/src/s2/s2builderutil_lax_polygon_layer_test.cc +367 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2point_vector_layer.cc +74 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2point_vector_layer.h +122 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2point_vector_layer_test.cc +167 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polygon_layer.cc +191 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polygon_layer.h +211 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polygon_layer_test.cc +312 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_layer.cc +105 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_layer.h +174 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_layer_test.cc +220 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_vector_layer.cc +98 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_vector_layer.h +292 -0
- package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_vector_layer_test.cc +233 -0
- package/third_party/s2geometry/src/s2/s2builderutil_snap_functions.cc +354 -0
- package/third_party/s2geometry/src/s2/s2builderutil_snap_functions.h +239 -0
- package/third_party/s2geometry/src/s2/s2builderutil_snap_functions_test.cc +716 -0
- package/third_party/s2geometry/src/s2/s2builderutil_testing.cc +37 -0
- package/third_party/s2geometry/src/s2/s2builderutil_testing.h +100 -0
- package/third_party/s2geometry/src/s2/s2builderutil_testing_test.cc +85 -0
- package/third_party/s2geometry/src/s2/s2cap.cc +347 -0
- package/third_party/s2geometry/src/s2/s2cap.h +286 -0
- package/third_party/s2geometry/src/s2/s2cap_test.cc +379 -0
- package/third_party/s2geometry/src/s2/s2cell.cc +552 -0
- package/third_party/s2geometry/src/s2/s2cell.h +249 -0
- package/third_party/s2geometry/src/s2/s2cell_id.cc +619 -0
- package/third_party/s2geometry/src/s2/s2cell_id.h +705 -0
- package/third_party/s2geometry/src/s2/s2cell_id_test.cc +633 -0
- package/third_party/s2geometry/src/s2/s2cell_index.cc +149 -0
- package/third_party/s2geometry/src/s2/s2cell_index.h +660 -0
- package/third_party/s2geometry/src/s2/s2cell_index_test.cc +411 -0
- package/third_party/s2geometry/src/s2/s2cell_test.cc +687 -0
- package/third_party/s2geometry/src/s2/s2cell_union.cc +515 -0
- package/third_party/s2geometry/src/s2/s2cell_union.h +399 -0
- package/third_party/s2geometry/src/s2/s2cell_union_test.cc +598 -0
- package/third_party/s2geometry/src/s2/s2centroids.cc +84 -0
- package/third_party/s2geometry/src/s2/s2centroids.h +87 -0
- package/third_party/s2geometry/src/s2/s2centroids_test.cc +82 -0
- package/third_party/s2geometry/src/s2/s2closest_cell_query.cc +123 -0
- package/third_party/s2geometry/src/s2/s2closest_cell_query.h +385 -0
- package/third_party/s2geometry/src/s2/s2closest_cell_query_base.h +841 -0
- package/third_party/s2geometry/src/s2/s2closest_cell_query_base_test.cc +63 -0
- package/third_party/s2geometry/src/s2/s2closest_cell_query_test.cc +412 -0
- package/third_party/s2geometry/src/s2/s2closest_edge_query.cc +106 -0
- package/third_party/s2geometry/src/s2/s2closest_edge_query.h +421 -0
- package/third_party/s2geometry/src/s2/s2closest_edge_query_base.h +946 -0
- package/third_party/s2geometry/src/s2/s2closest_edge_query_base_test.cc +59 -0
- package/third_party/s2geometry/src/s2/s2closest_edge_query_test.cc +505 -0
- package/third_party/s2geometry/src/s2/s2closest_edge_query_testing.h +91 -0
- package/third_party/s2geometry/src/s2/s2closest_point_query.cc +66 -0
- package/third_party/s2geometry/src/s2/s2closest_point_query.h +465 -0
- package/third_party/s2geometry/src/s2/s2closest_point_query_base.h +767 -0
- package/third_party/s2geometry/src/s2/s2closest_point_query_base_test.cc +63 -0
- package/third_party/s2geometry/src/s2/s2closest_point_query_test.cc +312 -0
- package/third_party/s2geometry/src/s2/s2contains_point_query.h +328 -0
- package/third_party/s2geometry/src/s2/s2contains_point_query_test.cc +159 -0
- package/third_party/s2geometry/src/s2/s2contains_vertex_query.cc +39 -0
- package/third_party/s2geometry/src/s2/s2contains_vertex_query.h +66 -0
- package/third_party/s2geometry/src/s2/s2contains_vertex_query_test.cc +67 -0
- package/third_party/s2geometry/src/s2/s2convex_hull_query.cc +198 -0
- package/third_party/s2geometry/src/s2/s2convex_hull_query.h +110 -0
- package/third_party/s2geometry/src/s2/s2convex_hull_query_test.cc +208 -0
- package/third_party/s2geometry/src/s2/s2coords.cc +146 -0
- package/third_party/s2geometry/src/s2/s2coords.h +459 -0
- package/third_party/s2geometry/src/s2/s2coords_internal.h +71 -0
- package/third_party/s2geometry/src/s2/s2coords_test.cc +218 -0
- package/third_party/s2geometry/src/s2/s2crossing_edge_query.cc +380 -0
- package/third_party/s2geometry/src/s2/s2crossing_edge_query.h +220 -0
- package/third_party/s2geometry/src/s2/s2crossing_edge_query_test.cc +382 -0
- package/third_party/s2geometry/src/s2/s2debug.cc +23 -0
- package/third_party/s2geometry/src/s2/s2debug.h +69 -0
- package/third_party/s2geometry/src/s2/s2distance_target.h +165 -0
- package/third_party/s2geometry/src/s2/s2earth.cc +52 -0
- package/third_party/s2geometry/src/s2/s2earth.h +268 -0
- package/third_party/s2geometry/src/s2/s2earth_test.cc +146 -0
- package/third_party/s2geometry/src/s2/s2edge_clipping.cc +462 -0
- package/third_party/s2geometry/src/s2/s2edge_clipping.h +183 -0
- package/third_party/s2geometry/src/s2/s2edge_clipping_test.cc +335 -0
- package/third_party/s2geometry/src/s2/s2edge_crosser.cc +85 -0
- package/third_party/s2geometry/src/s2/s2edge_crosser.h +343 -0
- package/third_party/s2geometry/src/s2/s2edge_crosser_test.cc +264 -0
- package/third_party/s2geometry/src/s2/s2edge_crossings.cc +515 -0
- package/third_party/s2geometry/src/s2/s2edge_crossings.h +138 -0
- package/third_party/s2geometry/src/s2/s2edge_crossings_internal.h +59 -0
- package/third_party/s2geometry/src/s2/s2edge_crossings_test.cc +246 -0
- package/third_party/s2geometry/src/s2/s2edge_distances.cc +419 -0
- package/third_party/s2geometry/src/s2/s2edge_distances.h +192 -0
- package/third_party/s2geometry/src/s2/s2edge_distances_test.cc +539 -0
- package/third_party/s2geometry/src/s2/s2edge_tessellator.cc +276 -0
- package/third_party/s2geometry/src/s2/s2edge_tessellator.h +101 -0
- package/third_party/s2geometry/src/s2/s2edge_tessellator_test.cc +492 -0
- package/third_party/s2geometry/src/s2/s2edge_vector_shape.h +85 -0
- package/third_party/s2geometry/src/s2/s2edge_vector_shape_test.cc +66 -0
- package/third_party/s2geometry/src/s2/s2error.cc +29 -0
- package/third_party/s2geometry/src/s2/s2error.h +147 -0
- package/third_party/s2geometry/src/s2/s2error_test.cc +31 -0
- package/third_party/s2geometry/src/s2/s2furthest_edge_query.cc +117 -0
- package/third_party/s2geometry/src/s2/s2furthest_edge_query.h +439 -0
- package/third_party/s2geometry/src/s2/s2furthest_edge_query_test.cc +487 -0
- package/third_party/s2geometry/src/s2/s2latlng.cc +90 -0
- package/third_party/s2geometry/src/s2/s2latlng.h +234 -0
- package/third_party/s2geometry/src/s2/s2latlng_rect.cc +727 -0
- package/third_party/s2geometry/src/s2/s2latlng_rect.h +434 -0
- package/third_party/s2geometry/src/s2/s2latlng_rect_bounder.cc +344 -0
- package/third_party/s2geometry/src/s2/s2latlng_rect_bounder.h +89 -0
- package/third_party/s2geometry/src/s2/s2latlng_rect_bounder_test.cc +306 -0
- package/third_party/s2geometry/src/s2/s2latlng_rect_test.cc +1030 -0
- package/third_party/s2geometry/src/s2/s2latlng_test.cc +165 -0
- package/third_party/s2geometry/src/s2/s2lax_loop_shape.cc +104 -0
- package/third_party/s2geometry/src/s2/s2lax_loop_shape.h +153 -0
- package/third_party/s2geometry/src/s2/s2lax_loop_shape_test.cc +101 -0
- package/third_party/s2geometry/src/s2/s2lax_polygon_shape.cc +348 -0
- package/third_party/s2geometry/src/s2/s2lax_polygon_shape.h +183 -0
- package/third_party/s2geometry/src/s2/s2lax_polygon_shape_test.cc +234 -0
- package/third_party/s2geometry/src/s2/s2lax_polyline_shape.cc +118 -0
- package/third_party/s2geometry/src/s2/s2lax_polyline_shape.h +124 -0
- package/third_party/s2geometry/src/s2/s2lax_polyline_shape_test.cc +62 -0
- package/third_party/s2geometry/src/s2/s2loop.cc +1509 -0
- package/third_party/s2geometry/src/s2/s2loop.h +711 -0
- package/third_party/s2geometry/src/s2/s2loop_measures.cc +313 -0
- package/third_party/s2geometry/src/s2/s2loop_measures.h +280 -0
- package/third_party/s2geometry/src/s2/s2loop_measures_test.cc +367 -0
- package/third_party/s2geometry/src/s2/s2loop_test.cc +1371 -0
- package/third_party/s2geometry/src/s2/s2max_distance_targets.cc +265 -0
- package/third_party/s2geometry/src/s2/s2max_distance_targets.h +241 -0
- package/third_party/s2geometry/src/s2/s2max_distance_targets_test.cc +367 -0
- package/third_party/s2geometry/src/s2/s2measures.cc +128 -0
- package/third_party/s2geometry/src/s2/s2measures.h +78 -0
- package/third_party/s2geometry/src/s2/s2measures_test.cc +135 -0
- package/third_party/s2geometry/src/s2/s2metrics.cc +122 -0
- package/third_party/s2geometry/src/s2/s2metrics.h +199 -0
- package/third_party/s2geometry/src/s2/s2metrics_test.cc +127 -0
- package/third_party/s2geometry/src/s2/s2min_distance_targets.cc +295 -0
- package/third_party/s2geometry/src/s2/s2min_distance_targets.h +273 -0
- package/third_party/s2geometry/src/s2/s2min_distance_targets_test.cc +239 -0
- package/third_party/s2geometry/src/s2/s2padded_cell.cc +162 -0
- package/third_party/s2geometry/src/s2/s2padded_cell.h +108 -0
- package/third_party/s2geometry/src/s2/s2padded_cell_test.cc +138 -0
- package/third_party/s2geometry/src/s2/s2point.h +38 -0
- package/third_party/s2geometry/src/s2/s2point_compression.cc +388 -0
- package/third_party/s2geometry/src/s2/s2point_compression.h +78 -0
- package/third_party/s2geometry/src/s2/s2point_compression_test.cc +305 -0
- package/third_party/s2geometry/src/s2/s2point_index.h +345 -0
- package/third_party/s2geometry/src/s2/s2point_index_test.cc +147 -0
- package/third_party/s2geometry/src/s2/s2point_region.cc +72 -0
- package/third_party/s2geometry/src/s2/s2point_region.h +76 -0
- package/third_party/s2geometry/src/s2/s2point_region_test.cc +100 -0
- package/third_party/s2geometry/src/s2/s2point_span.h +57 -0
- package/third_party/s2geometry/src/s2/s2point_test.cc +47 -0
- package/third_party/s2geometry/src/s2/s2point_vector_shape.h +127 -0
- package/third_party/s2geometry/src/s2/s2point_vector_shape_test.cc +59 -0
- package/third_party/s2geometry/src/s2/s2pointutil.cc +131 -0
- package/third_party/s2geometry/src/s2/s2pointutil.h +138 -0
- package/third_party/s2geometry/src/s2/s2pointutil_test.cc +157 -0
- package/third_party/s2geometry/src/s2/s2polygon.cc +1569 -0
- package/third_party/s2geometry/src/s2/s2polygon.h +934 -0
- package/third_party/s2geometry/src/s2/s2polygon_test.cc +3025 -0
- package/third_party/s2geometry/src/s2/s2polyline.cc +645 -0
- package/third_party/s2geometry/src/s2/s2polyline.h +379 -0
- package/third_party/s2geometry/src/s2/s2polyline_alignment.cc +414 -0
- package/third_party/s2geometry/src/s2/s2polyline_alignment.h +245 -0
- package/third_party/s2geometry/src/s2/s2polyline_alignment_internal.h +158 -0
- package/third_party/s2geometry/src/s2/s2polyline_alignment_test.cc +610 -0
- package/third_party/s2geometry/src/s2/s2polyline_measures.cc +42 -0
- package/third_party/s2geometry/src/s2/s2polyline_measures.h +53 -0
- package/third_party/s2geometry/src/s2/s2polyline_measures_test.cc +57 -0
- package/third_party/s2geometry/src/s2/s2polyline_simplifier.cc +187 -0
- package/third_party/s2geometry/src/s2/s2polyline_simplifier.h +109 -0
- package/third_party/s2geometry/src/s2/s2polyline_simplifier_test.cc +165 -0
- package/third_party/s2geometry/src/s2/s2polyline_test.cc +554 -0
- package/third_party/s2geometry/src/s2/s2predicates.cc +1486 -0
- package/third_party/s2geometry/src/s2/s2predicates.h +282 -0
- package/third_party/s2geometry/src/s2/s2predicates_internal.h +135 -0
- package/third_party/s2geometry/src/s2/s2predicates_test.cc +1427 -0
- package/third_party/s2geometry/src/s2/s2projections.cc +109 -0
- package/third_party/s2geometry/src/s2/s2projections.h +161 -0
- package/third_party/s2geometry/src/s2/s2projections_test.cc +78 -0
- package/third_party/s2geometry/src/s2/s2r2rect.cc +88 -0
- package/third_party/s2geometry/src/s2/s2r2rect.h +292 -0
- package/third_party/s2geometry/src/s2/s2r2rect_test.cc +312 -0
- package/third_party/s2geometry/src/s2/s2region.cc +26 -0
- package/third_party/s2geometry/src/s2/s2region.h +142 -0
- package/third_party/s2geometry/src/s2/s2region_coverer.cc +514 -0
- package/third_party/s2geometry/src/s2/s2region_coverer.h +356 -0
- package/third_party/s2geometry/src/s2/s2region_coverer_test.cc +509 -0
- package/third_party/s2geometry/src/s2/s2region_intersection.cc +84 -0
- package/third_party/s2geometry/src/s2/s2region_intersection.h +79 -0
- package/third_party/s2geometry/src/s2/s2region_term_indexer.cc +270 -0
- package/third_party/s2geometry/src/s2/s2region_term_indexer.h +299 -0
- package/third_party/s2geometry/src/s2/s2region_term_indexer_test.cc +209 -0
- package/third_party/s2geometry/src/s2/s2region_test.cc +370 -0
- package/third_party/s2geometry/src/s2/s2region_union.cc +90 -0
- package/third_party/s2geometry/src/s2/s2region_union.h +83 -0
- package/third_party/s2geometry/src/s2/s2region_union_test.cc +89 -0
- package/third_party/s2geometry/src/s2/s2shape.h +283 -0
- package/third_party/s2geometry/src/s2/s2shape_index.cc +321 -0
- package/third_party/s2geometry/src/s2/s2shape_index.h +781 -0
- package/third_party/s2geometry/src/s2/s2shape_index_buffered_region.cc +113 -0
- package/third_party/s2geometry/src/s2/s2shape_index_buffered_region.h +135 -0
- package/third_party/s2geometry/src/s2/s2shape_index_buffered_region_test.cc +162 -0
- package/third_party/s2geometry/src/s2/s2shape_index_measures.cc +92 -0
- package/third_party/s2geometry/src/s2/s2shape_index_measures.h +100 -0
- package/third_party/s2geometry/src/s2/s2shape_index_measures_test.cc +136 -0
- package/third_party/s2geometry/src/s2/s2shape_index_region.h +350 -0
- package/third_party/s2geometry/src/s2/s2shape_index_region_test.cc +161 -0
- package/third_party/s2geometry/src/s2/s2shape_index_test.cc +24 -0
- package/third_party/s2geometry/src/s2/s2shape_measures.cc +138 -0
- package/third_party/s2geometry/src/s2/s2shape_measures.h +95 -0
- package/third_party/s2geometry/src/s2/s2shape_measures_test.cc +139 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_build_polygon_boundaries.cc +120 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_build_polygon_boundaries.h +66 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_build_polygon_boundaries_test.cc +170 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_coding.cc +253 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_coding.h +283 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_coding_test.cc +54 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_contains_brute_force.cc +40 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_contains_brute_force.h +41 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_contains_brute_force_test.cc +55 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_count_edges.h +57 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_count_edges_test.cc +43 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_edge_iterator.cc +45 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_edge_iterator.h +72 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_edge_iterator_test.cc +116 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_get_reference_point.cc +107 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_get_reference_point.h +48 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_get_reference_point_test.cc +104 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_range_iterator.cc +58 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_range_iterator.h +65 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_range_iterator_test.cc +61 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_shape_edge.h +58 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_shape_edge_id.h +97 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_testing.cc +104 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_testing.h +36 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_visit_crossing_edge_pairs.cc +440 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_visit_crossing_edge_pairs.h +72 -0
- package/third_party/s2geometry/src/s2/s2shapeutil_visit_crossing_edge_pairs_test.cc +184 -0
- package/third_party/s2geometry/src/s2/s2testing.cc +464 -0
- package/third_party/s2geometry/src/s2/s2testing.h +385 -0
- package/third_party/s2geometry/src/s2/s2testing_test.cc +166 -0
- package/third_party/s2geometry/src/s2/s2text_format.cc +506 -0
- package/third_party/s2geometry/src/s2/s2text_format.h +289 -0
- package/third_party/s2geometry/src/s2/s2text_format_test.cc +417 -0
- package/third_party/s2geometry/src/s2/s2wedge_relations.cc +80 -0
- package/third_party/s2geometry/src/s2/s2wedge_relations.h +64 -0
- package/third_party/s2geometry/src/s2/s2wedge_relations_test.cc +89 -0
- package/third_party/s2geometry/src/s2/sequence_lexicon.h +296 -0
- package/third_party/s2geometry/src/s2/sequence_lexicon_test.cc +113 -0
- package/third_party/s2geometry/src/s2/strings/ostringstream.cc +35 -0
- package/third_party/s2geometry/src/s2/strings/ostringstream.h +105 -0
- package/third_party/s2geometry/src/s2/strings/serialize.cc +46 -0
- package/third_party/s2geometry/src/s2/strings/serialize.h +40 -0
- package/third_party/s2geometry/src/s2/third_party/absl/algorithm/algorithm.h +187 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/attributes.h +666 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/casts.h +189 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/config.h +462 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/dynamic_annotations.cc +129 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/dynamic_annotations.h +394 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/atomic_hook.h +168 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/identity.h +33 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/inline_variable.h +117 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/invoke.h +188 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/raw_logging.cc +254 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/raw_logging.h +205 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/throw_delegate.cc +106 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/throw_delegate.h +71 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/internal/unaligned_access.h +322 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/log_severity.h +77 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/macros.h +236 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/optimization.h +177 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/policy_checks.h +124 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/port.h +97 -0
- package/third_party/s2geometry/src/s2/third_party/absl/base/thread_annotations.h +277 -0
- package/third_party/s2geometry/src/s2/third_party/absl/container/fixed_array.h +523 -0
- package/third_party/s2geometry/src/s2/third_party/absl/container/inlined_vector.h +1453 -0
- package/third_party/s2geometry/src/s2/third_party/absl/container/internal/compressed_tuple.h +191 -0
- package/third_party/s2geometry/src/s2/third_party/absl/container/internal/container_memory.h +424 -0
- package/third_party/s2geometry/src/s2/third_party/absl/container/internal/layout.h +739 -0
- package/third_party/s2geometry/src/s2/third_party/absl/memory/memory.h +755 -0
- package/third_party/s2geometry/src/s2/third_party/absl/meta/type_traits.h +436 -0
- package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128.cc +232 -0
- package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128.h +656 -0
- package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128_have_intrinsic.inc +3 -0
- package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128_no_intrinsic.inc +3 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/ascii.cc +198 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/ascii.h +239 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/ascii_ctype.h +66 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/bits.h +53 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/memutil.cc +110 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/memutil.h +146 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/resize_uninitialized.h +72 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/match.cc +38 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/match.h +89 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/numbers.cc +909 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/numbers.h +187 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/str_cat.cc +240 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/str_cat.h +398 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/str_join.h +22 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/str_split.cc +47 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/str_split.h +43 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/string_view.cc +245 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/string_view.h +602 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/strip.cc +42 -0
- package/third_party/s2geometry/src/s2/third_party/absl/strings/strip.h +130 -0
- package/third_party/s2geometry/src/s2/third_party/absl/types/span.h +793 -0
- package/third_party/s2geometry/src/s2/third_party/absl/utility/utility.h +299 -0
- package/third_party/s2geometry/src/s2/util/bits/bit-interleave.cc +274 -0
- package/third_party/s2geometry/src/s2/util/bits/bit-interleave.h +53 -0
- package/third_party/s2geometry/src/s2/util/bits/bits.cc +155 -0
- package/third_party/s2geometry/src/s2/util/bits/bits.h +745 -0
- package/third_party/s2geometry/src/s2/util/coding/coder.cc +83 -0
- package/third_party/s2geometry/src/s2/util/coding/coder.h +553 -0
- package/third_party/s2geometry/src/s2/util/coding/nth-derivative.h +134 -0
- package/third_party/s2geometry/src/s2/util/coding/transforms.h +62 -0
- package/third_party/s2geometry/src/s2/util/coding/varint.cc +289 -0
- package/third_party/s2geometry/src/s2/util/coding/varint.h +476 -0
- package/third_party/s2geometry/src/s2/util/endian/endian.h +859 -0
- package/third_party/s2geometry/src/s2/util/gtl/btree.h +2471 -0
- package/third_party/s2geometry/src/s2/util/gtl/btree_container.h +411 -0
- package/third_party/s2geometry/src/s2/util/gtl/btree_map.h +79 -0
- package/third_party/s2geometry/src/s2/util/gtl/btree_set.h +73 -0
- package/third_party/s2geometry/src/s2/util/gtl/compact_array.h +653 -0
- package/third_party/s2geometry/src/s2/util/gtl/container_logging.h +291 -0
- package/third_party/s2geometry/src/s2/util/gtl/dense_hash_set.h +358 -0
- package/third_party/s2geometry/src/s2/util/gtl/densehashtable.h +1493 -0
- package/third_party/s2geometry/src/s2/util/gtl/hashtable_common.h +253 -0
- package/third_party/s2geometry/src/s2/util/gtl/layout.h +28 -0
- package/third_party/s2geometry/src/s2/util/gtl/legacy_random_shuffle.h +77 -0
- package/third_party/s2geometry/src/s2/util/hash/mix.h +76 -0
- package/third_party/s2geometry/src/s2/util/math/exactfloat/exactfloat.cc +832 -0
- package/third_party/s2geometry/src/s2/util/math/exactfloat/exactfloat.h +646 -0
- package/third_party/s2geometry/src/s2/util/math/mathutil.cc +75 -0
- package/third_party/s2geometry/src/s2/util/math/mathutil.h +189 -0
- package/third_party/s2geometry/src/s2/util/math/matrix3x3.h +574 -0
- package/third_party/s2geometry/src/s2/util/math/vector.h +569 -0
- package/third_party/s2geometry/src/s2/util/math/vector3_hash.h +54 -0
- package/third_party/s2geometry/src/s2/util/units/length-units.cc +21 -0
- package/third_party/s2geometry/src/s2/util/units/length-units.h +135 -0
- package/third_party/s2geometry/src/s2/util/units/physical-units.h +313 -0
- package/third_party/s2geometry/src/s2/value_lexicon.h +234 -0
- package/third_party/s2geometry/src/s2/value_lexicon_test.cc +121 -0
- package/third_party/s2geometry/third_party/cmake/FindGFlags.cmake +48 -0
- package/third_party/s2geometry/third_party/cmake/FindGlog.cmake +48 -0
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
// Copyright 2013 Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
// All Rights Reserved.
|
|
17
|
+
//
|
|
18
|
+
// Utilities for container logging.
|
|
19
|
+
// TODO(user): Broaden the scope and rename to "stream_util.h"
|
|
20
|
+
//
|
|
21
|
+
|
|
22
|
+
#ifndef S2_UTIL_GTL_CONTAINER_LOGGING_H_
|
|
23
|
+
#define S2_UTIL_GTL_CONTAINER_LOGGING_H_
|
|
24
|
+
|
|
25
|
+
#include <limits>
|
|
26
|
+
#include <ostream>
|
|
27
|
+
#include <string>
|
|
28
|
+
#include <type_traits>
|
|
29
|
+
|
|
30
|
+
#include "s2/base/integral_types.h"
|
|
31
|
+
#include "s2/base/port.h"
|
|
32
|
+
#include "s2/strings/ostringstream.h"
|
|
33
|
+
|
|
34
|
+
namespace gtl {
|
|
35
|
+
|
|
36
|
+
// Several policy classes below determine how LogRangeToStream will
|
|
37
|
+
// format a range of items. A Policy class should have these methods:
|
|
38
|
+
//
|
|
39
|
+
// Called to print an individual container element.
|
|
40
|
+
// void Log(ostream &out, const ElementT &element) const;
|
|
41
|
+
//
|
|
42
|
+
// Called before printing the set of elements:
|
|
43
|
+
// void LogOpening(ostream &out) const;
|
|
44
|
+
//
|
|
45
|
+
// Called after printing the set of elements:
|
|
46
|
+
// void LogClosing(ostream &out) const;
|
|
47
|
+
//
|
|
48
|
+
// Called before printing the first element:
|
|
49
|
+
// void LogFirstSeparator(ostream &out) const;
|
|
50
|
+
//
|
|
51
|
+
// Called before printing the remaining elements:
|
|
52
|
+
// void LogSeparator(ostream &out) const;
|
|
53
|
+
//
|
|
54
|
+
// Returns the maximum number of elements to print:
|
|
55
|
+
// int64 MaxElements() const;
|
|
56
|
+
//
|
|
57
|
+
// Called to print an indication that MaximumElements() was reached:
|
|
58
|
+
// void LogEllipsis(ostream &out) const;
|
|
59
|
+
|
|
60
|
+
namespace internal {
|
|
61
|
+
|
|
62
|
+
struct LogBase {
|
|
63
|
+
template <typename ElementT>
|
|
64
|
+
void Log(std::ostream &out, const ElementT &element) const { // NOLINT
|
|
65
|
+
out << element;
|
|
66
|
+
}
|
|
67
|
+
void LogEllipsis(std::ostream &out) const { // NOLINT
|
|
68
|
+
out << "...";
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
struct LogShortBase : public LogBase {
|
|
73
|
+
void LogOpening(std::ostream &out) const { out << "["; } // NOLINT
|
|
74
|
+
void LogClosing(std::ostream &out) const { out << "]"; } // NOLINT
|
|
75
|
+
void LogFirstSeparator(std::ostream &out) const { out << ""; } // NOLINT
|
|
76
|
+
void LogSeparator(std::ostream &out) const { out << ", "; } // NOLINT
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
struct LogMultilineBase : public LogBase {
|
|
80
|
+
void LogOpening(std::ostream &out) const { out << "["; } // NOLINT
|
|
81
|
+
void LogClosing(std::ostream &out) const { out << "\n]"; } // NOLINT
|
|
82
|
+
void LogFirstSeparator(std::ostream &out) const { out << "\n"; } // NOLINT
|
|
83
|
+
void LogSeparator(std::ostream &out) const { out << "\n"; } // NOLINT
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
struct LogLegacyBase : public LogBase {
|
|
87
|
+
void LogOpening(std::ostream &out) const { out << ""; } // NOLINT
|
|
88
|
+
void LogClosing(std::ostream &out) const { out << ""; } // NOLINT
|
|
89
|
+
void LogFirstSeparator(std::ostream &out) const { out << ""; } // NOLINT
|
|
90
|
+
void LogSeparator(std::ostream &out) const { out << " "; } // NOLINT
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
} // namespace internal
|
|
94
|
+
|
|
95
|
+
// LogShort uses [] braces and separates items with comma-spaces. For
|
|
96
|
+
// example "[1, 2, 3]".
|
|
97
|
+
struct LogShort : public internal::LogShortBase {
|
|
98
|
+
int64 MaxElements() const { return std::numeric_limits<int64>::max(); }
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
// LogShortUpToN(max_elements) formats the same as LogShort but prints no more
|
|
102
|
+
// than the max_elements elements.
|
|
103
|
+
class LogShortUpToN : public internal::LogShortBase {
|
|
104
|
+
public:
|
|
105
|
+
explicit LogShortUpToN(int64 max_elements) : max_elements_(max_elements) {}
|
|
106
|
+
int64 MaxElements() const { return max_elements_; }
|
|
107
|
+
|
|
108
|
+
private:
|
|
109
|
+
int64 max_elements_;
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
// LogShortUpTo100 formats the same as LogShort but prints no more
|
|
113
|
+
// than 100 elements.
|
|
114
|
+
struct LogShortUpTo100 : public LogShortUpToN {
|
|
115
|
+
LogShortUpTo100() : LogShortUpToN(100) {}
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
// LogMultiline uses [] braces and separates items with
|
|
119
|
+
// newlines. For example "[
|
|
120
|
+
// 1
|
|
121
|
+
// 2
|
|
122
|
+
// 3
|
|
123
|
+
// ]".
|
|
124
|
+
struct LogMultiline : public internal::LogMultilineBase {
|
|
125
|
+
int64 MaxElements() const { return std::numeric_limits<int64>::max(); }
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
// LogMultilineUpToN(max_elements) formats the same as LogMultiline but
|
|
129
|
+
// prints no more than max_elements elements.
|
|
130
|
+
class LogMultilineUpToN : public internal::LogMultilineBase {
|
|
131
|
+
public:
|
|
132
|
+
explicit LogMultilineUpToN(int64 max_elements)
|
|
133
|
+
: max_elements_(max_elements) {}
|
|
134
|
+
int64 MaxElements() const { return max_elements_; }
|
|
135
|
+
|
|
136
|
+
private:
|
|
137
|
+
int64 max_elements_;
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
// LogMultilineUpTo100 formats the same as LogMultiline but
|
|
141
|
+
// prints no more than 100 elements.
|
|
142
|
+
struct LogMultilineUpTo100 : public LogMultilineUpToN {
|
|
143
|
+
LogMultilineUpTo100() : LogMultilineUpToN(100) {}
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
// The legacy behavior of LogSequence() does not use braces and
|
|
147
|
+
// separates items with spaces. For example "1 2 3".
|
|
148
|
+
struct LogLegacyUpTo100 : public internal::LogLegacyBase {
|
|
149
|
+
int64 MaxElements() const { return 100; }
|
|
150
|
+
};
|
|
151
|
+
struct LogLegacy : public internal::LogLegacyBase {
|
|
152
|
+
int64 MaxElements() const { return std::numeric_limits<int64>::max(); }
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
// The default policy for new code.
|
|
156
|
+
typedef LogShortUpTo100 LogDefault;
|
|
157
|
+
|
|
158
|
+
// LogRangeToStream should be used to define operator<< for
|
|
159
|
+
// STL and STL-like containers. For example, see stl_logging.h.
|
|
160
|
+
template <typename IteratorT, typename PolicyT>
|
|
161
|
+
inline void LogRangeToStream(std::ostream &out, // NOLINT
|
|
162
|
+
IteratorT begin, IteratorT end,
|
|
163
|
+
const PolicyT &policy) {
|
|
164
|
+
policy.LogOpening(out);
|
|
165
|
+
for (size_t i = 0; begin != end && i < policy.MaxElements(); ++i, ++begin) {
|
|
166
|
+
if (i == 0) {
|
|
167
|
+
policy.LogFirstSeparator(out);
|
|
168
|
+
} else {
|
|
169
|
+
policy.LogSeparator(out);
|
|
170
|
+
}
|
|
171
|
+
policy.Log(out, *begin);
|
|
172
|
+
}
|
|
173
|
+
if (begin != end) {
|
|
174
|
+
policy.LogSeparator(out);
|
|
175
|
+
policy.LogEllipsis(out);
|
|
176
|
+
}
|
|
177
|
+
policy.LogClosing(out);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
namespace detail {
|
|
181
|
+
|
|
182
|
+
// RangeLogger is a helper class for gtl::LogRange and
|
|
183
|
+
// gtl::LogContainer; do not use it directly. This object
|
|
184
|
+
// captures iterators into the argument of the LogRange and
|
|
185
|
+
// LogContainer functions, so its lifetime should be confined to a
|
|
186
|
+
// single logging statement. Objects of this type should not be
|
|
187
|
+
// assigned to local variables.
|
|
188
|
+
template <typename IteratorT, typename PolicyT>
|
|
189
|
+
class RangeLogger {
|
|
190
|
+
public:
|
|
191
|
+
RangeLogger(const IteratorT &begin, const IteratorT &end,
|
|
192
|
+
const PolicyT &policy)
|
|
193
|
+
: begin_(begin), end_(end), policy_(policy) { }
|
|
194
|
+
|
|
195
|
+
friend std::ostream &operator<<(std::ostream &out, const RangeLogger &range) {
|
|
196
|
+
gtl::LogRangeToStream<IteratorT, PolicyT>(out, range.begin_, range.end_,
|
|
197
|
+
range.policy_);
|
|
198
|
+
return out;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// operator<< above is generally recommended. However, some situations may
|
|
202
|
+
// require a string, so a convenience str() method is provided as well.
|
|
203
|
+
string str() const {
|
|
204
|
+
string s;
|
|
205
|
+
::strings::OStringStream(&s) << *this;
|
|
206
|
+
return s;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
private:
|
|
210
|
+
IteratorT begin_;
|
|
211
|
+
IteratorT end_;
|
|
212
|
+
PolicyT policy_;
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
template <typename E>
|
|
216
|
+
class EnumLogger {
|
|
217
|
+
public:
|
|
218
|
+
explicit EnumLogger(E e) : e_(e) {}
|
|
219
|
+
|
|
220
|
+
friend std::ostream &operator<<(std::ostream &out, const EnumLogger &v) {
|
|
221
|
+
using I = typename std::underlying_type<E>::type;
|
|
222
|
+
return out << static_cast<I>(v.e_);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
private:
|
|
226
|
+
E e_;
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
} // namespace detail
|
|
230
|
+
|
|
231
|
+
// Log a range using "policy". For example:
|
|
232
|
+
//
|
|
233
|
+
// S2_LOG(INFO) << gtl::LogRange(start_pos, end_pos, gtl::LogMultiline());
|
|
234
|
+
//
|
|
235
|
+
// The above example will print the range using newlines between
|
|
236
|
+
// elements, enclosed in [] braces.
|
|
237
|
+
template <typename IteratorT, typename PolicyT>
|
|
238
|
+
detail::RangeLogger<IteratorT, PolicyT> LogRange(
|
|
239
|
+
const IteratorT &begin, const IteratorT &end, const PolicyT &policy) {
|
|
240
|
+
return gtl::detail::RangeLogger<IteratorT, PolicyT>(begin, end, policy);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// Log a range. For example:
|
|
244
|
+
//
|
|
245
|
+
// S2_LOG(INFO) << gtl::LogRange(start_pos, end_pos);
|
|
246
|
+
//
|
|
247
|
+
// By default, Range() uses the LogShortUpTo100 policy: comma-space
|
|
248
|
+
// separation, no newlines, and with limit of 100 items.
|
|
249
|
+
template <typename IteratorT>
|
|
250
|
+
detail::RangeLogger<IteratorT, LogDefault> LogRange(
|
|
251
|
+
const IteratorT &begin, const IteratorT &end) {
|
|
252
|
+
return gtl::LogRange(begin, end, LogDefault());
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// Log a container using "policy". For example:
|
|
256
|
+
//
|
|
257
|
+
// S2_LOG(INFO) << gtl::LogContainer(container, gtl::LogMultiline());
|
|
258
|
+
//
|
|
259
|
+
// The above example will print the container using newlines between
|
|
260
|
+
// elements, enclosed in [] braces.
|
|
261
|
+
template <typename ContainerT, typename PolicyT>
|
|
262
|
+
auto LogContainer(const ContainerT &container, const PolicyT &policy)
|
|
263
|
+
-> decltype(gtl::LogRange(container.begin(), container.end(), policy)) {
|
|
264
|
+
return gtl::LogRange(container.begin(), container.end(), policy);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// Log a container. For example:
|
|
268
|
+
//
|
|
269
|
+
// S2_LOG(INFO) << gtl::LogContainer(container);
|
|
270
|
+
//
|
|
271
|
+
// By default, Container() uses the LogShortUpTo100 policy: comma-space
|
|
272
|
+
// separation, no newlines, and with limit of 100 items.
|
|
273
|
+
template <typename ContainerT>
|
|
274
|
+
auto LogContainer(const ContainerT &container)
|
|
275
|
+
-> decltype(gtl::LogContainer(container, LogDefault())) {
|
|
276
|
+
return gtl::LogContainer(container, LogDefault());
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
// Log a (possibly scoped) enum. For example:
|
|
280
|
+
//
|
|
281
|
+
// enum class Color { kRed, kGreen, kBlue };
|
|
282
|
+
// S2_LOG(INFO) << gtl::LogEnum(kRed);
|
|
283
|
+
template <typename E>
|
|
284
|
+
detail::EnumLogger<E> LogEnum(E e) {
|
|
285
|
+
static_assert(std::is_enum<E>::value, "must be an enum");
|
|
286
|
+
return detail::EnumLogger<E>(e);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
} // namespace gtl
|
|
290
|
+
|
|
291
|
+
#endif // S2_UTIL_GTL_CONTAINER_LOGGING_H_
|
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
// Copyright 2005 Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
// All rights reserved.
|
|
17
|
+
//
|
|
18
|
+
// Redistribution and use in source and binary forms, with or without
|
|
19
|
+
// modification, are permitted provided that the following conditions are
|
|
20
|
+
// met:
|
|
21
|
+
//
|
|
22
|
+
// * Redistributions of source code must retain the above copyright
|
|
23
|
+
// notice, this list of conditions and the following disclaimer.
|
|
24
|
+
// * Redistributions in binary form must reproduce the above
|
|
25
|
+
// copyright notice, this list of conditions and the following disclaimer
|
|
26
|
+
// in the documentation and/or other materials provided with the
|
|
27
|
+
// distribution.
|
|
28
|
+
// * Neither the name of Google Inc. nor the names of its
|
|
29
|
+
// contributors may be used to endorse or promote products derived from
|
|
30
|
+
// this software without specific prior written permission.
|
|
31
|
+
//
|
|
32
|
+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
33
|
+
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
34
|
+
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
35
|
+
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
36
|
+
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
37
|
+
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
38
|
+
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
39
|
+
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
40
|
+
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
41
|
+
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
42
|
+
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
43
|
+
|
|
44
|
+
// ---
|
|
45
|
+
//
|
|
46
|
+
// This is just a very thin wrapper over densehashtable.h, just
|
|
47
|
+
// like sgi stl's stl_hash_set is a very thin wrapper over
|
|
48
|
+
// stl_hashtable.
|
|
49
|
+
//
|
|
50
|
+
// This is more different from dense_hash_map than you might think,
|
|
51
|
+
// because all iterators for sets are const (you obviously can't
|
|
52
|
+
// change the key, and for sets there is no value).
|
|
53
|
+
//
|
|
54
|
+
// NOTE: this is exactly like sparse_hash_set.h, with the word
|
|
55
|
+
// "sparse" replaced by "dense", except for the addition of
|
|
56
|
+
// set_empty_key().
|
|
57
|
+
//
|
|
58
|
+
// YOU MUST CALL SET_EMPTY_KEY() IMMEDIATELY AFTER CONSTRUCTION.
|
|
59
|
+
//
|
|
60
|
+
// Otherwise your program will die in mysterious ways. (Note if you
|
|
61
|
+
// use the constructor that takes an InputIterator range, you pass in
|
|
62
|
+
// the empty key in the constructor, rather than after. As a result,
|
|
63
|
+
// this constructor differs from the standard STL version.)
|
|
64
|
+
//
|
|
65
|
+
// In other respects, we adhere mostly to the STL semantics for
|
|
66
|
+
// hash-map. One important exception is that insert() may invalidate
|
|
67
|
+
// iterators entirely -- STL semantics are that insert() may reorder
|
|
68
|
+
// iterators, but they all still refer to something valid in the
|
|
69
|
+
// hashtable. Not so for us. Likewise, insert() may invalidate
|
|
70
|
+
// pointers into the hashtable. (Whether insert invalidates iterators
|
|
71
|
+
// and pointers depends on whether it results in a hashtable resize,
|
|
72
|
+
// but that's an implementation detail that may change in the future.)
|
|
73
|
+
// On the plus side, delete() doesn't invalidate iterators or pointers
|
|
74
|
+
// at all, or even change the ordering of elements.
|
|
75
|
+
//
|
|
76
|
+
// Also please note:
|
|
77
|
+
//
|
|
78
|
+
// 1) set_deleted_key():
|
|
79
|
+
// If you want to use erase() you must call set_deleted_key(),
|
|
80
|
+
// in addition to set_empty_key(), after construction.
|
|
81
|
+
// The deleted and empty keys must differ.
|
|
82
|
+
//
|
|
83
|
+
// 2) Keys equal to the empty key or deleted key (if any) cannot be
|
|
84
|
+
// used as keys for find(), count(), insert(), etc.
|
|
85
|
+
//
|
|
86
|
+
// 3) min_load_factor():
|
|
87
|
+
// Setting the minimum load factor controls how aggressively the
|
|
88
|
+
// table is shrunk when keys are erased. Setting it to 0.0
|
|
89
|
+
// guarantees that the hash table will never shrink.
|
|
90
|
+
//
|
|
91
|
+
// 4) resize(0):
|
|
92
|
+
// When an item is deleted, its memory isn't freed right
|
|
93
|
+
// away. This allows you to iterate over a hashtable,
|
|
94
|
+
// and call erase(), without invalidating the iterator.
|
|
95
|
+
// To force the memory to be freed, call resize(0).
|
|
96
|
+
// For tr1 compatibility, this can also be called as rehash(0).
|
|
97
|
+
// Roughly speaking:
|
|
98
|
+
// (1) dense_hash_set: fastest, uses the most memory unless entries are small
|
|
99
|
+
// (2) sparse_hash_set: slowest, uses the least memory
|
|
100
|
+
// (3) hash_set / unordered_set (STL): in the middle
|
|
101
|
+
//
|
|
102
|
+
// Typically I use sparse_hash_set when I care about space and/or when
|
|
103
|
+
// I need to save the hashtable on disk. I use hash_set otherwise. I
|
|
104
|
+
// don't personally use dense_hash_set ever; some people use it for
|
|
105
|
+
// small sets with lots of lookups.
|
|
106
|
+
//
|
|
107
|
+
// - dense_hash_set has, typically, about 78% memory overhead (if your
|
|
108
|
+
// data takes up X bytes, the hash_set uses .78X more bytes in overhead).
|
|
109
|
+
// - sparse_hash_set has about 4 bits overhead per entry.
|
|
110
|
+
// - sparse_hash_set can be 3-7 times slower than the others for lookup and,
|
|
111
|
+
// especially, inserts. See time_hash_map.cc for details.
|
|
112
|
+
//
|
|
113
|
+
// See /usr/(local/)?doc/sparsehash-*/dense_hash_set.html
|
|
114
|
+
// for information about how to use this class.
|
|
115
|
+
|
|
116
|
+
#ifndef S2_UTIL_GTL_DENSE_HASH_SET_H_
|
|
117
|
+
#define S2_UTIL_GTL_DENSE_HASH_SET_H_
|
|
118
|
+
|
|
119
|
+
#include <cstdio>
|
|
120
|
+
#include <algorithm>
|
|
121
|
+
#include <functional>
|
|
122
|
+
#include <memory>
|
|
123
|
+
#include <utility>
|
|
124
|
+
#include <vector>
|
|
125
|
+
|
|
126
|
+
#include "s2/base/port.h"
|
|
127
|
+
#include "s2/third_party/absl/base/macros.h"
|
|
128
|
+
#include "s2/util/gtl/densehashtable.h" // IWYU pragma: export
|
|
129
|
+
|
|
130
|
+
// Some files test for this symbol.
|
|
131
|
+
#define S2__DENSE_HASH_SET_H_
|
|
132
|
+
|
|
133
|
+
namespace gtl {
|
|
134
|
+
|
|
135
|
+
template <class Value,
|
|
136
|
+
class HashFcn = std::hash<Value>,
|
|
137
|
+
class EqualKey = std::equal_to<Value>,
|
|
138
|
+
class Alloc = std::allocator<Value> >
|
|
139
|
+
class dense_hash_set {
|
|
140
|
+
private:
|
|
141
|
+
|
|
142
|
+
// Apparently identity is not stl-standard, so we define our own
|
|
143
|
+
struct Identity {
|
|
144
|
+
typedef const Value& result_type;
|
|
145
|
+
const Value& operator()(const Value& v) const { return v; }
|
|
146
|
+
};
|
|
147
|
+
struct SetKey {
|
|
148
|
+
void operator()(Value* value, const Value& new_key) const {
|
|
149
|
+
*value = new_key;
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
// The actual data
|
|
154
|
+
typedef dense_hashtable<Value, Value, HashFcn, Identity, SetKey,
|
|
155
|
+
EqualKey, Alloc> ht;
|
|
156
|
+
ht rep;
|
|
157
|
+
|
|
158
|
+
public:
|
|
159
|
+
typedef typename ht::key_type key_type;
|
|
160
|
+
typedef typename ht::value_type value_type;
|
|
161
|
+
typedef typename ht::hasher hasher;
|
|
162
|
+
typedef typename ht::key_equal key_equal;
|
|
163
|
+
typedef Alloc allocator_type;
|
|
164
|
+
|
|
165
|
+
typedef typename ht::size_type size_type;
|
|
166
|
+
typedef typename ht::difference_type difference_type;
|
|
167
|
+
typedef typename ht::const_pointer pointer;
|
|
168
|
+
typedef typename ht::const_pointer const_pointer;
|
|
169
|
+
typedef typename ht::const_reference reference;
|
|
170
|
+
typedef typename ht::const_reference const_reference;
|
|
171
|
+
|
|
172
|
+
typedef typename ht::const_iterator iterator;
|
|
173
|
+
typedef typename ht::const_iterator const_iterator;
|
|
174
|
+
typedef typename ht::const_local_iterator local_iterator;
|
|
175
|
+
typedef typename ht::const_local_iterator const_local_iterator;
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
// Iterator functions -- recall all iterators are const
|
|
179
|
+
iterator begin() const { return rep.begin(); }
|
|
180
|
+
iterator end() const { return rep.end(); }
|
|
181
|
+
|
|
182
|
+
// These come from tr1's unordered_set. For us, a bucket has 0 or 1 elements.
|
|
183
|
+
ABSL_DEPRECATED(
|
|
184
|
+
"This method is slated for removal. Please migrate to "
|
|
185
|
+
"absl::flat_hash_set.")
|
|
186
|
+
local_iterator begin(size_type i) const { return rep.begin(i); }
|
|
187
|
+
|
|
188
|
+
ABSL_DEPRECATED(
|
|
189
|
+
"This method is slated for removal. Please migrate to "
|
|
190
|
+
"absl::flat_hash_set.")
|
|
191
|
+
local_iterator end(size_type i) const { return rep.end(i); }
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
// Accessor functions
|
|
195
|
+
allocator_type get_allocator() const { return rep.get_allocator(); }
|
|
196
|
+
hasher hash_funct() const { return rep.hash_funct(); }
|
|
197
|
+
hasher hash_function() const { return hash_funct(); } // tr1 name
|
|
198
|
+
key_equal key_eq() const { return rep.key_eq(); }
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
// Constructors
|
|
202
|
+
dense_hash_set() {}
|
|
203
|
+
|
|
204
|
+
explicit dense_hash_set(size_type expected_max_items_in_table,
|
|
205
|
+
const hasher& hf = hasher(),
|
|
206
|
+
const key_equal& eql = key_equal(),
|
|
207
|
+
const allocator_type& alloc = allocator_type())
|
|
208
|
+
: rep(expected_max_items_in_table, hf, eql, Identity(), SetKey(), alloc) {
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
template <class InputIterator>
|
|
212
|
+
dense_hash_set(InputIterator f, InputIterator l,
|
|
213
|
+
const key_type& empty_key_val,
|
|
214
|
+
size_type expected_max_items_in_table = 0,
|
|
215
|
+
const hasher& hf = hasher(),
|
|
216
|
+
const key_equal& eql = key_equal(),
|
|
217
|
+
const allocator_type& alloc = allocator_type())
|
|
218
|
+
: rep(expected_max_items_in_table, hf, eql, Identity(), SetKey(), alloc) {
|
|
219
|
+
set_empty_key(empty_key_val);
|
|
220
|
+
rep.insert(f, l);
|
|
221
|
+
}
|
|
222
|
+
// We use the default copy constructor
|
|
223
|
+
// We use the default operator=()
|
|
224
|
+
// We use the default destructor
|
|
225
|
+
|
|
226
|
+
void clear() { rep.clear(); }
|
|
227
|
+
// This clears the hash set without resizing it down to the minimum
|
|
228
|
+
// bucket count, but rather keeps the number of buckets constant
|
|
229
|
+
void clear_no_resize() { rep.clear_no_resize(); }
|
|
230
|
+
void swap(dense_hash_set& hs) { rep.swap(hs.rep); }
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
// Functions concerning size
|
|
234
|
+
size_type size() const { return rep.size(); }
|
|
235
|
+
size_type max_size() const { return rep.max_size(); }
|
|
236
|
+
bool empty() const { return rep.empty(); }
|
|
237
|
+
size_type bucket_count() const { return rep.bucket_count(); }
|
|
238
|
+
|
|
239
|
+
ABSL_DEPRECATED(
|
|
240
|
+
"This method is slated for removal. Please migrate to "
|
|
241
|
+
"absl::flat_hash_set.")
|
|
242
|
+
size_type max_bucket_count() const { return rep.max_bucket_count(); }
|
|
243
|
+
|
|
244
|
+
// These are tr1 methods. bucket() is the bucket the key is or would be in.
|
|
245
|
+
ABSL_DEPRECATED(
|
|
246
|
+
"This method is slated for removal. Please migrate to "
|
|
247
|
+
"absl::flat_hash_set.")
|
|
248
|
+
size_type bucket_size(size_type i) const { return rep.bucket_size(i); }
|
|
249
|
+
ABSL_DEPRECATED(
|
|
250
|
+
"This method is slated for removal. Please migrate to "
|
|
251
|
+
"absl::flat_hash_set.")
|
|
252
|
+
size_type bucket(const key_type& key) const { return rep.bucket(key); }
|
|
253
|
+
float load_factor() const {
|
|
254
|
+
return size() * 1.0f / bucket_count();
|
|
255
|
+
}
|
|
256
|
+
float max_load_factor() const {
|
|
257
|
+
float shrink, grow;
|
|
258
|
+
rep.get_resizing_parameters(&shrink, &grow);
|
|
259
|
+
return grow;
|
|
260
|
+
}
|
|
261
|
+
void max_load_factor(float new_grow) {
|
|
262
|
+
float shrink, grow;
|
|
263
|
+
rep.get_resizing_parameters(&shrink, &grow);
|
|
264
|
+
rep.set_resizing_parameters(shrink, new_grow);
|
|
265
|
+
}
|
|
266
|
+
// These aren't tr1 methods but perhaps ought to be.
|
|
267
|
+
ABSL_DEPRECATED(
|
|
268
|
+
"This method is slated for removal. Please migrate to "
|
|
269
|
+
"absl::flat_hash_set.")
|
|
270
|
+
float min_load_factor() const {
|
|
271
|
+
float shrink, grow;
|
|
272
|
+
rep.get_resizing_parameters(&shrink, &grow);
|
|
273
|
+
return shrink;
|
|
274
|
+
}
|
|
275
|
+
void min_load_factor(float new_shrink) {
|
|
276
|
+
float shrink, grow;
|
|
277
|
+
rep.get_resizing_parameters(&shrink, &grow);
|
|
278
|
+
rep.set_resizing_parameters(new_shrink, grow);
|
|
279
|
+
}
|
|
280
|
+
// Deprecated; use min_load_factor() or max_load_factor() instead.
|
|
281
|
+
void set_resizing_parameters(float shrink, float grow) {
|
|
282
|
+
rep.set_resizing_parameters(shrink, grow);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
void resize(size_type hint) { rep.resize(hint); }
|
|
286
|
+
void rehash(size_type hint) { resize(hint); } // the tr1 name
|
|
287
|
+
|
|
288
|
+
// Lookup routines
|
|
289
|
+
iterator find(const key_type& key) const { return rep.find(key); }
|
|
290
|
+
size_type count(const key_type& key) const { return rep.count(key); }
|
|
291
|
+
std::pair<iterator, iterator> equal_range(const key_type& key) const {
|
|
292
|
+
return rep.equal_range(key);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
// Insertion routines
|
|
297
|
+
std::pair<iterator, bool> insert(const value_type& obj) {
|
|
298
|
+
std::pair<typename ht::iterator, bool> p = rep.insert(obj);
|
|
299
|
+
return std::pair<iterator, bool>(p.first, p.second); // const to non-const
|
|
300
|
+
}
|
|
301
|
+
std::pair<iterator, bool> insert(value_type&& obj) { // NOLINT
|
|
302
|
+
std::pair<typename ht::iterator, bool> p = rep.insert(std::move(obj));
|
|
303
|
+
return std::pair<iterator, bool>(p.first, p.second); // const to non-const
|
|
304
|
+
}
|
|
305
|
+
template <class InputIterator> void insert(InputIterator f, InputIterator l) {
|
|
306
|
+
rep.insert(f, l);
|
|
307
|
+
}
|
|
308
|
+
void insert(const_iterator f, const_iterator l) {
|
|
309
|
+
rep.insert(f, l);
|
|
310
|
+
}
|
|
311
|
+
// Required for std::insert_iterator; the passed-in iterator is ignored.
|
|
312
|
+
iterator insert(iterator, const value_type& obj) {
|
|
313
|
+
return insert(obj).first;
|
|
314
|
+
}
|
|
315
|
+
iterator insert(iterator, value_type&& obj) { // NOLINT
|
|
316
|
+
return insert(std::move(obj)).first;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
// Unlike std::set, we cannot construct an element in place, as we do not have
|
|
320
|
+
// a layer of indirection like std::set nodes. Therefore, emplace* methods do
|
|
321
|
+
// not provide a performance advantage over insert + move.
|
|
322
|
+
template <typename... Args>
|
|
323
|
+
std::pair<iterator, bool> emplace(Args&&... args) {
|
|
324
|
+
return rep.insert(value_type(std::forward<Args>(args)...));
|
|
325
|
+
}
|
|
326
|
+
// The passed-in const_iterator is ignored.
|
|
327
|
+
template <typename... Args>
|
|
328
|
+
iterator emplace_hint(const_iterator, Args&&... args) {
|
|
329
|
+
return rep.insert(value_type(std::forward<Args>(args)...)).first;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
// Deletion and empty routines
|
|
333
|
+
// THESE ARE NON-STANDARD! I make you specify an "impossible" key
|
|
334
|
+
// value to identify deleted and empty buckets. You can change the
|
|
335
|
+
// deleted key as time goes on, or get rid of it entirely to be insert-only.
|
|
336
|
+
void set_empty_key(const key_type& key) { rep.set_empty_key(key); }
|
|
337
|
+
void set_deleted_key(const key_type& key) { rep.set_deleted_key(key); }
|
|
338
|
+
|
|
339
|
+
// These are standard
|
|
340
|
+
size_type erase(const key_type& key) { return rep.erase(key); }
|
|
341
|
+
void erase(iterator it) { rep.erase(it); }
|
|
342
|
+
void erase(iterator f, iterator l) { rep.erase(f, l); }
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
// Comparison
|
|
346
|
+
bool operator==(const dense_hash_set& hs) const { return rep == hs.rep; }
|
|
347
|
+
bool operator!=(const dense_hash_set& hs) const { return rep != hs.rep; }
|
|
348
|
+
};
|
|
349
|
+
|
|
350
|
+
template <class Val, class HashFcn, class EqualKey, class Alloc>
|
|
351
|
+
inline void swap(dense_hash_set<Val, HashFcn, EqualKey, Alloc>& hs1,
|
|
352
|
+
dense_hash_set<Val, HashFcn, EqualKey, Alloc>& hs2) {
|
|
353
|
+
hs1.swap(hs2);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
#endif // S2_UTIL_GTL_DENSE_HASH_SET_H_
|