@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,134 @@
|
|
|
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
|
+
//
|
|
17
|
+
// far-far-superior implementation courtesy of amc@google.com (Adam Costello)
|
|
18
|
+
//
|
|
19
|
+
// Nth Derivative Coding
|
|
20
|
+
// (In signal processing disciplines, this is known as N-th Delta Coding.)
|
|
21
|
+
//
|
|
22
|
+
// Good for varint coding integer sequences with polynomial trends.
|
|
23
|
+
//
|
|
24
|
+
// Instead of coding a sequence of values directly, code its nth-order discrete
|
|
25
|
+
// derivative. Overflow in integer addition and subtraction makes this a
|
|
26
|
+
// lossless transform.
|
|
27
|
+
//
|
|
28
|
+
// constant linear quadratic
|
|
29
|
+
// trend trend trend
|
|
30
|
+
// / \ / \ / \_
|
|
31
|
+
// input |0 0 0 0 1 2 3 4 9 16 25 36
|
|
32
|
+
// 0th derivative(identity) |0 0 0 0 1 2 3 4 9 16 25 36
|
|
33
|
+
// 1st derivative(delta coding) | 0 0 0 1 1 1 1 5 7 9 11
|
|
34
|
+
// 2nd derivative(linear prediction) | 0 0 1 0 0 0 4 2 2 2
|
|
35
|
+
// -------------------------------------
|
|
36
|
+
// 0 1 2 3 4 5 6 7 8 9 10 11
|
|
37
|
+
// n in sequence
|
|
38
|
+
//
|
|
39
|
+
// Higher-order codings can break even or be detrimental on other sequences.
|
|
40
|
+
//
|
|
41
|
+
// random oscillating
|
|
42
|
+
// / \ / \_
|
|
43
|
+
// input |5 9 6 1 8 8 2 -2 4 -4 6 -6
|
|
44
|
+
// 0th derivative(identity) |5 9 6 1 8 8 2 -2 4 -4 6 -6
|
|
45
|
+
// 1st derivative(delta coding) | 4 -3 -5 7 0 -6 -4 6 -8 10 -12
|
|
46
|
+
// 2nd derivative(linear prediction) | -7 -2 12 -7 -6 2 10 -14 18 -22
|
|
47
|
+
// ---------------------------------------
|
|
48
|
+
// 0 1 2 3 4 5 6 7 8 9 10 11
|
|
49
|
+
// n in sequence
|
|
50
|
+
//
|
|
51
|
+
// Note that the nth derivative isn't available until sequence item n. Earlier
|
|
52
|
+
// values are coded at lower order. For the above table, read 5 4 -7 -2 12 ...
|
|
53
|
+
//
|
|
54
|
+
// A caveat on class usage. Encode() and Decode() share state. Using both
|
|
55
|
+
// without a Reset() in-between probably doesn't make sense.
|
|
56
|
+
|
|
57
|
+
#ifndef S2_UTIL_CODING_NTH_DERIVATIVE_H_
|
|
58
|
+
#define S2_UTIL_CODING_NTH_DERIVATIVE_H_
|
|
59
|
+
|
|
60
|
+
#include "s2/base/integral_types.h"
|
|
61
|
+
#include "s2/base/logging.h"
|
|
62
|
+
|
|
63
|
+
class NthDerivativeCoder {
|
|
64
|
+
public:
|
|
65
|
+
// range of supported Ns: [ N_MIN, N_MAX ]
|
|
66
|
+
enum {
|
|
67
|
+
N_MIN = 0,
|
|
68
|
+
N_MAX = 10,
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
// Initialize a new NthDerivativeCoder of the given N.
|
|
72
|
+
explicit NthDerivativeCoder(int n);
|
|
73
|
+
|
|
74
|
+
// Encode the next value in the sequence. Don't mix with Decode() calls.
|
|
75
|
+
int32 Encode(int32 k);
|
|
76
|
+
|
|
77
|
+
// Decode the next value in the sequence. Don't mix with Encode() calls.
|
|
78
|
+
int32 Decode(int32 k);
|
|
79
|
+
|
|
80
|
+
// Reset state.
|
|
81
|
+
void Reset();
|
|
82
|
+
|
|
83
|
+
// accessors
|
|
84
|
+
int n() const { return n_; }
|
|
85
|
+
|
|
86
|
+
private:
|
|
87
|
+
int n_; // derivative order of the coder (the N in NthDerivative)
|
|
88
|
+
int m_; // the derivative order in which to code the next value(ramps to n_)
|
|
89
|
+
int32 memory_[N_MAX]; // value memory. [0] is oldest
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
// Implementation below. Callers Ignore.
|
|
93
|
+
//
|
|
94
|
+
// Inlining the implementation roughly doubled the speed. All other
|
|
95
|
+
// optimization tricks failed miserably.
|
|
96
|
+
|
|
97
|
+
#if ~0 != -1
|
|
98
|
+
#error Sorry, this code needs twos complement integers.
|
|
99
|
+
#endif
|
|
100
|
+
|
|
101
|
+
inline NthDerivativeCoder::NthDerivativeCoder(int n) : n_(n) {
|
|
102
|
+
if (n < N_MIN || n > N_MAX) {
|
|
103
|
+
S2_LOG(ERROR) << "Unsupported N: " << n << ". Using 0 instead.";
|
|
104
|
+
n_ = 0;
|
|
105
|
+
}
|
|
106
|
+
Reset();
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
inline int32 NthDerivativeCoder::Encode(int32 k) {
|
|
110
|
+
for (int i = 0; i < m_; ++i) {
|
|
111
|
+
uint32 delta = static_cast<uint32>(k) - memory_[i];
|
|
112
|
+
memory_[i] = k;
|
|
113
|
+
k = delta;
|
|
114
|
+
}
|
|
115
|
+
if (m_ < n_)
|
|
116
|
+
memory_[m_++] = k;
|
|
117
|
+
return k;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
inline int32 NthDerivativeCoder::Decode(int32 k) {
|
|
121
|
+
if (m_ < n_)
|
|
122
|
+
m_++;
|
|
123
|
+
for (int i = m_ - 1; i >= 0; --i)
|
|
124
|
+
k = memory_[i] = memory_[i] + static_cast<uint32>(k);
|
|
125
|
+
return k;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
inline void NthDerivativeCoder::Reset() {
|
|
129
|
+
for (int i = 0; i < n_; ++i)
|
|
130
|
+
memory_[i] = 0;
|
|
131
|
+
m_ = 0;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
#endif // S2_UTIL_CODING_NTH_DERIVATIVE_H_
|
|
@@ -0,0 +1,62 @@
|
|
|
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
|
+
//
|
|
17
|
+
//
|
|
18
|
+
// Data transforms that can help code more efficiently.
|
|
19
|
+
|
|
20
|
+
#ifndef S2_UTIL_CODING_TRANSFORMS_H_
|
|
21
|
+
#define S2_UTIL_CODING_TRANSFORMS_H_
|
|
22
|
+
|
|
23
|
+
#include "s2/base/integral_types.h"
|
|
24
|
+
|
|
25
|
+
// ZigZag Transform
|
|
26
|
+
//
|
|
27
|
+
// Good for varint coding small signed integers centered around 0.
|
|
28
|
+
//
|
|
29
|
+
// int32 -> uint32
|
|
30
|
+
// -------------------------
|
|
31
|
+
// 0 -> 0
|
|
32
|
+
// -1 -> 1
|
|
33
|
+
// 1 -> 2
|
|
34
|
+
// -2 -> 3
|
|
35
|
+
// ... -> ...
|
|
36
|
+
// 2147483647 -> 4294967294
|
|
37
|
+
// -2147483648 -> 4294967295
|
|
38
|
+
//
|
|
39
|
+
// >> encode >>
|
|
40
|
+
// << decode <<
|
|
41
|
+
|
|
42
|
+
static inline uint32 ZigZagEncode(int32 n) {
|
|
43
|
+
// We need the cast to avoid an arithmetic shift.
|
|
44
|
+
uint32 sign = (static_cast<uint32>(n)) >> 31;
|
|
45
|
+
return (static_cast<uint32>(n) << 1) ^ (0u - sign);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
static inline int32 ZigZagDecode(uint32 n) {
|
|
49
|
+
return (n >> 1) ^ (0u - (n & 1));
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
static inline uint64 ZigZagEncode64(int64 n) {
|
|
53
|
+
// We need the cast to avoid an arithmetic shift.
|
|
54
|
+
uint64 sign = (static_cast<uint64>(n)) >> 63;
|
|
55
|
+
return (static_cast<uint64>(n) << 1) ^ (0u - sign);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
static inline int64 ZigZagDecode64(uint64 n) {
|
|
59
|
+
return (n >> 1) ^ (0u - (n & 1));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
#endif // S2_UTIL_CODING_TRANSFORMS_H_
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
// Copyright 2001 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/util/coding/varint.h"
|
|
18
|
+
|
|
19
|
+
#include <string>
|
|
20
|
+
|
|
21
|
+
#include "s2/base/integral_types.h"
|
|
22
|
+
|
|
23
|
+
#ifndef _MSC_VER
|
|
24
|
+
const int Varint::kMax32;
|
|
25
|
+
const int Varint::kMax64;
|
|
26
|
+
const int Varint::kSlopBytes;
|
|
27
|
+
#endif
|
|
28
|
+
|
|
29
|
+
char* Varint::Encode32(char* sptr, uint32 v) {
|
|
30
|
+
return Encode32Inline(sptr, v);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
char* Varint::Encode64(char* sptr, uint64 v) {
|
|
34
|
+
if (v < (1u << 28)) {
|
|
35
|
+
return Varint::Encode32(sptr, v);
|
|
36
|
+
} else {
|
|
37
|
+
// Operate on characters as unsigneds
|
|
38
|
+
unsigned char* ptr = reinterpret_cast<unsigned char*>(sptr);
|
|
39
|
+
// Rather than computing four subresults and or'ing each with 0x80,
|
|
40
|
+
// we can do two ors now. (Doing one now wouldn't work.)
|
|
41
|
+
const uint32 x32 = v | (1 << 7) | (1 << 21);
|
|
42
|
+
const uint32 y32 = v | (1 << 14) | (1 << 28);
|
|
43
|
+
*(ptr++) = x32;
|
|
44
|
+
*(ptr++) = y32 >> 7;
|
|
45
|
+
*(ptr++) = x32 >> 14;
|
|
46
|
+
*(ptr++) = y32 >> 21;
|
|
47
|
+
if (v < (1ull << 35)) {
|
|
48
|
+
*(ptr++) = v >> 28;
|
|
49
|
+
return reinterpret_cast<char*>(ptr);
|
|
50
|
+
} else {
|
|
51
|
+
*(ptr++) = (v >> 28) | (1 << 7);
|
|
52
|
+
return Varint::Encode32(reinterpret_cast<char*>(ptr), v >> 35);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const char* Varint::Parse32Fallback(const char* ptr, uint32* OUTPUT) {
|
|
58
|
+
return Parse32FallbackInline(ptr, OUTPUT);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const char* Varint::Parse64Fallback(const char* p, uint64* OUTPUT) {
|
|
62
|
+
const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
|
|
63
|
+
assert(*ptr >= 128);
|
|
64
|
+
#if defined(__x86_64__)
|
|
65
|
+
// This approach saves one redundant operation on the last byte (masking a
|
|
66
|
+
// byte that doesn't need it). This is conditional on x86 because:
|
|
67
|
+
// - PowerPC has specialized bit instructions that make masking and
|
|
68
|
+
// shifting very efficient
|
|
69
|
+
// - x86 seems to be one of the few architectures that has a single
|
|
70
|
+
// instruction to add 3 values.
|
|
71
|
+
//
|
|
72
|
+
// e.g.
|
|
73
|
+
// Input: 0xff, 0x40
|
|
74
|
+
// Mask & Or calculates: (0xff & 0x7f) | ((0x40 & 0x7f) << 7) = 0x207f
|
|
75
|
+
// Sub1 & Add calculates: 0xff + ((0x40 - 1) << 7) = 0x207f
|
|
76
|
+
//
|
|
77
|
+
// The subtract one removes the bit set by the previous byte used to
|
|
78
|
+
// indicate that more bytes are present. It also has the potential to
|
|
79
|
+
// allow instructions like LEA to combine 2 adds into one instruction.
|
|
80
|
+
//
|
|
81
|
+
// E.g. on an x86 architecture, %rcx = %rax + (%rbx - 1) << 7 could be
|
|
82
|
+
// emitted as:
|
|
83
|
+
// shlq $7, %rbx
|
|
84
|
+
// leaq -0x80(%rax, %rbx), %rcx
|
|
85
|
+
//
|
|
86
|
+
// Fast path: need to accumulate data in upto three result fragments
|
|
87
|
+
// res1 bits 0..27
|
|
88
|
+
// res2 bits 28..55
|
|
89
|
+
// res3 bits 56..63
|
|
90
|
+
|
|
91
|
+
uint64 byte, res1, res2 = 0, res3 = 0;
|
|
92
|
+
byte = *(ptr++); res1 = byte;
|
|
93
|
+
byte = *(ptr++); res1 += (byte - 1) << 7; if (byte < 128) goto done1;
|
|
94
|
+
byte = *(ptr++); res1 += (byte - 1) << 14; if (byte < 128) goto done1;
|
|
95
|
+
byte = *(ptr++); res1 += (byte - 1) << 21; if (byte < 128) goto done1;
|
|
96
|
+
|
|
97
|
+
byte = *(ptr++); res2 = byte; if (byte < 128) goto done2;
|
|
98
|
+
byte = *(ptr++); res2 += (byte - 1) << 7; if (byte < 128) goto done2;
|
|
99
|
+
byte = *(ptr++); res2 += (byte - 1) << 14; if (byte < 128) goto done2;
|
|
100
|
+
byte = *(ptr++); res2 += (byte - 1) << 21; if (byte < 128) goto done2;
|
|
101
|
+
|
|
102
|
+
byte = *(ptr++); res3 = byte; if (byte < 128) goto done3;
|
|
103
|
+
byte = *(ptr++); res3 += (byte - 1) << 7; if (byte < 2) goto done3;
|
|
104
|
+
|
|
105
|
+
return nullptr; // Value is too long to be a varint64
|
|
106
|
+
|
|
107
|
+
done1:
|
|
108
|
+
assert(res2 == 0);
|
|
109
|
+
assert(res3 == 0);
|
|
110
|
+
*OUTPUT = res1;
|
|
111
|
+
return reinterpret_cast<const char*>(ptr);
|
|
112
|
+
|
|
113
|
+
done2:
|
|
114
|
+
assert(res3 == 0);
|
|
115
|
+
*OUTPUT = res1 + ((res2 - 1) << 28);
|
|
116
|
+
return reinterpret_cast<const char*>(ptr);
|
|
117
|
+
|
|
118
|
+
done3:
|
|
119
|
+
*OUTPUT = res1 + ((res2 - 1) << 28) + ((res3 - 1) << 56);
|
|
120
|
+
return reinterpret_cast<const char*>(ptr);
|
|
121
|
+
#else
|
|
122
|
+
uint32 byte, res1, res2=0, res3=0;
|
|
123
|
+
byte = *(ptr++); res1 = byte & 127;
|
|
124
|
+
byte = *(ptr++); res1 |= (byte & 127) << 7; if (byte < 128) goto done1;
|
|
125
|
+
byte = *(ptr++); res1 |= (byte & 127) << 14; if (byte < 128) goto done1;
|
|
126
|
+
byte = *(ptr++); res1 |= (byte & 127) << 21; if (byte < 128) goto done1;
|
|
127
|
+
|
|
128
|
+
byte = *(ptr++); res2 = byte & 127; if (byte < 128) goto done2;
|
|
129
|
+
byte = *(ptr++); res2 |= (byte & 127) << 7; if (byte < 128) goto done2;
|
|
130
|
+
byte = *(ptr++); res2 |= (byte & 127) << 14; if (byte < 128) goto done2;
|
|
131
|
+
byte = *(ptr++); res2 |= (byte & 127) << 21; if (byte < 128) goto done2;
|
|
132
|
+
|
|
133
|
+
byte = *(ptr++); res3 = byte & 127; if (byte < 128) goto done3;
|
|
134
|
+
byte = *(ptr++); res3 |= (byte & 127) << 7; if (byte < 2) goto done3;
|
|
135
|
+
|
|
136
|
+
return nullptr; // Value is too long to be a varint64
|
|
137
|
+
|
|
138
|
+
done1:
|
|
139
|
+
assert(res2 == 0);
|
|
140
|
+
assert(res3 == 0);
|
|
141
|
+
*OUTPUT = res1;
|
|
142
|
+
return reinterpret_cast<const char*>(ptr);
|
|
143
|
+
|
|
144
|
+
done2:
|
|
145
|
+
assert(res3 == 0);
|
|
146
|
+
*OUTPUT = res1 | (uint64(res2) << 28);
|
|
147
|
+
return reinterpret_cast<const char*>(ptr);
|
|
148
|
+
|
|
149
|
+
done3:
|
|
150
|
+
*OUTPUT = res1 | (uint64(res2) << 28) | (uint64(res3) << 56);
|
|
151
|
+
return reinterpret_cast<const char*>(ptr);
|
|
152
|
+
#endif
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
const char* Varint::Parse32BackwardSlow(const char* ptr, const char* base,
|
|
156
|
+
uint32* OUTPUT) {
|
|
157
|
+
// Since this method is rarely called, for simplicity, we just skip backward
|
|
158
|
+
// and then parse forward.
|
|
159
|
+
const char* prev = Skip32BackwardSlow(ptr, base);
|
|
160
|
+
if (prev == nullptr)
|
|
161
|
+
return nullptr; // no value before 'ptr'
|
|
162
|
+
|
|
163
|
+
Parse32(prev, OUTPUT);
|
|
164
|
+
return prev;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
const char* Varint::Parse64BackwardSlow(const char* ptr, const char* base,
|
|
168
|
+
uint64* OUTPUT) {
|
|
169
|
+
// Since this method is rarely called, for simplicity, we just skip backward
|
|
170
|
+
// and then parse forward.
|
|
171
|
+
const char* prev = Skip64BackwardSlow(ptr, base);
|
|
172
|
+
if (prev == nullptr)
|
|
173
|
+
return nullptr; // no value before 'ptr'
|
|
174
|
+
|
|
175
|
+
Parse64(prev, OUTPUT);
|
|
176
|
+
return prev;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
const char* Varint::Parse64WithLimit(const char* p,
|
|
180
|
+
const char* l,
|
|
181
|
+
uint64* OUTPUT) {
|
|
182
|
+
if (p + kMax64 <= l) {
|
|
183
|
+
return Parse64(p, OUTPUT);
|
|
184
|
+
} else {
|
|
185
|
+
// See detailed comment in Varint::Parse64Fallback about this general
|
|
186
|
+
// approach.
|
|
187
|
+
const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
|
|
188
|
+
const unsigned char* limit = reinterpret_cast<const unsigned char*>(l);
|
|
189
|
+
uint64 b, result;
|
|
190
|
+
#if defined(__x86_64__)
|
|
191
|
+
if (ptr >= limit) return nullptr;
|
|
192
|
+
b = *(ptr++); result = b; if (b < 128) goto done;
|
|
193
|
+
if (ptr >= limit) return nullptr;
|
|
194
|
+
b = *(ptr++); result += (b - 1) << 7; if (b < 128) goto done;
|
|
195
|
+
if (ptr >= limit) return nullptr;
|
|
196
|
+
b = *(ptr++); result += (b - 1) << 14; if (b < 128) goto done;
|
|
197
|
+
if (ptr >= limit) return nullptr;
|
|
198
|
+
b = *(ptr++); result += (b - 1) << 21; if (b < 128) goto done;
|
|
199
|
+
if (ptr >= limit) return nullptr;
|
|
200
|
+
b = *(ptr++); result += (b - 1) << 28; if (b < 128) goto done;
|
|
201
|
+
if (ptr >= limit) return nullptr;
|
|
202
|
+
b = *(ptr++); result += (b - 1) << 35; if (b < 128) goto done;
|
|
203
|
+
if (ptr >= limit) return nullptr;
|
|
204
|
+
b = *(ptr++); result += (b - 1) << 42; if (b < 128) goto done;
|
|
205
|
+
if (ptr >= limit) return nullptr;
|
|
206
|
+
b = *(ptr++); result += (b - 1) << 49; if (b < 128) goto done;
|
|
207
|
+
if (ptr >= limit) return nullptr;
|
|
208
|
+
b = *(ptr++); result += (b - 1) << 56; if (b < 128) goto done;
|
|
209
|
+
if (ptr >= limit) return nullptr;
|
|
210
|
+
b = *(ptr++); result += (b - 1) << 63; if (b < 2) goto done;
|
|
211
|
+
return nullptr; // Value is too long to be a varint64
|
|
212
|
+
#else
|
|
213
|
+
if (ptr >= limit) return nullptr;
|
|
214
|
+
b = *(ptr++); result = b & 127; if (b < 128) goto done;
|
|
215
|
+
if (ptr >= limit) return nullptr;
|
|
216
|
+
b = *(ptr++); result |= (b & 127) << 7; if (b < 128) goto done;
|
|
217
|
+
if (ptr >= limit) return nullptr;
|
|
218
|
+
b = *(ptr++); result |= (b & 127) << 14; if (b < 128) goto done;
|
|
219
|
+
if (ptr >= limit) return nullptr;
|
|
220
|
+
b = *(ptr++); result |= (b & 127) << 21; if (b < 128) goto done;
|
|
221
|
+
if (ptr >= limit) return nullptr;
|
|
222
|
+
b = *(ptr++); result |= (b & 127) << 28; if (b < 128) goto done;
|
|
223
|
+
if (ptr >= limit) return nullptr;
|
|
224
|
+
b = *(ptr++); result |= (b & 127) << 35; if (b < 128) goto done;
|
|
225
|
+
if (ptr >= limit) return nullptr;
|
|
226
|
+
b = *(ptr++); result |= (b & 127) << 42; if (b < 128) goto done;
|
|
227
|
+
if (ptr >= limit) return nullptr;
|
|
228
|
+
b = *(ptr++); result |= (b & 127) << 49; if (b < 128) goto done;
|
|
229
|
+
if (ptr >= limit) return nullptr;
|
|
230
|
+
b = *(ptr++); result |= (b & 127) << 56; if (b < 128) goto done;
|
|
231
|
+
if (ptr >= limit) return nullptr;
|
|
232
|
+
b = *(ptr++); result |= (b & 127) << 63; if (b < 2) goto done;
|
|
233
|
+
return nullptr; // Value is too long to be a varint64
|
|
234
|
+
#endif
|
|
235
|
+
done:
|
|
236
|
+
*OUTPUT = result;
|
|
237
|
+
return reinterpret_cast<const char*>(ptr);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
const char* Varint::Skip32BackwardSlow(const char* p, const char* b) {
|
|
242
|
+
const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
|
|
243
|
+
const unsigned char* base = reinterpret_cast<const unsigned char*>(b);
|
|
244
|
+
assert(ptr >= base);
|
|
245
|
+
|
|
246
|
+
// If the initial pointer is at the base or if the previous byte is not
|
|
247
|
+
// the last byte of a varint, we return nullptr since there is nothing to
|
|
248
|
+
// skip.
|
|
249
|
+
if (ptr == base) return nullptr;
|
|
250
|
+
if (*(--ptr) > 127) return nullptr;
|
|
251
|
+
|
|
252
|
+
for (int i = 0; i < 5; i++) {
|
|
253
|
+
if (ptr == base) return reinterpret_cast<const char*>(ptr);
|
|
254
|
+
if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr + 1);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
return nullptr; // value is too long to be a varint32
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
const char* Varint::Skip64BackwardSlow(const char* p, const char* b) {
|
|
261
|
+
const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
|
|
262
|
+
const unsigned char* base = reinterpret_cast<const unsigned char*>(b);
|
|
263
|
+
assert(ptr >= base);
|
|
264
|
+
|
|
265
|
+
// If the initial pointer is at the base or if the previous byte is not
|
|
266
|
+
// the last byte of a varint, we return nullptr since there is nothing to
|
|
267
|
+
// skip.
|
|
268
|
+
if (ptr == base) return nullptr;
|
|
269
|
+
if (*(--ptr) > 127) return nullptr;
|
|
270
|
+
|
|
271
|
+
for (int i = 0; i < 10; i++) {
|
|
272
|
+
if (ptr == base) return reinterpret_cast<const char*>(ptr);
|
|
273
|
+
if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr + 1);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
return nullptr; // value is too long to be a varint64
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
void Varint::Append32Slow(string* s, uint32 value) {
|
|
280
|
+
const size_t start = s->size();
|
|
281
|
+
s->resize(start + Varint::Length32(value));
|
|
282
|
+
Varint::Encode32(&((*s)[start]), value);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
void Varint::Append64Slow(string* s, uint64 value) {
|
|
286
|
+
const size_t start = s->size();
|
|
287
|
+
s->resize(start + Varint::Length64(value));
|
|
288
|
+
Varint::Encode64(&((*s)[start]), value);
|
|
289
|
+
}
|