@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,476 @@
|
|
|
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
|
+
// Raw support for varint encoding. Higher level interfaces are
|
|
18
|
+
// provided by Encoder/Decoder/IOBuffer. Clients should typically use
|
|
19
|
+
// those interfaces, unless speed is paramount.
|
|
20
|
+
//
|
|
21
|
+
// If decoding speed is very important, consider using PrefixVarint instead.
|
|
22
|
+
// It has the same compression ratio, but generally faster decoding.
|
|
23
|
+
//
|
|
24
|
+
// Provided routines:
|
|
25
|
+
// vi_parse32_unchecked
|
|
26
|
+
// vi_parse64_unchecked
|
|
27
|
+
// vi_encode32_unchecked
|
|
28
|
+
// vi_encode64_unchecked
|
|
29
|
+
|
|
30
|
+
#ifndef S2_UTIL_CODING_VARINT_H_
|
|
31
|
+
#define S2_UTIL_CODING_VARINT_H_
|
|
32
|
+
|
|
33
|
+
// Avoid adding expensive includes here.
|
|
34
|
+
#include <cassert>
|
|
35
|
+
#include <cstddef>
|
|
36
|
+
#include <string>
|
|
37
|
+
|
|
38
|
+
#include "s2/base/integral_types.h"
|
|
39
|
+
#include "s2/base/port.h"
|
|
40
|
+
#include "s2/third_party/absl/base/macros.h"
|
|
41
|
+
#include "s2/util/bits/bits.h"
|
|
42
|
+
|
|
43
|
+
// Just a namespace, not a real class
|
|
44
|
+
class Varint {
|
|
45
|
+
public:
|
|
46
|
+
// Maximum lengths of varint encoding of uint32 and uint64
|
|
47
|
+
static const int kMax32 = 5;
|
|
48
|
+
static const int kMax64 = 10;
|
|
49
|
+
|
|
50
|
+
// The decoder does not read past the end of the encoded data.
|
|
51
|
+
static const int kSlopBytes = 0;
|
|
52
|
+
|
|
53
|
+
// REQUIRES "ptr" points to a buffer of length at least kMaxXX
|
|
54
|
+
// EFFECTS Scan next varint from "ptr" and store in OUTPUT.
|
|
55
|
+
// Returns pointer just past last read byte. Returns
|
|
56
|
+
// nullptr if a valid varint value was not found.
|
|
57
|
+
static const char* Parse32(const char* ptr, uint32* OUTPUT);
|
|
58
|
+
static const char* Parse64(const char* ptr, uint64* OUTPUT);
|
|
59
|
+
|
|
60
|
+
// A fully inlined version of Parse32: useful in the most time critical
|
|
61
|
+
// routines, but its code size is large
|
|
62
|
+
static const char* Parse32Inline(const char* ptr, uint32* OUTPUT);
|
|
63
|
+
|
|
64
|
+
// REQUIRES "ptr" points just past the last byte of a varint-encoded value.
|
|
65
|
+
// REQUIRES A second varint must be encoded just before the one we parse,
|
|
66
|
+
// OR "base" must point to the first byte of the one we parse.
|
|
67
|
+
// REQUIRES Bytes [base, ptr-1] are readable
|
|
68
|
+
//
|
|
69
|
+
// EFFECTS Scan backwards from "ptr" and store in OUTPUT. Stop at the last
|
|
70
|
+
// byte of the previous varint, OR at "base", whichever one comes
|
|
71
|
+
// first. Returns pointer to the first byte of the decoded varint
|
|
72
|
+
// nullptr if a valid varint value was not found.
|
|
73
|
+
static const char* Parse32Backward(const char* ptr, const char* base,
|
|
74
|
+
uint32* OUTPUT);
|
|
75
|
+
static const char* Parse64Backward(const char* ptr, const char* base,
|
|
76
|
+
uint64* OUTPUT);
|
|
77
|
+
|
|
78
|
+
// Attempts to parse a varint32 from a prefix of the bytes in [ptr,limit-1].
|
|
79
|
+
// Never reads a character at or beyond limit. If a valid/terminated varint32
|
|
80
|
+
// was found in the range, stores it in *OUTPUT and returns a pointer just
|
|
81
|
+
// past the last byte of the varint32. Else returns nullptr. On success,
|
|
82
|
+
// "result <= limit".
|
|
83
|
+
static const char* Parse32WithLimit(const char* ptr, const char* limit,
|
|
84
|
+
uint32* OUTPUT);
|
|
85
|
+
static const char* Parse64WithLimit(const char* ptr, const char* limit,
|
|
86
|
+
uint64* OUTPUT);
|
|
87
|
+
|
|
88
|
+
// REQUIRES "ptr" points to the first byte of a varint-encoded value.
|
|
89
|
+
// EFFECTS Scans until the end of the varint and returns a pointer just
|
|
90
|
+
// past the last byte. Returns nullptr if "ptr" does not point to
|
|
91
|
+
// a valid varint value.
|
|
92
|
+
static const char* Skip32(const char* ptr);
|
|
93
|
+
static const char* Skip64(const char* ptr);
|
|
94
|
+
|
|
95
|
+
// REQUIRES "ptr" points just past the last byte of a varint-encoded value.
|
|
96
|
+
// REQUIRES A second varint must be encoded just before the one we parse,
|
|
97
|
+
// OR "base" must point to the first byte of the one we parse.
|
|
98
|
+
// REQUIRES Bytes [base, ptr-1] are readable
|
|
99
|
+
//
|
|
100
|
+
// EFFECTS Scan backwards from "ptr" and stop at the last byte of the
|
|
101
|
+
// previous varint, OR at "base", whichever one comes first.
|
|
102
|
+
// Returns pointer to the first byte of the skipped varint or
|
|
103
|
+
// nullptr if a valid varint value was not found.
|
|
104
|
+
static const char* Skip32Backward(const char* ptr, const char* base);
|
|
105
|
+
static const char* Skip64Backward(const char* ptr, const char* base);
|
|
106
|
+
|
|
107
|
+
// REQUIRES "ptr" points to a buffer of length sufficient to hold "v".
|
|
108
|
+
// EFFECTS Encodes "v" into "ptr" and returns a pointer to the
|
|
109
|
+
// byte just past the last encoded byte.
|
|
110
|
+
static char* Encode32(char* ptr, uint32 v);
|
|
111
|
+
static char* Encode64(char* ptr, uint64 v);
|
|
112
|
+
|
|
113
|
+
// A fully inlined version of Encode32: useful in the most time critical
|
|
114
|
+
// routines, but its code size is large
|
|
115
|
+
static char* Encode32Inline(char* ptr, uint32 v);
|
|
116
|
+
|
|
117
|
+
// EFFECTS Returns the encoding length of the specified value.
|
|
118
|
+
static int Length32(uint32 v);
|
|
119
|
+
static int Length64(uint64 v);
|
|
120
|
+
|
|
121
|
+
// EFFECTS Appends the varint representation of "value" to "*s".
|
|
122
|
+
static void Append32(string* s, uint32 value);
|
|
123
|
+
static void Append64(string* s, uint64 value);
|
|
124
|
+
|
|
125
|
+
// EFFECTS Encodes a pair of values to "*s". The encoding
|
|
126
|
+
// is done by weaving together 4 bit groups of
|
|
127
|
+
// each number into a single 64 bit value, and then
|
|
128
|
+
// encoding this value as a Varint64 value. This means
|
|
129
|
+
// that if both a and b are small, both values can be
|
|
130
|
+
// encoded in a single byte.
|
|
131
|
+
ABSL_DEPRECATED("Use TwoValuesVarint::Encode32.")
|
|
132
|
+
static void EncodeTwo32Values(string* s, uint32 a, uint32 b);
|
|
133
|
+
ABSL_DEPRECATED("Use TwoValuesVarint::Decode32.")
|
|
134
|
+
static const char* DecodeTwo32Values(const char* ptr, uint32* a, uint32* b);
|
|
135
|
+
ABSL_DEPRECATED("Use TwoValuesVarint::Decode32WithLimit.")
|
|
136
|
+
static const char* DecodeTwo32ValuesWithLimit(const char* ptr,
|
|
137
|
+
const char* limit, uint32* a,
|
|
138
|
+
uint32* b);
|
|
139
|
+
|
|
140
|
+
// Decode and sum up a sequence of deltas until the sum >= goal.
|
|
141
|
+
// It is significantly faster than calling ParseXXInline in a loop.
|
|
142
|
+
// NOTE(user): The code does NO error checking, it assumes all the
|
|
143
|
+
// deltas are valid and the sum of deltas will never exceed
|
|
144
|
+
// numeric_limits<int64>::max(). The code works for both 32bits and
|
|
145
|
+
// 64bits varint, and on 64 bits machines, the 64 bits version is
|
|
146
|
+
// almost always faster. Thus we only have a 64 bits interface here.
|
|
147
|
+
// The interface is slightly different from the other functions in that
|
|
148
|
+
// it requires *signed* integers.
|
|
149
|
+
// REQUIRES "ptr" points to the first byte of a varint-encoded delta.
|
|
150
|
+
// The sum of deltas >= goal (the code does NO boundary check).
|
|
151
|
+
// goal is positive and fit into a signed int64.
|
|
152
|
+
// EFFECTS Returns a pointer just past last read byte.
|
|
153
|
+
// "out" stores the actual sum.
|
|
154
|
+
static const char* FastDecodeDeltas(const char* ptr, int64 goal, int64* out);
|
|
155
|
+
|
|
156
|
+
private:
|
|
157
|
+
static const char* Parse32FallbackInline(const char* p, uint32* val);
|
|
158
|
+
static const char* Parse32Fallback(const char* p, uint32* val);
|
|
159
|
+
static const char* Parse64Fallback(const char* p, uint64* val);
|
|
160
|
+
|
|
161
|
+
static char* Encode32Fallback(char* ptr, uint32 v);
|
|
162
|
+
|
|
163
|
+
static const char* Parse32BackwardSlow(const char* ptr, const char* base,
|
|
164
|
+
uint32* OUTPUT);
|
|
165
|
+
static const char* Parse64BackwardSlow(const char* ptr, const char* base,
|
|
166
|
+
uint64* OUTPUT);
|
|
167
|
+
static const char* Skip32BackwardSlow(const char* ptr, const char* base);
|
|
168
|
+
static const char* Skip64BackwardSlow(const char* ptr, const char* base);
|
|
169
|
+
|
|
170
|
+
static void Append32Slow(string* s, uint32 value);
|
|
171
|
+
static void Append64Slow(string* s, uint64 value);
|
|
172
|
+
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
/***** Implementation details; clients should ignore *****/
|
|
176
|
+
|
|
177
|
+
inline const char* Varint::Parse32FallbackInline(const char* p,
|
|
178
|
+
uint32* OUTPUT) {
|
|
179
|
+
// Fast path
|
|
180
|
+
const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
|
|
181
|
+
uint32 byte, result;
|
|
182
|
+
byte = *(ptr++); result = byte & 127;
|
|
183
|
+
assert(byte >= 128); // Already checked in inlined prelude
|
|
184
|
+
byte = *(ptr++); result |= (byte & 127) << 7; if (byte < 128) goto done;
|
|
185
|
+
byte = *(ptr++); result |= (byte & 127) << 14; if (byte < 128) goto done;
|
|
186
|
+
byte = *(ptr++); result |= (byte & 127) << 21; if (byte < 128) goto done;
|
|
187
|
+
byte = *(ptr++); result |= (byte & 127) << 28; if (byte < 16) goto done;
|
|
188
|
+
return nullptr; // Value is too long to be a varint32
|
|
189
|
+
done:
|
|
190
|
+
*OUTPUT = result;
|
|
191
|
+
return reinterpret_cast<const char*>(ptr);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
inline const char* Varint::Parse32(const char* p, uint32* OUTPUT) {
|
|
195
|
+
// Fast path for inlining
|
|
196
|
+
const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
|
|
197
|
+
uint32 byte = *ptr;
|
|
198
|
+
if (byte < 128) {
|
|
199
|
+
*OUTPUT = byte;
|
|
200
|
+
return reinterpret_cast<const char*>(ptr) + 1;
|
|
201
|
+
} else {
|
|
202
|
+
return Parse32Fallback(p, OUTPUT);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
inline const char* Varint::Parse32Inline(const char* p, uint32* OUTPUT) {
|
|
207
|
+
// Fast path for inlining
|
|
208
|
+
const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
|
|
209
|
+
uint32 byte = *ptr;
|
|
210
|
+
if (byte < 128) {
|
|
211
|
+
*OUTPUT = byte;
|
|
212
|
+
return reinterpret_cast<const char*>(ptr) + 1;
|
|
213
|
+
} else {
|
|
214
|
+
return Parse32FallbackInline(p, OUTPUT);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
inline const char* Varint::Skip32(const char* p) {
|
|
219
|
+
const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
|
|
220
|
+
if (*ptr++ < 128) return reinterpret_cast<const char*>(ptr);
|
|
221
|
+
if (*ptr++ < 128) return reinterpret_cast<const char*>(ptr);
|
|
222
|
+
if (*ptr++ < 128) return reinterpret_cast<const char*>(ptr);
|
|
223
|
+
if (*ptr++ < 128) return reinterpret_cast<const char*>(ptr);
|
|
224
|
+
if (*ptr++ < 16) return reinterpret_cast<const char*>(ptr);
|
|
225
|
+
return nullptr; // value is too long to be a varint32
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
inline const char* Varint::Parse32Backward(const char* p, const char* base,
|
|
229
|
+
uint32* OUTPUT) {
|
|
230
|
+
if (p > base + kMax32) {
|
|
231
|
+
// Fast path
|
|
232
|
+
const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
|
|
233
|
+
uint32 byte, result;
|
|
234
|
+
byte = *(--ptr); if (byte > 127) return nullptr;
|
|
235
|
+
result = byte;
|
|
236
|
+
byte = *(--ptr); if (byte < 128) goto done;
|
|
237
|
+
result <<= 7; result |= (byte & 127);
|
|
238
|
+
byte = *(--ptr); if (byte < 128) goto done;
|
|
239
|
+
result <<= 7; result |= (byte & 127);
|
|
240
|
+
byte = *(--ptr); if (byte < 128) goto done;
|
|
241
|
+
result <<= 7; result |= (byte & 127);
|
|
242
|
+
byte = *(--ptr); if (byte < 128) goto done;
|
|
243
|
+
result <<= 7; result |= (byte & 127);
|
|
244
|
+
byte = *(--ptr); if (byte < 128) goto done;
|
|
245
|
+
return nullptr; // Value is too long to be a varint32
|
|
246
|
+
done:
|
|
247
|
+
*OUTPUT = result;
|
|
248
|
+
return reinterpret_cast<const char*>(ptr+1);
|
|
249
|
+
} else {
|
|
250
|
+
return Parse32BackwardSlow(p, base, OUTPUT);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
inline const char* Varint::Skip32Backward(const char* p, const char* base) {
|
|
255
|
+
if (p > base + kMax32) {
|
|
256
|
+
const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
|
|
257
|
+
if (*(--ptr) > 127) return nullptr;
|
|
258
|
+
if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
|
|
259
|
+
if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
|
|
260
|
+
if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
|
|
261
|
+
if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
|
|
262
|
+
if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
|
|
263
|
+
return nullptr; // value is too long to be a varint32
|
|
264
|
+
} else {
|
|
265
|
+
return Skip32BackwardSlow(p, base);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
inline const char* Varint::Parse32WithLimit(const char* p,
|
|
270
|
+
const char* l,
|
|
271
|
+
uint32* OUTPUT) {
|
|
272
|
+
// Version with bounds checks.
|
|
273
|
+
// This formerly had an optimization to inline the non-bounds checking Parse32
|
|
274
|
+
// but it was found to be slower than the straightforward implementation.
|
|
275
|
+
const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
|
|
276
|
+
const unsigned char* limit = reinterpret_cast<const unsigned char*>(l);
|
|
277
|
+
uint32 b, result;
|
|
278
|
+
if (ptr >= limit) return nullptr;
|
|
279
|
+
b = *(ptr++); result = b & 127; if (b < 128) goto done;
|
|
280
|
+
if (ptr >= limit) return nullptr;
|
|
281
|
+
b = *(ptr++); result |= (b & 127) << 7; if (b < 128) goto done;
|
|
282
|
+
if (ptr >= limit) return nullptr;
|
|
283
|
+
b = *(ptr++); result |= (b & 127) << 14; if (b < 128) goto done;
|
|
284
|
+
if (ptr >= limit) return nullptr;
|
|
285
|
+
b = *(ptr++); result |= (b & 127) << 21; if (b < 128) goto done;
|
|
286
|
+
if (ptr >= limit) return nullptr;
|
|
287
|
+
b = *(ptr++); result |= (b & 127) << 28; if (b < 16) goto done;
|
|
288
|
+
return nullptr; // Value is too long to be a varint32
|
|
289
|
+
done:
|
|
290
|
+
*OUTPUT = result;
|
|
291
|
+
return reinterpret_cast<const char*>(ptr);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
inline const char* Varint::Parse64(const char* p, uint64* OUTPUT) {
|
|
295
|
+
const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
|
|
296
|
+
uint32 byte = *ptr;
|
|
297
|
+
if (byte < 128) {
|
|
298
|
+
*OUTPUT = byte;
|
|
299
|
+
return reinterpret_cast<const char*>(ptr) + 1;
|
|
300
|
+
} else {
|
|
301
|
+
return Parse64Fallback(p, OUTPUT);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
inline const char* Varint::Skip64(const char* p) {
|
|
306
|
+
const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
|
|
307
|
+
if (*ptr++ < 128) return reinterpret_cast<const char*>(ptr);
|
|
308
|
+
if (*ptr++ < 128) return reinterpret_cast<const char*>(ptr);
|
|
309
|
+
if (*ptr++ < 128) return reinterpret_cast<const char*>(ptr);
|
|
310
|
+
if (*ptr++ < 128) return reinterpret_cast<const char*>(ptr);
|
|
311
|
+
if (*ptr++ < 128) return reinterpret_cast<const char*>(ptr);
|
|
312
|
+
if (*ptr++ < 128) return reinterpret_cast<const char*>(ptr);
|
|
313
|
+
if (*ptr++ < 128) return reinterpret_cast<const char*>(ptr);
|
|
314
|
+
if (*ptr++ < 128) return reinterpret_cast<const char*>(ptr);
|
|
315
|
+
if (*ptr++ < 128) return reinterpret_cast<const char*>(ptr);
|
|
316
|
+
if (*ptr++ < 2) return reinterpret_cast<const char*>(ptr);
|
|
317
|
+
return nullptr; // value is too long to be a varint64
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
inline const char* Varint::Parse64Backward(const char* p, const char* b,
|
|
321
|
+
uint64* OUTPUT) {
|
|
322
|
+
if (p > b + kMax64) {
|
|
323
|
+
// Fast path
|
|
324
|
+
const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
|
|
325
|
+
uint32 byte;
|
|
326
|
+
uint64 res;
|
|
327
|
+
|
|
328
|
+
byte = *(--ptr); if (byte > 127) return nullptr;
|
|
329
|
+
|
|
330
|
+
res = byte;
|
|
331
|
+
byte = *(--ptr); if (byte < 128) goto done;
|
|
332
|
+
res <<= 7; res |= (byte & 127);
|
|
333
|
+
byte = *(--ptr); if (byte < 128) goto done;
|
|
334
|
+
res <<= 7; res |= (byte & 127);
|
|
335
|
+
byte = *(--ptr); if (byte < 128) goto done;
|
|
336
|
+
res <<= 7; res |= (byte & 127);
|
|
337
|
+
byte = *(--ptr); if (byte < 128) goto done;
|
|
338
|
+
res <<= 7; res |= (byte & 127);
|
|
339
|
+
byte = *(--ptr); if (byte < 128) goto done;
|
|
340
|
+
res <<= 7; res |= (byte & 127);
|
|
341
|
+
byte = *(--ptr); if (byte < 128) goto done;
|
|
342
|
+
res <<= 7; res |= (byte & 127);
|
|
343
|
+
byte = *(--ptr); if (byte < 128) goto done;
|
|
344
|
+
res <<= 7; res |= (byte & 127);
|
|
345
|
+
byte = *(--ptr); if (byte < 128) goto done;
|
|
346
|
+
res <<= 7; res |= (byte & 127);
|
|
347
|
+
byte = *(--ptr); if (byte < 128) goto done;
|
|
348
|
+
res <<= 7; res |= (byte & 127);
|
|
349
|
+
byte = *(--ptr); if (byte < 128) goto done;
|
|
350
|
+
|
|
351
|
+
return nullptr; // Value is too long to be a varint64
|
|
352
|
+
|
|
353
|
+
done:
|
|
354
|
+
*OUTPUT = res;
|
|
355
|
+
return reinterpret_cast<const char*>(ptr + 1);
|
|
356
|
+
} else {
|
|
357
|
+
return Parse64BackwardSlow(p, b, OUTPUT);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
inline const char* Varint::Skip64Backward(const char* p, const char* b) {
|
|
362
|
+
if (p > b + kMax64) {
|
|
363
|
+
// Fast path
|
|
364
|
+
const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
|
|
365
|
+
if (*(--ptr) > 127) return nullptr;
|
|
366
|
+
if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
|
|
367
|
+
if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
|
|
368
|
+
if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
|
|
369
|
+
if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
|
|
370
|
+
if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
|
|
371
|
+
if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
|
|
372
|
+
if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
|
|
373
|
+
if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
|
|
374
|
+
if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
|
|
375
|
+
if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
|
|
376
|
+
return nullptr; // value is too long to be a varint64
|
|
377
|
+
} else {
|
|
378
|
+
return Skip64BackwardSlow(p, b);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
inline int Varint::Length32(uint32 v) {
|
|
383
|
+
// This computes value == 0 ? 1 : floor(log2(v)) / 7 + 1
|
|
384
|
+
// Use an explicit multiplication to implement the divide of
|
|
385
|
+
// a number in the 1..31 range.
|
|
386
|
+
// Explicit OR 0x1 to handle v == 0.
|
|
387
|
+
uint32 log2value = Bits::Log2FloorNonZero(v | 0x1);
|
|
388
|
+
return static_cast<int>((log2value * 9 + 73) / 64);
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
inline int Varint::Length64(uint64 v) {
|
|
392
|
+
// This computes value == 0 ? 1 : floor(log2(v)) / 7 + 1
|
|
393
|
+
// Use an explicit multiplication to implement the divide of
|
|
394
|
+
// a number in the 1..63 range.
|
|
395
|
+
// Explicit OR 0x1 to handle v == 0.
|
|
396
|
+
uint32 log2value = Bits::Log2FloorNonZero64(v | 0x1);
|
|
397
|
+
return static_cast<int>((log2value * 9 + 73) / 64);
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
inline void Varint::Append32(string* s, uint32 value) {
|
|
401
|
+
// Inline the fast-path for single-character output, but fall back to the .cc
|
|
402
|
+
// file for the full version. The size<capacity check is so the compiler can
|
|
403
|
+
// optimize out the string resize code.
|
|
404
|
+
if (value < 128 && s->size() < s->capacity()) {
|
|
405
|
+
s->push_back((unsigned char)value);
|
|
406
|
+
} else {
|
|
407
|
+
Append32Slow(s, value);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
inline void Varint::Append64(string* s, uint64 value) {
|
|
412
|
+
// Inline the fast-path for single-character output, but fall back to the .cc
|
|
413
|
+
// file for the full version. The size<capacity check is so the compiler can
|
|
414
|
+
// optimize out the string resize code.
|
|
415
|
+
if (value < 128 && s->size() < s->capacity()) {
|
|
416
|
+
s->push_back((unsigned char)value);
|
|
417
|
+
} else {
|
|
418
|
+
Append64Slow(s, value);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
inline char* Varint::Encode32Inline(char* sptr, uint32 v) {
|
|
423
|
+
// Operate on characters as unsigneds
|
|
424
|
+
uint8* ptr = reinterpret_cast<uint8*>(sptr);
|
|
425
|
+
static const uint32 B = 128;
|
|
426
|
+
if (v < (1<<7)) {
|
|
427
|
+
*(ptr++) = static_cast<uint8>(v);
|
|
428
|
+
} else if (v < (1<<14)) {
|
|
429
|
+
*(ptr++) = static_cast<uint8>(v | B);
|
|
430
|
+
*(ptr++) = static_cast<uint8>(v>>7);
|
|
431
|
+
} else if (v < (1<<21)) {
|
|
432
|
+
*(ptr++) = static_cast<uint8>(v | B);
|
|
433
|
+
*(ptr++) = static_cast<uint8>((v>>7) | B);
|
|
434
|
+
*(ptr++) = static_cast<uint8>(v>>14);
|
|
435
|
+
} else if (v < (1<<28)) {
|
|
436
|
+
*(ptr++) = static_cast<uint8>(v | B);
|
|
437
|
+
*(ptr++) = static_cast<uint8>((v>>7) | B);
|
|
438
|
+
*(ptr++) = static_cast<uint8>((v>>14) | B);
|
|
439
|
+
*(ptr++) = static_cast<uint8>(v>>21);
|
|
440
|
+
} else {
|
|
441
|
+
*(ptr++) = static_cast<uint8>(v | B);
|
|
442
|
+
*(ptr++) = static_cast<uint8>((v>>7) | B);
|
|
443
|
+
*(ptr++) = static_cast<uint8>((v>>14) | B);
|
|
444
|
+
*(ptr++) = static_cast<uint8>((v>>21) | B);
|
|
445
|
+
*(ptr++) = static_cast<uint8>(v>>28);
|
|
446
|
+
}
|
|
447
|
+
return reinterpret_cast<char*>(ptr);
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
#if (-1 >> 1) != -1
|
|
451
|
+
#error FastDecodeDeltas() needs right-shift to sign-extend.
|
|
452
|
+
#endif
|
|
453
|
+
inline const char* Varint::FastDecodeDeltas(const char* ptr,
|
|
454
|
+
int64 goal,
|
|
455
|
+
int64* out) {
|
|
456
|
+
int64 value;
|
|
457
|
+
int64 sum = - goal;
|
|
458
|
+
int64 shift = 0;
|
|
459
|
+
// Make decoding faster by eliminating unpredictable branching.
|
|
460
|
+
do {
|
|
461
|
+
value = static_cast<int8>(*ptr++); // sign extend one byte of data
|
|
462
|
+
sum += (value & 0x7F) << shift;
|
|
463
|
+
shift += 7;
|
|
464
|
+
// (value >> 7) is either -1(continuation byte) or 0 (stop byte)
|
|
465
|
+
shift &= value >> 7;
|
|
466
|
+
// Loop if we haven't reached goal (sum < 0) or we haven't finished
|
|
467
|
+
// parsing current delta (value < 0). We write it in the form of
|
|
468
|
+
// (a | b) < 0 as opposed to (a < 0 || b < 0) as the former one is
|
|
469
|
+
// usually as fast as a test for (a < 0).
|
|
470
|
+
} while ((sum | value) < 0);
|
|
471
|
+
|
|
472
|
+
*out = goal + sum;
|
|
473
|
+
return ptr;
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
#endif // S2_UTIL_CODING_VARINT_H_
|