@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,388 @@
|
|
|
1
|
+
// Copyright 2011 Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
#include "s2/s2point_compression.h"
|
|
18
|
+
|
|
19
|
+
#include <utility>
|
|
20
|
+
#include <vector>
|
|
21
|
+
|
|
22
|
+
#include "s2/base/integral_types.h"
|
|
23
|
+
#include "s2/base/logging.h"
|
|
24
|
+
#include "s2/s2cell_id.h"
|
|
25
|
+
#include "s2/s2coords.h"
|
|
26
|
+
#include "s2/third_party/absl/base/casts.h"
|
|
27
|
+
#include "s2/third_party/absl/base/macros.h"
|
|
28
|
+
#include "s2/third_party/absl/container/fixed_array.h"
|
|
29
|
+
#include "s2/third_party/absl/types/span.h"
|
|
30
|
+
#include "s2/util/bits/bit-interleave.h"
|
|
31
|
+
#include "s2/util/coding/coder.h"
|
|
32
|
+
#include "s2/util/coding/nth-derivative.h"
|
|
33
|
+
#include "s2/util/coding/transforms.h"
|
|
34
|
+
#include "s2/util/endian/endian.h"
|
|
35
|
+
|
|
36
|
+
using absl::Span;
|
|
37
|
+
using std::pair;
|
|
38
|
+
using std::vector;
|
|
39
|
+
|
|
40
|
+
namespace {
|
|
41
|
+
|
|
42
|
+
const int kDerivativeEncodingOrder = 2;
|
|
43
|
+
|
|
44
|
+
// Pair of face number and count for run-length encoding.
|
|
45
|
+
struct FaceRun {
|
|
46
|
+
FaceRun() : face(-1), count(0) {}
|
|
47
|
+
FaceRun(int initial_face, int initial_count)
|
|
48
|
+
: face(initial_face), count(initial_count) {}
|
|
49
|
+
|
|
50
|
+
// Encodes each face as a varint64 with value kNumFaces * count + face.
|
|
51
|
+
// 21 faces can fit in a single byte. Varint64 is used so that 4G faces
|
|
52
|
+
// can be encoded instead of just 4G / 6 = ~700M.
|
|
53
|
+
void Encode(Encoder* encoder) const {
|
|
54
|
+
encoder->Ensure(Encoder::kVarintMax64);
|
|
55
|
+
|
|
56
|
+
// It isn't necessary to encode the number of faces left for the last run,
|
|
57
|
+
// but since this would only help if there were more than 21 faces, it will
|
|
58
|
+
// be a small overall savings, much smaller than the bound encoding.
|
|
59
|
+
encoder->put_varint64(
|
|
60
|
+
S2CellId::kNumFaces * absl::implicit_cast<int64>(count) + face);
|
|
61
|
+
S2_DCHECK_GE(encoder->avail(), 0);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
bool Decode(Decoder* decoder) {
|
|
65
|
+
uint64 face_and_count;
|
|
66
|
+
if (!decoder->get_varint64(&face_and_count)) return false;
|
|
67
|
+
|
|
68
|
+
face = face_and_count % S2CellId::kNumFaces;
|
|
69
|
+
// Make sure large counts don't wrap on malicious or random input.
|
|
70
|
+
const uint64 count64 = face_and_count / S2CellId::kNumFaces;
|
|
71
|
+
count = count64;
|
|
72
|
+
|
|
73
|
+
return count > 0 && count == count64;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
int face;
|
|
77
|
+
int count;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
// Run-length encoder/decoder for face numbers.
|
|
81
|
+
class Faces {
|
|
82
|
+
public:
|
|
83
|
+
class Iterator {
|
|
84
|
+
public:
|
|
85
|
+
explicit Iterator(const Faces& faces);
|
|
86
|
+
|
|
87
|
+
// Return the next face.
|
|
88
|
+
int Next();
|
|
89
|
+
|
|
90
|
+
private:
|
|
91
|
+
// The faces_ vector of the Faces object for which this is an iterator.
|
|
92
|
+
const vector<FaceRun>& faces_;
|
|
93
|
+
|
|
94
|
+
// The index that the next face will come from.
|
|
95
|
+
int face_index_;
|
|
96
|
+
|
|
97
|
+
// Number of faces already consumed for face_index_.
|
|
98
|
+
int num_faces_used_for_index_;
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
Faces() {}
|
|
102
|
+
|
|
103
|
+
// Add the face to the list of face runs, combining with the last if
|
|
104
|
+
// possible.
|
|
105
|
+
void AddFace(int face);
|
|
106
|
+
|
|
107
|
+
// Encodes the faces to encoder.
|
|
108
|
+
void Encode(Encoder* encoder) const;
|
|
109
|
+
|
|
110
|
+
// Decodes the faces, returning true on success.
|
|
111
|
+
bool Decode(int num_vertices, Decoder* decoder);
|
|
112
|
+
|
|
113
|
+
Iterator GetIterator() const {
|
|
114
|
+
Iterator iterator(*this);
|
|
115
|
+
return iterator;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
private:
|
|
119
|
+
// Run-length encoded list of faces.
|
|
120
|
+
vector<FaceRun> faces_;
|
|
121
|
+
|
|
122
|
+
Faces(const Faces&) = delete;
|
|
123
|
+
void operator=(const Faces&) = delete;
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
void Faces::AddFace(int face) {
|
|
127
|
+
if (!faces_.empty() && faces_.back().face == face) {
|
|
128
|
+
++faces_.back().count;
|
|
129
|
+
} else {
|
|
130
|
+
faces_.push_back(FaceRun(face, 1));
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
void Faces::Encode(Encoder* encoder) const {
|
|
135
|
+
for (const FaceRun& face_run : faces_)
|
|
136
|
+
face_run.Encode(encoder);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
bool Faces::Decode(int num_vertices, Decoder* decoder) {
|
|
140
|
+
for (int num_faces_parsed = 0; num_faces_parsed < num_vertices; ) {
|
|
141
|
+
FaceRun face_run;
|
|
142
|
+
if (!face_run.Decode(decoder)) return false;
|
|
143
|
+
faces_.push_back(face_run);
|
|
144
|
+
|
|
145
|
+
num_faces_parsed += face_run.count;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
Faces::Iterator::Iterator(const Faces& faces)
|
|
152
|
+
: faces_(faces.faces_), face_index_(0),
|
|
153
|
+
num_faces_used_for_index_(0) {
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
int Faces::Iterator::Next() {
|
|
157
|
+
S2_DCHECK_NE(faces_.size(), face_index_);
|
|
158
|
+
S2_DCHECK_LE(num_faces_used_for_index_, faces_[face_index_].count);
|
|
159
|
+
if (num_faces_used_for_index_ == faces_[face_index_].count) {
|
|
160
|
+
++face_index_;
|
|
161
|
+
num_faces_used_for_index_ = 0;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
++num_faces_used_for_index_;
|
|
165
|
+
return faces_[face_index_].face;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// Unused function (for documentation purposes only).
|
|
169
|
+
inline int STtoPiQi(double s, int level) {
|
|
170
|
+
// We introduce a new coordinate system (pi, qi), which is (si, ti)
|
|
171
|
+
// with the bits that are constant for cells of that level shifted
|
|
172
|
+
// off to the right.
|
|
173
|
+
// si = round(s * 2^31)
|
|
174
|
+
// pi = si >> (31 - level)
|
|
175
|
+
// = floor(s * 2^level)
|
|
176
|
+
// If the point has been snapped to the level, the bits that are
|
|
177
|
+
// shifted off will be a 1 in the msb, then 0s after that, so the
|
|
178
|
+
// fractional part discarded by the cast is (close to) 0.5.
|
|
179
|
+
return static_cast<int>(s * (1 << level));
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
inline int SiTitoPiQi(unsigned int si, int level) {
|
|
183
|
+
// See STtoPiQi for the definition of the PiQi coordinate system.
|
|
184
|
+
//
|
|
185
|
+
// EncodeFirstPointFixedLength encodes the return value using "level" bits,
|
|
186
|
+
// so we clamp "si" to the range [0, 2**level - 1] before trying to encode
|
|
187
|
+
// it. This is okay because if si == kMaxSiTi, then it is not a cell center
|
|
188
|
+
// anyway and will be encoded separately as an "off-center" point.
|
|
189
|
+
si = std::min(si, S2::kMaxSiTi - 1);
|
|
190
|
+
return si >> (S2::kMaxCellLevel + 1 - level);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
inline double PiQitoST(int pi, int level) {
|
|
194
|
+
// We want to recover the position at the center of the cell. If the point
|
|
195
|
+
// was snapped to the center of the cell, then modf(s * 2^level) == 0.5.
|
|
196
|
+
// Inverting STtoPiQi gives:
|
|
197
|
+
// s = (pi + 0.5) / 2^level.
|
|
198
|
+
return (pi + 0.5) / (1 << level);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
S2Point FacePiQitoXYZ(int face, int pi, int qi, int level) {
|
|
202
|
+
return S2::FaceUVtoXYZ(face,
|
|
203
|
+
S2::STtoUV(PiQitoST(pi, level)),
|
|
204
|
+
S2::STtoUV(PiQitoST(qi, level))).Normalize();
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
void EncodeFirstPointFixedLength(const pair<int, int>& vertex_pi_qi,
|
|
208
|
+
int level,
|
|
209
|
+
NthDerivativeCoder* pi_coder,
|
|
210
|
+
NthDerivativeCoder* qi_coder,
|
|
211
|
+
Encoder* encoder) {
|
|
212
|
+
// Do not ZigZagEncode the first point, since it cannot be negative.
|
|
213
|
+
const uint32 pi = pi_coder->Encode(vertex_pi_qi.first);
|
|
214
|
+
const uint32 qi = qi_coder->Encode(vertex_pi_qi.second);
|
|
215
|
+
// Interleave to reduce overhead from two partial bytes to one.
|
|
216
|
+
const uint64 interleaved_pi_qi = util_bits::InterleaveUint32(pi, qi);
|
|
217
|
+
|
|
218
|
+
// Convert to little endian for architecture independence.
|
|
219
|
+
const uint64 little_endian_interleaved_pi_qi =
|
|
220
|
+
LittleEndian::FromHost64(interleaved_pi_qi);
|
|
221
|
+
|
|
222
|
+
const int bytes_required = (level + 7) / 8 * 2;
|
|
223
|
+
encoder->Ensure(bytes_required);
|
|
224
|
+
encoder->putn(&little_endian_interleaved_pi_qi, bytes_required);
|
|
225
|
+
S2_DCHECK_GE(encoder->avail(), 0);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
void EncodePointCompressed(const pair<int, int>& vertex_pi_qi,
|
|
229
|
+
int level,
|
|
230
|
+
NthDerivativeCoder* pi_coder,
|
|
231
|
+
NthDerivativeCoder* qi_coder,
|
|
232
|
+
Encoder* encoder) {
|
|
233
|
+
// ZigZagEncode, as varint requires the maximum number of bytes for
|
|
234
|
+
// negative numbers.
|
|
235
|
+
const uint32 zig_zag_encoded_deriv_pi =
|
|
236
|
+
ZigZagEncode(pi_coder->Encode(vertex_pi_qi.first));
|
|
237
|
+
const uint32 zig_zag_encoded_deriv_qi =
|
|
238
|
+
ZigZagEncode(qi_coder->Encode(vertex_pi_qi.second));
|
|
239
|
+
// Interleave to reduce overhead from two partial bytes to one.
|
|
240
|
+
const uint64 interleaved_zig_zag_encoded_derivs =
|
|
241
|
+
util_bits::InterleaveUint32(zig_zag_encoded_deriv_pi,
|
|
242
|
+
zig_zag_encoded_deriv_qi);
|
|
243
|
+
|
|
244
|
+
encoder->Ensure(Encoder::kVarintMax64);
|
|
245
|
+
encoder->put_varint64(interleaved_zig_zag_encoded_derivs);
|
|
246
|
+
S2_DCHECK_GE(encoder->avail(), 0);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
void EncodePointsCompressed(Span<const pair<int, int>> vertices_pi_qi,
|
|
250
|
+
int level, Encoder* encoder) {
|
|
251
|
+
NthDerivativeCoder pi_coder(kDerivativeEncodingOrder);
|
|
252
|
+
NthDerivativeCoder qi_coder(kDerivativeEncodingOrder);
|
|
253
|
+
for (int i = 0; i < vertices_pi_qi.size(); ++i) {
|
|
254
|
+
if (i == 0) {
|
|
255
|
+
// The first point will be just the (pi, qi) coordinates
|
|
256
|
+
// of the S2Point. NthDerivativeCoder will not save anything
|
|
257
|
+
// in that case, so we encode in fixed format rather than varint
|
|
258
|
+
// to avoid the varint overhead.
|
|
259
|
+
EncodeFirstPointFixedLength(vertices_pi_qi[i], level,
|
|
260
|
+
&pi_coder, &qi_coder, encoder);
|
|
261
|
+
} else {
|
|
262
|
+
EncodePointCompressed(vertices_pi_qi[i], level,
|
|
263
|
+
&pi_coder, &qi_coder, encoder);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
S2_DCHECK_GE(encoder->avail(), 0);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
bool DecodeFirstPointFixedLength(Decoder* decoder,
|
|
271
|
+
int level,
|
|
272
|
+
NthDerivativeCoder* pi_coder,
|
|
273
|
+
NthDerivativeCoder* qi_coder,
|
|
274
|
+
pair<int, int>* vertex_pi_qi) {
|
|
275
|
+
const int bytes_required = (level + 7) / 8 * 2;
|
|
276
|
+
if (decoder->avail() < bytes_required) return false;
|
|
277
|
+
uint64 little_endian_interleaved_pi_qi = 0;
|
|
278
|
+
decoder->getn(&little_endian_interleaved_pi_qi, bytes_required);
|
|
279
|
+
|
|
280
|
+
const uint64 interleaved_pi_qi =
|
|
281
|
+
LittleEndian::ToHost64(little_endian_interleaved_pi_qi);
|
|
282
|
+
|
|
283
|
+
uint32 pi, qi;
|
|
284
|
+
util_bits::DeinterleaveUint32(interleaved_pi_qi, &pi, &qi);
|
|
285
|
+
|
|
286
|
+
vertex_pi_qi->first = pi_coder->Decode(pi);
|
|
287
|
+
vertex_pi_qi->second = qi_coder->Decode(qi);
|
|
288
|
+
|
|
289
|
+
return true;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
bool DecodePointCompressed(Decoder* decoder,
|
|
293
|
+
int level,
|
|
294
|
+
NthDerivativeCoder* pi_coder,
|
|
295
|
+
NthDerivativeCoder* qi_coder,
|
|
296
|
+
pair<int, int>* vertex_pi_qi) {
|
|
297
|
+
uint64 interleaved_zig_zag_encoded_deriv_pi_qi;
|
|
298
|
+
if (!decoder->get_varint64(&interleaved_zig_zag_encoded_deriv_pi_qi)) {
|
|
299
|
+
return false;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
uint32 zig_zag_encoded_deriv_pi, zig_zag_encoded_deriv_qi;
|
|
303
|
+
util_bits::DeinterleaveUint32(interleaved_zig_zag_encoded_deriv_pi_qi,
|
|
304
|
+
&zig_zag_encoded_deriv_pi,
|
|
305
|
+
&zig_zag_encoded_deriv_qi);
|
|
306
|
+
|
|
307
|
+
vertex_pi_qi->first =
|
|
308
|
+
pi_coder->Decode(ZigZagDecode(zig_zag_encoded_deriv_pi));
|
|
309
|
+
vertex_pi_qi->second =
|
|
310
|
+
qi_coder->Decode(ZigZagDecode(zig_zag_encoded_deriv_qi));
|
|
311
|
+
|
|
312
|
+
return true;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
} // namespace
|
|
316
|
+
|
|
317
|
+
void S2EncodePointsCompressed(Span<const S2XYZFaceSiTi> points,
|
|
318
|
+
int level,
|
|
319
|
+
Encoder* encoder) {
|
|
320
|
+
absl::FixedArray<pair<int, int>> vertices_pi_qi(points.size());
|
|
321
|
+
vector<int> off_center;
|
|
322
|
+
Faces faces;
|
|
323
|
+
for (int i = 0; i < points.size(); ++i) {
|
|
324
|
+
faces.AddFace(points[i].face);
|
|
325
|
+
vertices_pi_qi[i].first = SiTitoPiQi(points[i].si, level);
|
|
326
|
+
vertices_pi_qi[i].second = SiTitoPiQi(points[i].ti, level);
|
|
327
|
+
if (points[i].cell_level != level) {
|
|
328
|
+
off_center.push_back(i);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
faces.Encode(encoder);
|
|
332
|
+
EncodePointsCompressed(vertices_pi_qi, level, encoder);
|
|
333
|
+
int num_off_center = off_center.size();
|
|
334
|
+
encoder->Ensure(Encoder::kVarintMax32 +
|
|
335
|
+
(Encoder::kVarintMax32 + sizeof(S2Point)) * num_off_center);
|
|
336
|
+
encoder->put_varint32(num_off_center);
|
|
337
|
+
S2_DCHECK_GE(encoder->avail(), 0);
|
|
338
|
+
for (int index : off_center) {
|
|
339
|
+
encoder->put_varint32(index);
|
|
340
|
+
encoder->putn(&points[index].xyz, sizeof(points[index].xyz));
|
|
341
|
+
S2_DCHECK_GE(encoder->avail(), 0);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
bool S2DecodePointsCompressed(Decoder* decoder, int level,
|
|
346
|
+
Span<S2Point> points) {
|
|
347
|
+
Faces faces;
|
|
348
|
+
if (!faces.Decode(points.size(), decoder)) {
|
|
349
|
+
return false;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
NthDerivativeCoder pi_coder(kDerivativeEncodingOrder);
|
|
353
|
+
NthDerivativeCoder qi_coder(kDerivativeEncodingOrder);
|
|
354
|
+
Faces::Iterator faces_iterator = faces.GetIterator();
|
|
355
|
+
for (int i = 0; i < points.size(); ++i) {
|
|
356
|
+
pair<int, int> vertex_pi_qi;
|
|
357
|
+
if (i == 0) {
|
|
358
|
+
if (!DecodeFirstPointFixedLength(decoder, level, &pi_coder, &qi_coder,
|
|
359
|
+
&vertex_pi_qi)) {
|
|
360
|
+
return false;
|
|
361
|
+
}
|
|
362
|
+
} else {
|
|
363
|
+
if (!DecodePointCompressed(decoder, level, &pi_coder, &qi_coder,
|
|
364
|
+
&vertex_pi_qi)) {
|
|
365
|
+
return false;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
int face = faces_iterator.Next();
|
|
370
|
+
points[i] =
|
|
371
|
+
FacePiQitoXYZ(face, vertex_pi_qi.first, vertex_pi_qi.second, level);
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
unsigned int num_off_center;
|
|
375
|
+
if (!decoder->get_varint32(&num_off_center) ||
|
|
376
|
+
num_off_center > points.size()) {
|
|
377
|
+
return false;
|
|
378
|
+
}
|
|
379
|
+
for (int i = 0; i < num_off_center; ++i) {
|
|
380
|
+
uint32 index;
|
|
381
|
+
if (!decoder->get_varint32(&index) || index >= points.size()) {
|
|
382
|
+
return false;
|
|
383
|
+
}
|
|
384
|
+
if (decoder->avail() < sizeof(points[index])) return false;
|
|
385
|
+
decoder->getn(&points[index], sizeof(points[index]));
|
|
386
|
+
}
|
|
387
|
+
return true;
|
|
388
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// Copyright 2011 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
|
+
// Given a sequence of S2Points assumed to be the center of level-k cells,
|
|
18
|
+
// compresses it into a stream using the following method:
|
|
19
|
+
// - decompose the points into (face, si, ti) tuples (see s2coords.h)
|
|
20
|
+
// - run-length encode the faces, combining face number and count into a
|
|
21
|
+
// varint32. See the Faces class in s2point_compression.cc.
|
|
22
|
+
// - right shift the (si, ti) to remove the part that's constant for all cells
|
|
23
|
+
// of level-k. The result is called the (pi, qi) space.
|
|
24
|
+
// - 2nd derivative encode the pi and qi sequences (linear prediction)
|
|
25
|
+
// - zig-zag encode all derivative values but the first, which cannot be
|
|
26
|
+
// negative
|
|
27
|
+
// - interleave the zig-zag encoded values
|
|
28
|
+
// - encode the first interleaved value in a fixed length encoding
|
|
29
|
+
// (varint would make this value larger)
|
|
30
|
+
// - encode the remaining interleaved values as varint64s, as the
|
|
31
|
+
// derivative encoding should make the values small.
|
|
32
|
+
// In addition, provides a lossless method to compress a sequence of points even
|
|
33
|
+
// if some points are not the center of level-k cells. These points are stored
|
|
34
|
+
// exactly, using 3 double precision values, after the above encoded string,
|
|
35
|
+
// together with their index in the sequence (this leads to some redundancy - it
|
|
36
|
+
// is expected that only a small fraction of the points are not cell centers).
|
|
37
|
+
//
|
|
38
|
+
// Require that the encoder was constructed with the no-arg constructor, as
|
|
39
|
+
// Ensure() will be called to allocate space.
|
|
40
|
+
|
|
41
|
+
//
|
|
42
|
+
// To encode leaf cells, this requires 8 bytes for the first vertex plus
|
|
43
|
+
// an average of 3.8 bytes for each additional vertex, when computed on
|
|
44
|
+
// Google's geographic repository.
|
|
45
|
+
|
|
46
|
+
#ifndef S2_S2POINT_COMPRESSION_H_
|
|
47
|
+
#define S2_S2POINT_COMPRESSION_H_
|
|
48
|
+
|
|
49
|
+
#include "s2/third_party/absl/types/span.h"
|
|
50
|
+
#include "s2/_fp_contract_off.h"
|
|
51
|
+
#include "s2/s1angle.h"
|
|
52
|
+
|
|
53
|
+
class Decoder;
|
|
54
|
+
class Encoder;
|
|
55
|
+
|
|
56
|
+
// The XYZ and face,si,ti coordinates of an S2Point and, if this point is equal
|
|
57
|
+
// to the center of an S2Cell, the level of this cell (-1 otherwise).
|
|
58
|
+
struct S2XYZFaceSiTi {
|
|
59
|
+
S2Point xyz;
|
|
60
|
+
int face;
|
|
61
|
+
unsigned int si;
|
|
62
|
+
unsigned int ti;
|
|
63
|
+
int cell_level;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
// Encode the points in the encoder, using an optimized compressed format for
|
|
67
|
+
// points at the center of a cell at 'level', plus 3 double values for the
|
|
68
|
+
// others.
|
|
69
|
+
void S2EncodePointsCompressed(absl::Span<const S2XYZFaceSiTi> points,
|
|
70
|
+
int level, Encoder* encoder);
|
|
71
|
+
|
|
72
|
+
// Decode points encoded with S2EncodePointsCompressed. Requires that the
|
|
73
|
+
// level is the level that was used in S2EncodePointsCompressed. Ensures
|
|
74
|
+
// that the decoded points equal the encoded points. Returns true on success.
|
|
75
|
+
bool S2DecodePointsCompressed(Decoder* decoder, int level,
|
|
76
|
+
absl::Span<S2Point> points);
|
|
77
|
+
|
|
78
|
+
#endif // S2_S2POINT_COMPRESSION_H_
|