@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,60 @@
|
|
|
1
|
+
// Copyright Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
#ifndef S2_BASE_SPINLOCK_H_
|
|
17
|
+
#define S2_BASE_SPINLOCK_H_
|
|
18
|
+
|
|
19
|
+
#include <atomic>
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class SpinLock {
|
|
23
|
+
public:
|
|
24
|
+
SpinLock() = default;
|
|
25
|
+
~SpinLock() = default;
|
|
26
|
+
SpinLock(SpinLock const&) = delete;
|
|
27
|
+
SpinLock& operator=(SpinLock const&) = delete;
|
|
28
|
+
|
|
29
|
+
inline void Lock() {
|
|
30
|
+
while (locked_.exchange(true, std::memory_order_acquire)) {
|
|
31
|
+
// Spin.
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
inline void Unlock() {
|
|
37
|
+
locked_.store(false, std::memory_order_release);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
inline bool IsHeld() const {
|
|
41
|
+
return locked_.load(std::memory_order_relaxed);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
private:
|
|
45
|
+
std::atomic_bool locked_{false};
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
class SpinLockHolder {
|
|
49
|
+
public:
|
|
50
|
+
inline explicit SpinLockHolder(SpinLock* l) : lock_(l) { lock_->Lock(); }
|
|
51
|
+
inline ~SpinLockHolder() { lock_->Unlock(); }
|
|
52
|
+
|
|
53
|
+
SpinLockHolder(const SpinLockHolder&) = delete;
|
|
54
|
+
SpinLockHolder& operator=(const SpinLockHolder&) = delete;
|
|
55
|
+
|
|
56
|
+
private:
|
|
57
|
+
SpinLock* lock_;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
#endif // S2_BASE_SPINLOCK_H_
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
// Copyright 2002 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
|
+
#include "s2/base/stringprintf.h"
|
|
18
|
+
|
|
19
|
+
#include <cerrno>
|
|
20
|
+
#include <cstdarg> // For va_list and related operations
|
|
21
|
+
#include <cstdio> // MSVC requires this for _vsnprintf
|
|
22
|
+
#include <vector>
|
|
23
|
+
|
|
24
|
+
#include "s2/base/logging.h"
|
|
25
|
+
|
|
26
|
+
#ifdef _MSC_VER
|
|
27
|
+
enum { IS__MSC_VER = 1 };
|
|
28
|
+
#else
|
|
29
|
+
enum { IS__MSC_VER = 0 };
|
|
30
|
+
#endif
|
|
31
|
+
|
|
32
|
+
void StringAppendV(string* dst, const char* format, va_list ap) {
|
|
33
|
+
// First try with a small fixed size buffer
|
|
34
|
+
static const int kSpaceLength = 1024;
|
|
35
|
+
char space[kSpaceLength];
|
|
36
|
+
|
|
37
|
+
// It's possible for methods that use a va_list to invalidate
|
|
38
|
+
// the data in it upon use. The fix is to make a copy
|
|
39
|
+
// of the structure before using it and use that copy instead.
|
|
40
|
+
va_list backup_ap;
|
|
41
|
+
va_copy(backup_ap, ap);
|
|
42
|
+
int result = vsnprintf(space, kSpaceLength, format, backup_ap);
|
|
43
|
+
va_end(backup_ap);
|
|
44
|
+
|
|
45
|
+
if (result < kSpaceLength) {
|
|
46
|
+
if (result >= 0) {
|
|
47
|
+
// Normal case -- everything fit.
|
|
48
|
+
dst->append(space, result);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (IS__MSC_VER) {
|
|
53
|
+
// Error or MSVC running out of space. MSVC 8.0 and higher
|
|
54
|
+
// can be asked about space needed with the special idiom below:
|
|
55
|
+
va_copy(backup_ap, ap);
|
|
56
|
+
result = vsnprintf(nullptr, 0, format, backup_ap);
|
|
57
|
+
va_end(backup_ap);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (result < 0) {
|
|
61
|
+
// Just an error.
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Increase the buffer size to the size requested by vsnprintf,
|
|
67
|
+
// plus one for the closing \0.
|
|
68
|
+
int length = result+1;
|
|
69
|
+
char* buf = new char[length];
|
|
70
|
+
|
|
71
|
+
// Restore the va_list before we use it again
|
|
72
|
+
va_copy(backup_ap, ap);
|
|
73
|
+
result = vsnprintf(buf, length, format, backup_ap);
|
|
74
|
+
va_end(backup_ap);
|
|
75
|
+
|
|
76
|
+
if (result >= 0 && result < length) {
|
|
77
|
+
// It fit
|
|
78
|
+
dst->append(buf, result);
|
|
79
|
+
}
|
|
80
|
+
delete[] buf;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
string StringPrintf(const char* format, ...) {
|
|
85
|
+
va_list ap;
|
|
86
|
+
va_start(ap, format);
|
|
87
|
+
string result;
|
|
88
|
+
StringAppendV(&result, format, ap);
|
|
89
|
+
va_end(ap);
|
|
90
|
+
return result;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const string& SStringPrintf(string* dst, const char* format, ...) {
|
|
94
|
+
va_list ap;
|
|
95
|
+
va_start(ap, format);
|
|
96
|
+
dst->clear();
|
|
97
|
+
StringAppendV(dst, format, ap);
|
|
98
|
+
va_end(ap);
|
|
99
|
+
return *dst;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
void StringAppendF(string* dst, const char* format, ...) {
|
|
103
|
+
va_list ap;
|
|
104
|
+
va_start(ap, format);
|
|
105
|
+
StringAppendV(dst, format, ap);
|
|
106
|
+
va_end(ap);
|
|
107
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// Copyright Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
// NOTE: See third_party/absl/strings for more options.
|
|
17
|
+
//
|
|
18
|
+
// As of 2017q4, most use of these routines is considered legacy: use
|
|
19
|
+
// of absl::StrCat, absl::Substitute, or absl::StrFormat is preferred for
|
|
20
|
+
// performance and safety reasons.
|
|
21
|
+
|
|
22
|
+
#ifndef S2_BASE_STRINGPRINTF_H_
|
|
23
|
+
#define S2_BASE_STRINGPRINTF_H_
|
|
24
|
+
|
|
25
|
+
#include <cstdarg>
|
|
26
|
+
#include <string>
|
|
27
|
+
#include <vector>
|
|
28
|
+
|
|
29
|
+
#include "s2/base/port.h"
|
|
30
|
+
|
|
31
|
+
// Return a C++ string
|
|
32
|
+
extern string StringPrintf(const char* format, ...)
|
|
33
|
+
// Tell the compiler to do printf format string checking.
|
|
34
|
+
ABSL_PRINTF_ATTRIBUTE(1, 2);
|
|
35
|
+
|
|
36
|
+
// Store result into a supplied string and return it
|
|
37
|
+
extern const string& SStringPrintf(string* dst, const char* format, ...)
|
|
38
|
+
// Tell the compiler to do printf format string checking.
|
|
39
|
+
ABSL_PRINTF_ATTRIBUTE(2, 3);
|
|
40
|
+
|
|
41
|
+
// Append result to a supplied string
|
|
42
|
+
extern void StringAppendF(string* dst, const char* format, ...)
|
|
43
|
+
// Tell the compiler to do printf format string checking.
|
|
44
|
+
ABSL_PRINTF_ATTRIBUTE(2, 3);
|
|
45
|
+
|
|
46
|
+
// Lower-level routine that takes a va_list and appends to a specified
|
|
47
|
+
// string. All other routines are just convenience wrappers around it.
|
|
48
|
+
//
|
|
49
|
+
// Implementation note: the va_list is never modified, this implementation
|
|
50
|
+
// always operates on copies.
|
|
51
|
+
extern void StringAppendV(string* dst, const char* format, va_list ap);
|
|
52
|
+
|
|
53
|
+
#endif // S2_BASE_STRINGPRINTF_H_
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// Copyright 2008 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
|
+
// Architecture-neutral plug compatible replacements for strtol() friends.
|
|
18
|
+
// See strtoint.h for details on how to use this component.
|
|
19
|
+
//
|
|
20
|
+
|
|
21
|
+
#include <cerrno>
|
|
22
|
+
#include <climits>
|
|
23
|
+
#include <limits>
|
|
24
|
+
|
|
25
|
+
#include "s2/base/integral_types.h"
|
|
26
|
+
#include "s2/base/port.h"
|
|
27
|
+
#include "s2/base/strtoint.h"
|
|
28
|
+
|
|
29
|
+
// Replacement strto[u]l functions that have identical overflow and underflow
|
|
30
|
+
// characteristics for both ILP-32 and LP-64 platforms, including errno
|
|
31
|
+
// preservation for error-free calls.
|
|
32
|
+
int32 strto32_adapter(const char *nptr, char **endptr, int base) {
|
|
33
|
+
const int saved_errno = errno;
|
|
34
|
+
errno = 0;
|
|
35
|
+
const long result = strtol(nptr, endptr, base);
|
|
36
|
+
if (errno == ERANGE && result == LONG_MIN) {
|
|
37
|
+
return std::numeric_limits<int32>::min();
|
|
38
|
+
} else if (errno == ERANGE && result == LONG_MAX) {
|
|
39
|
+
return std::numeric_limits<int32>::max();
|
|
40
|
+
} else if (errno == 0 && result < std::numeric_limits<int32>::min()) {
|
|
41
|
+
errno = ERANGE;
|
|
42
|
+
return std::numeric_limits<int32>::min();
|
|
43
|
+
} else if (errno == 0 && result > std::numeric_limits<int32>::max()) {
|
|
44
|
+
errno = ERANGE;
|
|
45
|
+
return std::numeric_limits<int32>::max();
|
|
46
|
+
}
|
|
47
|
+
if (errno == 0)
|
|
48
|
+
errno = saved_errno;
|
|
49
|
+
return static_cast<int32>(result);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
uint32 strtou32_adapter(const char *nptr, char **endptr, int base) {
|
|
53
|
+
const int saved_errno = errno;
|
|
54
|
+
errno = 0;
|
|
55
|
+
const unsigned long result = strtoul(nptr, endptr, base);
|
|
56
|
+
if (errno == ERANGE && result == ULONG_MAX) {
|
|
57
|
+
return std::numeric_limits<uint32>::max();
|
|
58
|
+
} else if (errno == 0 && result > std::numeric_limits<uint32>::max()) {
|
|
59
|
+
errno = ERANGE;
|
|
60
|
+
return std::numeric_limits<uint32>::max();
|
|
61
|
+
}
|
|
62
|
+
if (errno == 0)
|
|
63
|
+
errno = saved_errno;
|
|
64
|
+
return static_cast<uint32>(result);
|
|
65
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
// Copyright 2008 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
|
+
// Architecture-neutral plug compatible replacements for strtol() friends.
|
|
18
|
+
//
|
|
19
|
+
// Long's have different lengths on ILP-32 and LP-64 platforms, and so overflow
|
|
20
|
+
// behavior across the two varies when strtol() and similar are used to parse
|
|
21
|
+
// 32-bit integers. Similar problems exist with atoi(), because although it
|
|
22
|
+
// has an all-integer interface, it uses strtol() internally, and so suffers
|
|
23
|
+
// from the same narrowing problems on assignments to int.
|
|
24
|
+
//
|
|
25
|
+
// Examples:
|
|
26
|
+
// errno = 0;
|
|
27
|
+
// i = strtol("3147483647", nullptr, 10);
|
|
28
|
+
// printf("%d, errno %d\n", i, errno);
|
|
29
|
+
// // 32-bit platform: 2147483647, errno 34
|
|
30
|
+
// // 64-bit platform: -1147483649, errno 0
|
|
31
|
+
//
|
|
32
|
+
// printf("%d\n", atoi("3147483647"));
|
|
33
|
+
// // 32-bit platform: 2147483647
|
|
34
|
+
// // 64-bit platform: -1147483649
|
|
35
|
+
//
|
|
36
|
+
// A way round this is to define local replacements for these, and use them
|
|
37
|
+
// instead of the standard libc functions.
|
|
38
|
+
//
|
|
39
|
+
// In most 32-bit cases the replacements can be inlined away to a call to the
|
|
40
|
+
// libc function. In a couple of 64-bit cases, however, adapters are required,
|
|
41
|
+
// to provide the right overflow and errno behavior.
|
|
42
|
+
//
|
|
43
|
+
|
|
44
|
+
#ifndef S2_BASE_STRTOINT_H_
|
|
45
|
+
#define S2_BASE_STRTOINT_H_
|
|
46
|
+
|
|
47
|
+
#include <cstdlib> // For strtol* functions.
|
|
48
|
+
#include <string>
|
|
49
|
+
#include "s2/base/integral_types.h"
|
|
50
|
+
#include "s2/base/port.h"
|
|
51
|
+
#include "s2/third_party/absl/base/macros.h"
|
|
52
|
+
|
|
53
|
+
// Adapter functions for handling overflow and errno.
|
|
54
|
+
int32 strto32_adapter(const char *nptr, char **endptr, int base);
|
|
55
|
+
uint32 strtou32_adapter(const char *nptr, char **endptr, int base);
|
|
56
|
+
|
|
57
|
+
// Conversions to a 32-bit integer can pass the call to strto[u]l on 32-bit
|
|
58
|
+
// platforms, but need a little extra work on 64-bit platforms.
|
|
59
|
+
inline int32 strto32(const char *nptr, char **endptr, int base) {
|
|
60
|
+
if (sizeof(int32) == sizeof(long))
|
|
61
|
+
return static_cast<int32>(strtol(nptr, endptr, base));
|
|
62
|
+
else
|
|
63
|
+
return strto32_adapter(nptr, endptr, base);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
inline uint32 strtou32(const char *nptr, char **endptr, int base) {
|
|
67
|
+
if (sizeof(uint32) == sizeof(unsigned long))
|
|
68
|
+
return static_cast<uint32>(strtoul(nptr, endptr, base));
|
|
69
|
+
else
|
|
70
|
+
return strtou32_adapter(nptr, endptr, base);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// For now, long long is 64-bit on all the platforms we care about, so these
|
|
74
|
+
// functions can simply pass the call to strto[u]ll.
|
|
75
|
+
inline int64 strto64(const char *nptr, char **endptr, int base) {
|
|
76
|
+
static_assert(sizeof(int64) == sizeof(long long),
|
|
77
|
+
"sizeof int64 is not sizeof long long");
|
|
78
|
+
return strtoll(nptr, endptr, base);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
inline uint64 strtou64(const char *nptr, char **endptr, int base) {
|
|
82
|
+
static_assert(sizeof(uint64) == sizeof(unsigned long long),
|
|
83
|
+
"sizeof uint64 is not sizeof long long");
|
|
84
|
+
return strtoull(nptr, endptr, base);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Although it returns an int, atoi() is implemented in terms of strtol, and
|
|
88
|
+
// so has differing overflow and underflow behavior. atol is the same.
|
|
89
|
+
inline int32 atoi32(const char *nptr) {
|
|
90
|
+
return strto32(nptr, nullptr, 10);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
inline int64 atoi64(const char *nptr) {
|
|
94
|
+
return strto64(nptr, nullptr, 10);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Convenience versions of the above that take a string argument.
|
|
98
|
+
inline int32 atoi32(const string &s) {
|
|
99
|
+
return atoi32(s.c_str());
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
inline int64 atoi64(const string &s) {
|
|
103
|
+
return atoi64(s.c_str());
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
#endif // S2_BASE_STRTOINT_H_
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// Copyright Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
#ifndef S2_BASE_TIMER_H_
|
|
17
|
+
#define S2_BASE_TIMER_H_
|
|
18
|
+
|
|
19
|
+
#include <chrono>
|
|
20
|
+
|
|
21
|
+
#include "s2/base/integral_types.h"
|
|
22
|
+
|
|
23
|
+
class CycleTimer {
|
|
24
|
+
public:
|
|
25
|
+
CycleTimer() = default;
|
|
26
|
+
|
|
27
|
+
void Start() {
|
|
28
|
+
start_ = Now();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
int64 GetInMs() const {
|
|
32
|
+
using msec = std::chrono::milliseconds;
|
|
33
|
+
return std::chrono::duration_cast<msec>(GetDuration()).count();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
private:
|
|
37
|
+
using Clock = std::chrono::high_resolution_clock;
|
|
38
|
+
|
|
39
|
+
static Clock::time_point Now() {
|
|
40
|
+
return Clock::now();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
Clock::duration GetDuration() const {
|
|
44
|
+
return Now() - start_;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
Clock::time_point start_;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
#endif // S2_BASE_TIMER_H_
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
// Copyright 2018 Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
// Author: ericv@google.com (Eric Veach)
|
|
17
|
+
|
|
18
|
+
#include "s2/encoded_s2cell_id_vector.h"
|
|
19
|
+
|
|
20
|
+
using absl::Span;
|
|
21
|
+
using std::max;
|
|
22
|
+
using std::min;
|
|
23
|
+
using std::vector;
|
|
24
|
+
|
|
25
|
+
namespace s2coding {
|
|
26
|
+
|
|
27
|
+
void EncodeS2CellIdVector(Span<const S2CellId> v, Encoder* encoder) {
|
|
28
|
+
// v[i] is encoded as (base + (deltas[i] << shift)).
|
|
29
|
+
//
|
|
30
|
+
// "base" consists of 0-7 bytes, and is always shifted so that its bytes are
|
|
31
|
+
// the most-significant bytes of a uint64.
|
|
32
|
+
//
|
|
33
|
+
// "deltas" is an EncodedUintVector<uint64>, which means that all deltas
|
|
34
|
+
// have a fixed-length encoding determined by the largest delta.
|
|
35
|
+
//
|
|
36
|
+
// "shift" is in the range 0..56. The shift value is odd only if all
|
|
37
|
+
// S2CellIds are at the same level, in which case the bit at position
|
|
38
|
+
// (shift - 1) is automatically set to 1 in "base".
|
|
39
|
+
//
|
|
40
|
+
// "base" (3 bits) and "shift" (6 bits) are encoded in either one or two
|
|
41
|
+
// bytes as follows:
|
|
42
|
+
//
|
|
43
|
+
// - if (shift <= 4 or shift is even), then 1 byte
|
|
44
|
+
// - otherwise 2 bytes
|
|
45
|
+
//
|
|
46
|
+
// Note that (shift == 1) means that all S2CellIds are leaf cells, and
|
|
47
|
+
// (shift == 2) means that all S2CellIds are at level 29.
|
|
48
|
+
//
|
|
49
|
+
// The full encoded format is as follows:
|
|
50
|
+
//
|
|
51
|
+
// Byte 0, bits 0-2: base length (0-7 bytes)
|
|
52
|
+
// Byte 0, bits 3-7: encoded shift (see below)
|
|
53
|
+
// Byte 1: extended shift code (only needed for odd shifts >= 5)
|
|
54
|
+
// Followed by 0-7 bytes of "base"
|
|
55
|
+
// Followed by an EncodedUintVector of deltas.
|
|
56
|
+
|
|
57
|
+
uint64 v_or = 0, v_and = ~0ULL, v_min = ~0ULL, v_max = 0;
|
|
58
|
+
for (auto cellid : v) {
|
|
59
|
+
v_or |= cellid.id();
|
|
60
|
+
v_and &= cellid.id();
|
|
61
|
+
v_min = min(v_min, cellid.id());
|
|
62
|
+
v_max = max(v_max, cellid.id());
|
|
63
|
+
}
|
|
64
|
+
// These variables represent the values that will used during encoding.
|
|
65
|
+
uint64 e_base = 0; // Base value.
|
|
66
|
+
int e_base_len = 0; // Number of bytes to represent "base".
|
|
67
|
+
int e_shift = 0; // Delta shift.
|
|
68
|
+
int e_max_delta_msb = 0; // Bit position of the MSB of the largest delta.
|
|
69
|
+
if (v_or > 0) {
|
|
70
|
+
// We only allow even shifts, unless all values have the same low bit (in
|
|
71
|
+
// which case the shift is odd and the preceding bit is implicitly on).
|
|
72
|
+
// There is no point in allowing shifts > 56 since deltas are encoded in
|
|
73
|
+
// at least 1 byte each.
|
|
74
|
+
e_shift = min(56, Bits::FindLSBSetNonZero64(v_or) & ~1);
|
|
75
|
+
if (v_and & (1ULL << e_shift)) ++e_shift; // All S2CellIds same level.
|
|
76
|
+
|
|
77
|
+
// "base" consists of the "base_len" most significant bytes of the minimum
|
|
78
|
+
// S2CellId. We consider all possible values of "base_len" (0..7) and
|
|
79
|
+
// choose the one that minimizes the total encoding size.
|
|
80
|
+
uint64 e_bytes = ~0ULL; // Best encoding size so far.
|
|
81
|
+
for (int len = 0; len < 8; ++len) {
|
|
82
|
+
// "t_base" is the base value being tested (first "len" bytes of v_min).
|
|
83
|
+
// "t_max_delta_msb" is the most-significant bit position of the largest
|
|
84
|
+
// delta (or zero if there are no deltas, i.e. if v.size() == 0).
|
|
85
|
+
// "t_bytes" is the total size of the variable portion of the encoding.
|
|
86
|
+
uint64 t_base = v_min & ~(~0ULL >> (8 * len));
|
|
87
|
+
int t_max_delta_msb =
|
|
88
|
+
max(0, Bits::Log2Floor64((v_max - t_base) >> e_shift));
|
|
89
|
+
uint64 t_bytes = len + v.size() * ((t_max_delta_msb >> 3) + 1);
|
|
90
|
+
if (t_bytes < e_bytes) {
|
|
91
|
+
e_base = t_base;
|
|
92
|
+
e_base_len = len;
|
|
93
|
+
e_max_delta_msb = t_max_delta_msb;
|
|
94
|
+
e_bytes = t_bytes;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// It takes one extra byte to encode odd shifts (i.e., the case where all
|
|
98
|
+
// S2CellIds are at the same level), so check whether we can get the same
|
|
99
|
+
// encoding size per delta using an even shift.
|
|
100
|
+
if ((e_shift & 1) && (e_max_delta_msb & 7) != 7) --e_shift;
|
|
101
|
+
}
|
|
102
|
+
S2_DCHECK_LE(e_base_len, 7);
|
|
103
|
+
S2_DCHECK_LE(e_shift, 56);
|
|
104
|
+
encoder->Ensure(2 + e_base_len);
|
|
105
|
+
|
|
106
|
+
// As described above, "shift" and "base_len" are encoded in 1 or 2 bytes.
|
|
107
|
+
// "shift_code" is 5 bits:
|
|
108
|
+
// values <= 28 represent even shifts in the range 0..56
|
|
109
|
+
// values 29, 30 represent odd shifts 1 and 3
|
|
110
|
+
// value 31 indicates that the shift is odd and encoded in the next byte
|
|
111
|
+
int shift_code = e_shift >> 1;
|
|
112
|
+
if (e_shift & 1) shift_code = min(31, shift_code + 29);
|
|
113
|
+
encoder->put8((shift_code << 3) | e_base_len);
|
|
114
|
+
if (shift_code == 31) {
|
|
115
|
+
encoder->put8(e_shift >> 1); // Shift is always odd, so 3 bits unused.
|
|
116
|
+
}
|
|
117
|
+
// Encode the "base_len" most-significant bytes of "base".
|
|
118
|
+
uint64 base_bytes = e_base >> (64 - 8 * max(1, e_base_len));
|
|
119
|
+
EncodeUintWithLength<uint64>(base_bytes, e_base_len, encoder);
|
|
120
|
+
|
|
121
|
+
// Finally, encode the vector of deltas.
|
|
122
|
+
vector<uint64> deltas;
|
|
123
|
+
deltas.reserve(v.size());
|
|
124
|
+
for (auto cellid : v) {
|
|
125
|
+
deltas.push_back((cellid.id() - e_base) >> e_shift);
|
|
126
|
+
}
|
|
127
|
+
EncodeUintVector<uint64>(deltas, encoder);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
bool EncodedS2CellIdVector::Init(Decoder* decoder) {
|
|
131
|
+
// All encodings have at least 2 bytes (one for our header and one for the
|
|
132
|
+
// EncodedUintVector header), so this is safe.
|
|
133
|
+
if (decoder->avail() < 2) return false;
|
|
134
|
+
|
|
135
|
+
// Invert the encoding of (shift_code, base_len) described above.
|
|
136
|
+
int code_plus_len = decoder->get8();
|
|
137
|
+
int shift_code = code_plus_len >> 3;
|
|
138
|
+
if (shift_code == 31) {
|
|
139
|
+
shift_code = 29 + decoder->get8();
|
|
140
|
+
}
|
|
141
|
+
// Decode the "base_len" most-significant bytes of "base".
|
|
142
|
+
int base_len = code_plus_len & 7;
|
|
143
|
+
if (!DecodeUintWithLength(base_len, decoder, &base_)) return false;
|
|
144
|
+
base_ <<= 64 - 8 * max(1, base_len);
|
|
145
|
+
|
|
146
|
+
// Invert the encoding of "shift_code" described above.
|
|
147
|
+
if (shift_code >= 29) {
|
|
148
|
+
shift_ = 2 * (shift_code - 29) + 1;
|
|
149
|
+
base_ |= 1ULL << (shift_ - 1);
|
|
150
|
+
} else {
|
|
151
|
+
shift_ = 2 * shift_code;
|
|
152
|
+
}
|
|
153
|
+
return deltas_.Init(decoder);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
vector<S2CellId> EncodedS2CellIdVector::Decode() const {
|
|
157
|
+
vector<S2CellId> result(size());
|
|
158
|
+
for (int i = 0; i < size(); ++i) {
|
|
159
|
+
result[i] = (*this)[i];
|
|
160
|
+
}
|
|
161
|
+
return result;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
} // namespace s2coding
|