@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,83 @@
|
|
|
1
|
+
// Copyright 2000 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
|
+
|
|
19
|
+
#include "s2/util/coding/coder.h"
|
|
20
|
+
|
|
21
|
+
#include <algorithm>
|
|
22
|
+
#include <cassert>
|
|
23
|
+
|
|
24
|
+
#include "s2/base/integral_types.h"
|
|
25
|
+
#include "s2/base/logging.h"
|
|
26
|
+
|
|
27
|
+
// An initialization value used when we are allowed to
|
|
28
|
+
unsigned char Encoder::kEmptyBuffer = 0;
|
|
29
|
+
|
|
30
|
+
Encoder::Encoder()
|
|
31
|
+
: underlying_buffer_(&kEmptyBuffer) {
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
Encoder::~Encoder() {
|
|
35
|
+
S2_CHECK_LE(buf_, limit_); // Catch the buffer overflow.
|
|
36
|
+
if (underlying_buffer_ != &kEmptyBuffer) {
|
|
37
|
+
std::allocator<unsigned char>().deallocate(
|
|
38
|
+
underlying_buffer_, limit_ - orig_);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
int Encoder::varint32_length(uint32 v) {
|
|
43
|
+
return Varint::Length32(v);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
int Encoder::varint64_length(uint64 v) {
|
|
47
|
+
return Varint::Length64(v);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
void Encoder::EnsureSlowPath(size_t N) {
|
|
51
|
+
S2_CHECK(ensure_allowed());
|
|
52
|
+
assert(avail() < N);
|
|
53
|
+
assert(length() == 0 || orig_ == underlying_buffer_);
|
|
54
|
+
|
|
55
|
+
// Double buffer size, but make sure we always have at least N extra bytes
|
|
56
|
+
const size_t current_len = length();
|
|
57
|
+
const size_t new_capacity = std::max(current_len + N, 2 * current_len);
|
|
58
|
+
|
|
59
|
+
unsigned char* new_buffer = std::allocator<unsigned char>().allocate(
|
|
60
|
+
new_capacity);
|
|
61
|
+
memcpy(new_buffer, underlying_buffer_, current_len);
|
|
62
|
+
if (underlying_buffer_ != &kEmptyBuffer) {
|
|
63
|
+
std::allocator<unsigned char>().deallocate(
|
|
64
|
+
underlying_buffer_, limit_ - orig_);
|
|
65
|
+
}
|
|
66
|
+
underlying_buffer_ = new_buffer;
|
|
67
|
+
|
|
68
|
+
orig_ = new_buffer;
|
|
69
|
+
limit_ = new_buffer + new_capacity;
|
|
70
|
+
buf_ = orig_ + current_len;
|
|
71
|
+
S2_CHECK(avail() >= N);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
void Encoder::RemoveLast(size_t N) {
|
|
75
|
+
S2_CHECK(length() >= N);
|
|
76
|
+
buf_ -= N;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
void Encoder::Resize(size_t N) {
|
|
80
|
+
S2_CHECK(length() >= N);
|
|
81
|
+
buf_ = orig_ + N;
|
|
82
|
+
assert(length() == N);
|
|
83
|
+
}
|
|
@@ -0,0 +1,553 @@
|
|
|
1
|
+
// Copyright 2000 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
|
+
// This holds the encoding/decoding routines that used to live in netutil
|
|
19
|
+
|
|
20
|
+
#ifndef S2_UTIL_CODING_CODER_H_
|
|
21
|
+
#define S2_UTIL_CODING_CODER_H_
|
|
22
|
+
|
|
23
|
+
#include <cstring>
|
|
24
|
+
|
|
25
|
+
// Avoid adding expensive includes here.
|
|
26
|
+
#include "s2/base/casts.h"
|
|
27
|
+
#include "s2/base/integral_types.h"
|
|
28
|
+
#include "s2/base/logging.h"
|
|
29
|
+
#include "s2/base/port.h"
|
|
30
|
+
#include "s2/third_party/absl/base/macros.h"
|
|
31
|
+
#include "s2/third_party/absl/meta/type_traits.h"
|
|
32
|
+
#include "s2/util/coding/varint.h"
|
|
33
|
+
#include "s2/util/endian/endian.h"
|
|
34
|
+
|
|
35
|
+
/* Class for encoding data into a memory buffer */
|
|
36
|
+
class Decoder;
|
|
37
|
+
class Encoder {
|
|
38
|
+
public:
|
|
39
|
+
// Creates an empty Encoder with no room that is enlarged
|
|
40
|
+
// (if necessary) when "Encoder::Ensure(N)" is called.
|
|
41
|
+
Encoder();
|
|
42
|
+
~Encoder();
|
|
43
|
+
|
|
44
|
+
// Initialize encoder to encode into "buf"
|
|
45
|
+
Encoder(void* buf, size_t maxn);
|
|
46
|
+
void reset(void* buf, size_t maxn);
|
|
47
|
+
void clear();
|
|
48
|
+
|
|
49
|
+
// Encoding routines. Note that these do not check bounds
|
|
50
|
+
void put8(unsigned char v);
|
|
51
|
+
void put16(uint16 v);
|
|
52
|
+
void put32(uint32 v);
|
|
53
|
+
void put64(uint64 v);
|
|
54
|
+
void putn(const void* mem, size_t n);
|
|
55
|
+
|
|
56
|
+
// Put no more than n bytes, stopping when c is put.
|
|
57
|
+
void putcn(const void* mem, int c, size_t n);
|
|
58
|
+
|
|
59
|
+
void puts(const void* mem); // put a c-string including \0
|
|
60
|
+
void puts_without_null(const char* mem); // put a c-string without \0
|
|
61
|
+
void putfloat(float f);
|
|
62
|
+
void putdouble(double d);
|
|
63
|
+
|
|
64
|
+
// Support for variable length encoding with 7 bits per byte
|
|
65
|
+
// (these are just simple wrappers around the Varint module)
|
|
66
|
+
static const int kVarintMax32 = Varint::kMax32;
|
|
67
|
+
static const int kVarintMax64 = Varint::kMax64;
|
|
68
|
+
|
|
69
|
+
void put_varint32(uint32 v);
|
|
70
|
+
void put_varint32_inline(uint32 v);
|
|
71
|
+
void put_varint64(uint64 v);
|
|
72
|
+
static int varint32_length(uint32 v); // Length of var encoding of "v"
|
|
73
|
+
static int varint64_length(uint64 v); // Length of var encoding of "v"
|
|
74
|
+
|
|
75
|
+
// The fast implementation of the code below with boundary checks.
|
|
76
|
+
// uint64 val;
|
|
77
|
+
// if (!dec->get_varint64(&val))
|
|
78
|
+
// return false;
|
|
79
|
+
// enc->put_varint64(val);
|
|
80
|
+
// return true;
|
|
81
|
+
// We assume that the encoder and decoder point to different buffers.
|
|
82
|
+
// If the decoder has invalid value, i.e., dec->get_varint64(&val)
|
|
83
|
+
// returns false, the decoder is not updated, which is different from
|
|
84
|
+
// dec->get_varint64(&val).
|
|
85
|
+
bool put_varint64_from_decoder(Decoder* dec);
|
|
86
|
+
|
|
87
|
+
// Return number of bytes encoded so far
|
|
88
|
+
size_t length() const;
|
|
89
|
+
|
|
90
|
+
// Return number of bytes of space remaining in buffer
|
|
91
|
+
size_t avail() const;
|
|
92
|
+
|
|
93
|
+
// REQUIRES: Encoder was created with the 0-argument constructor interface.
|
|
94
|
+
//
|
|
95
|
+
// This interface ensures that at least "N" more bytes are available
|
|
96
|
+
// in the underlying buffer by resizing the buffer (if necessary).
|
|
97
|
+
//
|
|
98
|
+
// Note that no bounds checking is done on any of the put routines,
|
|
99
|
+
// so it is the client's responsibility to call Ensure() at
|
|
100
|
+
// appropriate intervals to ensure that enough space is available
|
|
101
|
+
// for the data being added.
|
|
102
|
+
void Ensure(size_t N);
|
|
103
|
+
|
|
104
|
+
// Returns true if Ensure is allowed to be called on "this"
|
|
105
|
+
bool ensure_allowed() const { return underlying_buffer_ != nullptr; }
|
|
106
|
+
|
|
107
|
+
// Return ptr to start of encoded data. This pointer remains valid
|
|
108
|
+
// until reset or Ensure is called.
|
|
109
|
+
const char* base() const { return reinterpret_cast<const char*>(orig_); }
|
|
110
|
+
|
|
111
|
+
// Advances the write pointer by "N" bytes.
|
|
112
|
+
void skip(size_t N) { buf_ += N; }
|
|
113
|
+
|
|
114
|
+
// REQUIRES: length() >= N
|
|
115
|
+
// Removes the last N bytes out of the encoded buffer
|
|
116
|
+
void RemoveLast(size_t N);
|
|
117
|
+
|
|
118
|
+
// REQUIRES: length() >= N
|
|
119
|
+
// Removes the last length()-N bytes to make the encoded buffer have length N
|
|
120
|
+
void Resize(size_t N);
|
|
121
|
+
|
|
122
|
+
private:
|
|
123
|
+
void EnsureSlowPath(size_t N);
|
|
124
|
+
|
|
125
|
+
// Puts varint64 from decoder for varint64 sizes from 3 ~ 10. This is less
|
|
126
|
+
// common cases compared to 1 - 2 byte varint64. Returns false if either the
|
|
127
|
+
// encoder or the decoder fails the boundary check, or varint64 size exceeds
|
|
128
|
+
// the maximum size (kVarintMax64).
|
|
129
|
+
bool PutVarint64FromDecoderLessCommonSizes(Decoder* dec);
|
|
130
|
+
|
|
131
|
+
// buf_ points into the orig_ buffer, just past the last encoded byte.
|
|
132
|
+
unsigned char* buf_ = nullptr;
|
|
133
|
+
|
|
134
|
+
// limits_ points just past the last allocated byte in the orig_ buffer.
|
|
135
|
+
unsigned char* limit_ = nullptr;
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
// If this Encoder owns its buffer, underlying_buffer_ is non-nullptr
|
|
139
|
+
// and the Encoder is allowed to resize it when Ensure() is called.
|
|
140
|
+
unsigned char* underlying_buffer_ = nullptr;
|
|
141
|
+
|
|
142
|
+
// orig_ points to the start of the encoding buffer,
|
|
143
|
+
// whether or not the Encoder owns it.
|
|
144
|
+
unsigned char* orig_ = nullptr;
|
|
145
|
+
|
|
146
|
+
static unsigned char kEmptyBuffer;
|
|
147
|
+
|
|
148
|
+
#ifndef SWIG
|
|
149
|
+
Encoder(Encoder const&) = delete;
|
|
150
|
+
void operator=(Encoder const&) = delete;
|
|
151
|
+
#endif // SWIG
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
/* Class for decoding data from a memory buffer */
|
|
155
|
+
class Decoder {
|
|
156
|
+
public:
|
|
157
|
+
// Empty constructor to create uninitialized decoder
|
|
158
|
+
inline Decoder() { }
|
|
159
|
+
|
|
160
|
+
// NOTE: for efficiency reasons, this is not virtual. so don't add
|
|
161
|
+
// any members that really need to be destructed, and be careful about
|
|
162
|
+
// inheritance.
|
|
163
|
+
// The defaulted destructor is not explicitly written to avoid confusing SWIG.
|
|
164
|
+
// ~Decoder() = default;
|
|
165
|
+
|
|
166
|
+
// Initialize decoder to decode from "buf"
|
|
167
|
+
Decoder(const void* buf, size_t maxn);
|
|
168
|
+
void reset(const void* buf, size_t maxn);
|
|
169
|
+
|
|
170
|
+
// Decoding routines. Note that these do not check bounds
|
|
171
|
+
unsigned char get8();
|
|
172
|
+
uint16 get16();
|
|
173
|
+
uint32 get32();
|
|
174
|
+
uint64 get64();
|
|
175
|
+
float getfloat();
|
|
176
|
+
double getdouble();
|
|
177
|
+
void getn(void* mem, size_t n);
|
|
178
|
+
void getcn(void* mem, int c, size_t n); // get no more than n bytes,
|
|
179
|
+
// stopping after c is got
|
|
180
|
+
void gets(void* mem, size_t n); // get a c-string no more than
|
|
181
|
+
// n bytes. always appends '\0'
|
|
182
|
+
void skip(ptrdiff_t n);
|
|
183
|
+
unsigned char const* ptr() const; // Return ptr to current position in buffer
|
|
184
|
+
|
|
185
|
+
// "get_varint" actually checks bounds
|
|
186
|
+
bool get_varint32(uint32* v);
|
|
187
|
+
bool get_varint64(uint64* v);
|
|
188
|
+
|
|
189
|
+
size_t pos() const;
|
|
190
|
+
// Return number of bytes decoded so far
|
|
191
|
+
|
|
192
|
+
size_t avail() const;
|
|
193
|
+
// Return number of available bytes to read
|
|
194
|
+
|
|
195
|
+
private:
|
|
196
|
+
friend class Encoder;
|
|
197
|
+
friend class IndexBlockDecoder;
|
|
198
|
+
const unsigned char* orig_;
|
|
199
|
+
const unsigned char* buf_;
|
|
200
|
+
const unsigned char* limit_;
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
// TODO(user): Remove when LLVM detects and optimizes this case.
|
|
204
|
+
class DecoderExtensions {
|
|
205
|
+
private:
|
|
206
|
+
friend class Untranspose; // In net/proto/transpose.cc.
|
|
207
|
+
friend void TestFillArray();
|
|
208
|
+
// Fills an array of num_decoders decoders with Decoder(nullptr, 0) instances.
|
|
209
|
+
// This is much more efficient than using the stl.
|
|
210
|
+
static void FillArray(Decoder* array, int num_decoders);
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
/***** Implementation details. Clients should ignore them. *****/
|
|
214
|
+
|
|
215
|
+
inline Encoder::Encoder(void* b, size_t maxn) :
|
|
216
|
+
buf_(reinterpret_cast<unsigned char*>(b)),
|
|
217
|
+
limit_(reinterpret_cast<unsigned char*>(b) + maxn),
|
|
218
|
+
orig_(reinterpret_cast<unsigned char*>(b)) { }
|
|
219
|
+
|
|
220
|
+
inline void Encoder::reset(void* b, size_t maxn) {
|
|
221
|
+
orig_ = buf_ = reinterpret_cast<unsigned char*>(b);
|
|
222
|
+
limit_ = orig_ + maxn;
|
|
223
|
+
// Can't use the underlying buffer anymore
|
|
224
|
+
if (underlying_buffer_ != &kEmptyBuffer) {
|
|
225
|
+
delete[] underlying_buffer_;
|
|
226
|
+
}
|
|
227
|
+
underlying_buffer_ = nullptr;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
inline void Encoder::clear() {
|
|
231
|
+
buf_ = orig_;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
inline void Encoder::Ensure(size_t N) {
|
|
235
|
+
S2_DCHECK(ensure_allowed());
|
|
236
|
+
if (avail() < N) {
|
|
237
|
+
EnsureSlowPath(N);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
inline size_t Encoder::length() const {
|
|
242
|
+
S2_DCHECK_GE(buf_, orig_);
|
|
243
|
+
S2_CHECK_LE(buf_, limit_); // Catch the buffer overflow.
|
|
244
|
+
return buf_ - orig_;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
inline size_t Encoder::avail() const {
|
|
248
|
+
S2_DCHECK_GE(limit_, buf_);
|
|
249
|
+
return limit_ - buf_;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
inline void Encoder::putn(const void* src, size_t n) {
|
|
253
|
+
memcpy(buf_, src, n);
|
|
254
|
+
buf_ += n;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
inline void Encoder::putcn(const void* src, int c, size_t n) {
|
|
258
|
+
unsigned char *old = buf_;
|
|
259
|
+
buf_ = static_cast<unsigned char *>(memccpy(buf_, src, c, n));
|
|
260
|
+
if (buf_ == nullptr)
|
|
261
|
+
buf_ = old + n;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
inline void Encoder::puts(const void* src) {
|
|
265
|
+
putcn(src, '\0', avail());
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
inline void Encoder::puts_without_null(const char* mem) {
|
|
269
|
+
while (*mem != '\0' && buf_ < limit_) {
|
|
270
|
+
*buf_++ = *mem++;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
inline void Encoder::put_varint32(uint32 v) {
|
|
275
|
+
buf_ = reinterpret_cast<unsigned char*>
|
|
276
|
+
(Varint::Encode32(reinterpret_cast<char*>(buf_), v));
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
inline void Encoder::put_varint32_inline(uint32 v) {
|
|
280
|
+
buf_ = reinterpret_cast<unsigned char*>
|
|
281
|
+
(Varint::Encode32Inline(reinterpret_cast<char*>(buf_), v));
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
inline void Encoder::put_varint64(uint64 v) {
|
|
285
|
+
buf_ = reinterpret_cast<unsigned char*>
|
|
286
|
+
(Varint::Encode64(reinterpret_cast<char*>(buf_), v));
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
// Copies N bytes from *src to *dst then advances both pointers by N bytes.
|
|
290
|
+
// Template parameter N specifies the number of bytes to copy. Passing
|
|
291
|
+
// constant size results in optimized code from memcpy for the size.
|
|
292
|
+
template <size_t N>
|
|
293
|
+
void CopyAndAdvance(const uint8** src, uint8** dst) {
|
|
294
|
+
memcpy(*dst, *src, N);
|
|
295
|
+
*dst += N;
|
|
296
|
+
*src += N;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
// Tries a fast path if both the decoder and the encoder have enough room for
|
|
300
|
+
// max varint64 (10 bytes). With enough room, we don't need boundary checks at
|
|
301
|
+
// every iterations. Also, memcpy with known size is faster than copying a byte
|
|
302
|
+
// at a time (e.g. one movq vs. eight movb's).
|
|
303
|
+
//
|
|
304
|
+
// If either the decoder or the encoder doesn't have enough room, it falls back
|
|
305
|
+
// to previous example where copy and boundary check happen at every byte.
|
|
306
|
+
inline bool Encoder::PutVarint64FromDecoderLessCommonSizes(Decoder* dec) {
|
|
307
|
+
const unsigned char* dec_ptr = dec->buf_;
|
|
308
|
+
const unsigned char* dec_limit = dec->limit_;
|
|
309
|
+
|
|
310
|
+
// Check once if both the encoder and the decoder have enough room for
|
|
311
|
+
// maximum varint64 (kVarintMax64) instead of checking at every bytes.
|
|
312
|
+
if (ABSL_PREDICT_TRUE(dec_ptr <= dec_limit - kVarintMax64 &&
|
|
313
|
+
buf_ <= limit_ - kVarintMax64)) {
|
|
314
|
+
if (dec_ptr[2] < 128) {
|
|
315
|
+
CopyAndAdvance<3>(&dec->buf_, &buf_);
|
|
316
|
+
} else if (dec_ptr[3] < 128) {
|
|
317
|
+
CopyAndAdvance<4>(&dec->buf_, &buf_);
|
|
318
|
+
} else if (dec_ptr[4] < 128) {
|
|
319
|
+
CopyAndAdvance<5>(&dec->buf_, &buf_);
|
|
320
|
+
} else if (dec_ptr[5] < 128) {
|
|
321
|
+
CopyAndAdvance<6>(&dec->buf_, &buf_);
|
|
322
|
+
} else if (dec_ptr[6] < 128) {
|
|
323
|
+
CopyAndAdvance<7>(&dec->buf_, &buf_);
|
|
324
|
+
} else if (dec_ptr[7] < 128) {
|
|
325
|
+
CopyAndAdvance<8>(&dec->buf_, &buf_);
|
|
326
|
+
} else if (dec_ptr[8] < 128) {
|
|
327
|
+
CopyAndAdvance<9>(&dec->buf_, &buf_);
|
|
328
|
+
} else if (dec_ptr[9] < 2) {
|
|
329
|
+
// 10th byte stores at most 1 bit for varint64.
|
|
330
|
+
CopyAndAdvance<10>(&dec->buf_, &buf_);
|
|
331
|
+
} else {
|
|
332
|
+
return false;
|
|
333
|
+
}
|
|
334
|
+
return true;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
unsigned char c;
|
|
338
|
+
unsigned char* enc_ptr = buf_;
|
|
339
|
+
|
|
340
|
+
// The loop executes at most (kVarintMax64 - 1) iterations because either the
|
|
341
|
+
// decoder or the encoder has less availability than kVarintMax64. We must be
|
|
342
|
+
// careful about the cost of moving any computation out of the loop.
|
|
343
|
+
// Xref cl/133546957 for more details of various implementations we explored.
|
|
344
|
+
do {
|
|
345
|
+
if (dec_ptr >= dec_limit) return false;
|
|
346
|
+
if (enc_ptr >= limit_) return false;
|
|
347
|
+
c = *dec_ptr;
|
|
348
|
+
*enc_ptr = c;
|
|
349
|
+
++dec_ptr;
|
|
350
|
+
++enc_ptr;
|
|
351
|
+
} while (c >= 128);
|
|
352
|
+
|
|
353
|
+
dec->buf_ = dec_ptr;
|
|
354
|
+
buf_ = enc_ptr;
|
|
355
|
+
return true;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
// The fast implementation of the code below with boundary checks.
|
|
359
|
+
// uint64 val;
|
|
360
|
+
// if (!dec->get_varint64(&val))
|
|
361
|
+
// return false;
|
|
362
|
+
// enc->put_varint64(val);
|
|
363
|
+
// return true;
|
|
364
|
+
// BM_getvarfrom* in coder_unittest.cc are the benchmarks that measure the
|
|
365
|
+
// performance of different implementations.
|
|
366
|
+
//
|
|
367
|
+
// Handles varint64 with one to two bytes separately as a common case.
|
|
368
|
+
// PutVarint64FromDecoderLessCommonSizes handles the remaining sizes. To avoid
|
|
369
|
+
// over-inlining, PutVarint64FromDecoderLessCommonSizes is defined in coder.cc.
|
|
370
|
+
// As Untranspose::DecodeMessage is the only caller, compiler should be able to
|
|
371
|
+
// inline all if necessary.
|
|
372
|
+
ABSL_ATTRIBUTE_ALWAYS_INLINE inline bool Encoder::put_varint64_from_decoder(
|
|
373
|
+
Decoder* dec) {
|
|
374
|
+
unsigned char* enc_ptr = buf_;
|
|
375
|
+
const unsigned char* dec_ptr = dec->buf_;
|
|
376
|
+
|
|
377
|
+
// Common cases to handle varint64 with one to two bytes.
|
|
378
|
+
if (ABSL_PREDICT_TRUE(dec_ptr < dec->limit_ && dec_ptr[0] < 128)) {
|
|
379
|
+
if (ABSL_PREDICT_FALSE(enc_ptr >= limit_)) {
|
|
380
|
+
return false;
|
|
381
|
+
}
|
|
382
|
+
*enc_ptr = *dec_ptr;
|
|
383
|
+
dec->buf_++;
|
|
384
|
+
buf_++;
|
|
385
|
+
return true;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
if (dec_ptr < dec->limit_ - 1 && dec_ptr[1] < 128) {
|
|
389
|
+
if (ABSL_PREDICT_FALSE(enc_ptr >= limit_ - 1)) {
|
|
390
|
+
return false;
|
|
391
|
+
}
|
|
392
|
+
UNALIGNED_STORE16(enc_ptr, UNALIGNED_LOAD16(dec_ptr));
|
|
393
|
+
dec->buf_ += 2;
|
|
394
|
+
buf_ += 2;
|
|
395
|
+
return true;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
// For less common sizes in [3, kVarintMax64].
|
|
399
|
+
return PutVarint64FromDecoderLessCommonSizes(dec);
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
inline Decoder::Decoder(const void* b, size_t maxn) {
|
|
403
|
+
reset(b, maxn);
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
inline void Decoder::reset(const void* b, size_t maxn) {
|
|
407
|
+
orig_ = buf_ = reinterpret_cast<const unsigned char*>(b);
|
|
408
|
+
limit_ = orig_ + maxn;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
inline size_t Decoder::pos() const {
|
|
412
|
+
S2_DCHECK_GE(buf_, orig_);
|
|
413
|
+
return buf_ - orig_;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
inline size_t Decoder::avail() const {
|
|
417
|
+
S2_DCHECK_GE(limit_, buf_);
|
|
418
|
+
return limit_ - buf_;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
inline void Decoder::getn(void* dst, size_t n) {
|
|
422
|
+
memcpy(dst, buf_, n);
|
|
423
|
+
buf_ += n;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
inline void Decoder::getcn(void* dst, int c, size_t n) {
|
|
427
|
+
void *ptr;
|
|
428
|
+
ptr = memccpy(dst, buf_, c, n);
|
|
429
|
+
if (ptr == nullptr)
|
|
430
|
+
buf_ = buf_ + n;
|
|
431
|
+
else
|
|
432
|
+
buf_ = buf_ + (reinterpret_cast<unsigned char *>(ptr) -
|
|
433
|
+
reinterpret_cast<unsigned char *>(dst));
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
inline void Decoder::gets(void* dst, size_t n) {
|
|
437
|
+
size_t len = n - 1;
|
|
438
|
+
S2_DCHECK_GE(limit_, buf_);
|
|
439
|
+
if (n > static_cast<size_t>(1 + limit_ - buf_)) {
|
|
440
|
+
len = limit_ - buf_;
|
|
441
|
+
}
|
|
442
|
+
(reinterpret_cast<char *>(dst))[len] = '\0';
|
|
443
|
+
getcn(dst, '\0', len);
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
inline void Decoder::skip(ptrdiff_t n) {
|
|
447
|
+
buf_ += n;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
inline unsigned char const* Decoder::ptr() const {
|
|
451
|
+
return buf_;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
inline void DecoderExtensions::FillArray(Decoder* array, int num_decoders) {
|
|
455
|
+
// This is an optimization based on the fact that Decoder(nullptr, 0) sets all
|
|
456
|
+
// structure bytes to 0. This is valid because Decoder is TriviallyCopyable
|
|
457
|
+
// (https://en.cppreference.com/w/cpp/named_req/TriviallyCopyable).
|
|
458
|
+
static_assert(absl::is_trivially_copy_constructible<Decoder>::value,
|
|
459
|
+
"Decoder must be trivially copy-constructible");
|
|
460
|
+
static_assert(absl::is_trivially_copy_assignable<Decoder>::value,
|
|
461
|
+
"Decoder must be trivially copy-assignable");
|
|
462
|
+
static_assert(absl::is_trivially_destructible<Decoder>::value,
|
|
463
|
+
"Decoder must be trivially destructible");
|
|
464
|
+
std::memset(array, 0, num_decoders * sizeof(Decoder));
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
inline void Encoder::put8(unsigned char v) {
|
|
468
|
+
S2_DCHECK_GE(avail(), sizeof(v));
|
|
469
|
+
*buf_ = v;
|
|
470
|
+
buf_ += sizeof(v);
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
inline void Encoder::put16(uint16 v) {
|
|
474
|
+
S2_DCHECK_GE(avail(), sizeof(v));
|
|
475
|
+
LittleEndian::Store16(buf_, v);
|
|
476
|
+
buf_ += sizeof(v);
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
inline void Encoder::put32(uint32 v) {
|
|
480
|
+
S2_DCHECK_GE(avail(), sizeof(v));
|
|
481
|
+
LittleEndian::Store32(buf_, v);
|
|
482
|
+
buf_ += sizeof(v);
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
inline void Encoder::put64(uint64 v) {
|
|
486
|
+
S2_DCHECK_GE(avail(), sizeof(v));
|
|
487
|
+
LittleEndian::Store64(buf_, v);
|
|
488
|
+
buf_ += sizeof(v);
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
inline void Encoder::putfloat(float f) {
|
|
492
|
+
put32(absl::bit_cast<uint32>(f));
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
inline void Encoder::putdouble(double d) {
|
|
496
|
+
put64(absl::bit_cast<uint64>(d));
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
inline unsigned char Decoder::get8() {
|
|
500
|
+
const unsigned char v = *buf_;
|
|
501
|
+
buf_ += sizeof(v);
|
|
502
|
+
return v;
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
inline uint16 Decoder::get16() {
|
|
506
|
+
const uint16 v = LittleEndian::Load16(buf_);
|
|
507
|
+
buf_ += sizeof(v);
|
|
508
|
+
return v;
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
inline uint32 Decoder::get32() {
|
|
512
|
+
const uint32 v = LittleEndian::Load32(buf_);
|
|
513
|
+
buf_ += sizeof(v);
|
|
514
|
+
return v;
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
inline uint64 Decoder::get64() {
|
|
518
|
+
const uint64 v = LittleEndian::Load64(buf_);
|
|
519
|
+
buf_ += sizeof(v);
|
|
520
|
+
return v;
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
inline float Decoder::getfloat() {
|
|
524
|
+
return absl::bit_cast<float>(get32());
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
inline double Decoder::getdouble() {
|
|
528
|
+
return absl::bit_cast<double>(get64());
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
inline bool Decoder::get_varint32(uint32* v) {
|
|
532
|
+
const char* const r =
|
|
533
|
+
Varint::Parse32WithLimit(reinterpret_cast<const char*>(buf_),
|
|
534
|
+
reinterpret_cast<const char*>(limit_), v);
|
|
535
|
+
if (r == nullptr) {
|
|
536
|
+
return false;
|
|
537
|
+
}
|
|
538
|
+
buf_ = reinterpret_cast<const unsigned char*>(r);
|
|
539
|
+
return true;
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
inline bool Decoder::get_varint64(uint64* v) {
|
|
543
|
+
const char* const r =
|
|
544
|
+
Varint::Parse64WithLimit(reinterpret_cast<const char*>(buf_),
|
|
545
|
+
reinterpret_cast<const char*>(limit_), v);
|
|
546
|
+
if (r == nullptr) {
|
|
547
|
+
return false;
|
|
548
|
+
}
|
|
549
|
+
buf_ = reinterpret_cast<const unsigned char*>(r);
|
|
550
|
+
return true;
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
#endif // S2_UTIL_CODING_CODER_H_
|