@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,283 @@
|
|
|
1
|
+
// Copyright 2018 Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
// Author: ericv@google.com (Eric Veach)
|
|
17
|
+
//
|
|
18
|
+
// Helper functions for encoding/decoding S2Shapes and S2Shape vectors.
|
|
19
|
+
// Design goals:
|
|
20
|
+
//
|
|
21
|
+
// - Allow control over encoding tradeoffs (i.e., speed vs encoding size).
|
|
22
|
+
//
|
|
23
|
+
// - Allow control over decoding tradeoffs (e.g., whether to decode data
|
|
24
|
+
// immediately or lazily).
|
|
25
|
+
//
|
|
26
|
+
// - Don't force all S2Shape types to have the same Encode() method. Some
|
|
27
|
+
// implementations may want extra parameters.
|
|
28
|
+
//
|
|
29
|
+
// - Support custom encodings of shape vectors; e.g., if all shapes are
|
|
30
|
+
// of a known type, then there is no need to tag them individually.
|
|
31
|
+
//
|
|
32
|
+
// - Support client-defined S2Shape types.
|
|
33
|
+
//
|
|
34
|
+
// - Support client-defined encodings of standard S2Shape types.
|
|
35
|
+
|
|
36
|
+
#ifndef S2_S2SHAPEUTIL_CODING_H_
|
|
37
|
+
#define S2_S2SHAPEUTIL_CODING_H_
|
|
38
|
+
|
|
39
|
+
#include <functional>
|
|
40
|
+
#include <memory>
|
|
41
|
+
#include "s2/util/coding/coder.h"
|
|
42
|
+
#include "s2/encoded_string_vector.h"
|
|
43
|
+
#include "s2/s2shape.h"
|
|
44
|
+
#include "s2/s2shape_index.h"
|
|
45
|
+
|
|
46
|
+
namespace s2shapeutil {
|
|
47
|
+
|
|
48
|
+
// A function that appends a serialized representation of the given shape to
|
|
49
|
+
// the given Encoder. The encoding should *not* include any type information
|
|
50
|
+
// (e.g., shape->type_tag()); the caller is responsible for encoding this
|
|
51
|
+
// separately if necessary.
|
|
52
|
+
//
|
|
53
|
+
// Note that you can add your own encodings and/or shape types by wrapping one
|
|
54
|
+
// of the standard functions and adding exceptions:
|
|
55
|
+
//
|
|
56
|
+
// void MyShapeEncoder(const S2Shape& shape, Encoder* encoder) {
|
|
57
|
+
// if (shape.type_tag() == MyShape::kTypeTag) {
|
|
58
|
+
// down_cast<const MyShape*>(&shape)->Encode(encoder);
|
|
59
|
+
// return true;
|
|
60
|
+
// } else {
|
|
61
|
+
// return CompactEncodeShape(shape, encoder);
|
|
62
|
+
// }
|
|
63
|
+
// }
|
|
64
|
+
//
|
|
65
|
+
// REQUIRES: "encoder" uses the default constructor, so that its buffer
|
|
66
|
+
// can be enlarged as necessary by calling Ensure(int).
|
|
67
|
+
using ShapeEncoder =
|
|
68
|
+
std::function<bool (const S2Shape& shape, Encoder* encoder)>;
|
|
69
|
+
|
|
70
|
+
// A ShapeEncoder that can encode all standard S2Shape types, preferring fast
|
|
71
|
+
// (but larger) encodings. For example, points are typically represented as
|
|
72
|
+
// uncompressed S2Point values (24 bytes each).
|
|
73
|
+
//
|
|
74
|
+
// REQUIRES: "encoder" uses the default constructor, so that its buffer
|
|
75
|
+
// can be enlarged as necessary by calling Ensure(int).
|
|
76
|
+
bool FastEncodeShape(const S2Shape& shape, Encoder* encoder);
|
|
77
|
+
|
|
78
|
+
// A ShapeEncoder that encode all standard S2Shape types, preferring
|
|
79
|
+
// compact (but slower) encodings. For example, points that have been snapped
|
|
80
|
+
// to S2CellId centers will be encoded using at most 8 bytes.
|
|
81
|
+
//
|
|
82
|
+
// REQUIRES: "encoder" uses the default constructor, so that its buffer
|
|
83
|
+
// can be enlarged as necessary by calling Ensure(int).
|
|
84
|
+
bool CompactEncodeShape(const S2Shape& shape, Encoder* encoder);
|
|
85
|
+
|
|
86
|
+
// A function that decodes an S2Shape of the given type, consuming data from
|
|
87
|
+
// the given Decoder. Returns nullptr on errors.
|
|
88
|
+
using ShapeDecoder =
|
|
89
|
+
std::function<std::unique_ptr<S2Shape>(S2Shape::TypeTag tag,
|
|
90
|
+
Decoder* decoder)>;
|
|
91
|
+
|
|
92
|
+
// A ShapeDecoder that fully decodes an S2Shape of the given type. After this
|
|
93
|
+
// function returns, the underlying Decoder data is no longer needed.
|
|
94
|
+
std::unique_ptr<S2Shape> FullDecodeShape(S2Shape::TypeTag tag,
|
|
95
|
+
Decoder* decoder);
|
|
96
|
+
|
|
97
|
+
// A ShapeDecoder that prefers to decode the given S2Shape lazily (as data is
|
|
98
|
+
// accessed). This is only possible when the given shape type (e.g.,
|
|
99
|
+
// LaxPolygonShape) has an alternate implementation that can work directly
|
|
100
|
+
// with encoded data (e.g., EncodedLaxPolygonShape). All other shape types
|
|
101
|
+
// are handled by decoding them fully (e.g., S2Polygon::Shape).
|
|
102
|
+
std::unique_ptr<S2Shape> LazyDecodeShape(S2Shape::TypeTag tag,
|
|
103
|
+
Decoder* decoder);
|
|
104
|
+
|
|
105
|
+
// Encodes the shapes in the given S2ShapeIndex. Each shape is encoded with a
|
|
106
|
+
// type tag allows it to be decoded into an S2Shape of the appropriate type.
|
|
107
|
+
// "shape_encoder" allows control over the encoding strategy. Note that when
|
|
108
|
+
// an S2ShapeIndex is also being encoded, it should be encoded *after* the
|
|
109
|
+
// shape vector, like this:
|
|
110
|
+
//
|
|
111
|
+
// s2shapeutil::CompactEncodeTaggedShapes(index, encoder);
|
|
112
|
+
// index.Encode(encoder);
|
|
113
|
+
//
|
|
114
|
+
// This is because when the index is decoded, the shape vector is required as
|
|
115
|
+
// a parameter.
|
|
116
|
+
//
|
|
117
|
+
// REQUIRES: "encoder" uses the default constructor, so that its buffer
|
|
118
|
+
// can be enlarged as necessary by calling Ensure(int).
|
|
119
|
+
bool EncodeTaggedShapes(const S2ShapeIndex& index,
|
|
120
|
+
const ShapeEncoder& shape_encoder,
|
|
121
|
+
Encoder* encoder);
|
|
122
|
+
|
|
123
|
+
// Convenience function that calls EncodeTaggedShapes using FastEncodeShape as
|
|
124
|
+
// the ShapeEncoder.
|
|
125
|
+
//
|
|
126
|
+
// REQUIRES: "encoder" uses the default constructor, so that its buffer
|
|
127
|
+
// can be enlarged as necessary by calling Ensure(int).
|
|
128
|
+
bool FastEncodeTaggedShapes(const S2ShapeIndex& index, Encoder* encoder);
|
|
129
|
+
|
|
130
|
+
// Convenience function that calls EncodeTaggedShapes using CompactEncodeShape
|
|
131
|
+
// as the ShapeEncoder.
|
|
132
|
+
//
|
|
133
|
+
// REQUIRES: "encoder" uses the default constructor, so that its buffer
|
|
134
|
+
// can be enlarged as necessary by calling Ensure(int).
|
|
135
|
+
bool CompactEncodeTaggedShapes(const S2ShapeIndex& index, Encoder* encoder);
|
|
136
|
+
|
|
137
|
+
// A ShapeFactory that decodes a vector generated by EncodeTaggedShapes()
|
|
138
|
+
// above. Example usage:
|
|
139
|
+
//
|
|
140
|
+
// index.Init(decoder, s2shapeutil::FullDecodeShapeFactory(decoder));
|
|
141
|
+
//
|
|
142
|
+
// Note that the S2Shape vector must be encoded *before* the S2ShapeIndex
|
|
143
|
+
// (like the example code for EncodeTaggedShapes), since the shapes need to be
|
|
144
|
+
// decoded before the index.
|
|
145
|
+
//
|
|
146
|
+
// REQUIRES: The Decoder data buffer must outlive all calls to the given
|
|
147
|
+
// ShapeFactory (not including its destructor).
|
|
148
|
+
class TaggedShapeFactory : public S2ShapeIndex::ShapeFactory {
|
|
149
|
+
public:
|
|
150
|
+
// Returns an empty vector and/or null S2Shapes on decoding errors.
|
|
151
|
+
TaggedShapeFactory(const ShapeDecoder& shape_decoder, Decoder* decoder);
|
|
152
|
+
|
|
153
|
+
int size() const override { return encoded_shapes_.size(); }
|
|
154
|
+
|
|
155
|
+
std::unique_ptr<S2Shape> operator[](int shape_id) const override;
|
|
156
|
+
|
|
157
|
+
std::unique_ptr<ShapeFactory> Clone() const override {
|
|
158
|
+
return absl::make_unique<TaggedShapeFactory>(*this);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
private:
|
|
162
|
+
ShapeDecoder shape_decoder_;
|
|
163
|
+
s2coding::EncodedStringVector encoded_shapes_;
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
// Convenience function that calls TaggedShapeFactory using FullDecodeShape
|
|
167
|
+
// as the ShapeDecoder.
|
|
168
|
+
TaggedShapeFactory FullDecodeShapeFactory(Decoder* decoder);
|
|
169
|
+
|
|
170
|
+
// Convenience function that calls TaggedShapeFactory using LazyDecodeShape
|
|
171
|
+
// as the ShapeDecoder.
|
|
172
|
+
TaggedShapeFactory LazyDecodeShapeFactory(Decoder* decoder);
|
|
173
|
+
|
|
174
|
+
// A ShapeFactory that simply returns shapes from the given vector.
|
|
175
|
+
//
|
|
176
|
+
// REQUIRES: Each shape is requested at most once. (This implies that when
|
|
177
|
+
// the ShapeFactory is passed to an S2ShapeIndex, S2ShapeIndex::Minimize must
|
|
178
|
+
// not be called.) Additional requests for the same shape return nullptr.
|
|
179
|
+
class VectorShapeFactory : public S2ShapeIndex::ShapeFactory {
|
|
180
|
+
public:
|
|
181
|
+
explicit VectorShapeFactory(std::vector<std::unique_ptr<S2Shape>> shapes);
|
|
182
|
+
|
|
183
|
+
int size() const override { return shared_shapes_->size(); }
|
|
184
|
+
|
|
185
|
+
std::unique_ptr<S2Shape> operator[](int shape_id) const override;
|
|
186
|
+
|
|
187
|
+
std::unique_ptr<ShapeFactory> Clone() const override {
|
|
188
|
+
return absl::make_unique<VectorShapeFactory>(*this);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
private:
|
|
192
|
+
// Since this class is copyable, we need to access the shape vector through
|
|
193
|
+
// a shared pointer.
|
|
194
|
+
std::shared_ptr<std::vector<std::unique_ptr<S2Shape>>> shared_shapes_;
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
// A ShapeFactory that returns the single given S2Shape. Useful for testing.
|
|
198
|
+
VectorShapeFactory SingletonShapeFactory(std::unique_ptr<S2Shape> shape);
|
|
199
|
+
|
|
200
|
+
// A ShapeFactory that wraps the shapes from the given index. Used for testing.
|
|
201
|
+
class WrappedShapeFactory : public S2ShapeIndex::ShapeFactory {
|
|
202
|
+
public:
|
|
203
|
+
// REQUIRES: The given index must persist for the lifetime of this object.
|
|
204
|
+
explicit WrappedShapeFactory(const S2ShapeIndex* index) : index_(*index) {}
|
|
205
|
+
|
|
206
|
+
int size() const override { return index_.num_shape_ids(); }
|
|
207
|
+
|
|
208
|
+
std::unique_ptr<S2Shape> operator[](int shape_id) const override;
|
|
209
|
+
|
|
210
|
+
std::unique_ptr<ShapeFactory> Clone() const override {
|
|
211
|
+
return absl::make_unique<WrappedShapeFactory>(*this);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
private:
|
|
215
|
+
const S2ShapeIndex& index_;
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
// Encodes the shapes in the given index, which must all have the same type.
|
|
220
|
+
// The given Shape type does *not* need to have a "type tag" assigned.
|
|
221
|
+
// This is useful for encoding experimental or locally defined types, or when
|
|
222
|
+
// the S2Shape type in a given index is known in advance.
|
|
223
|
+
//
|
|
224
|
+
// REQUIRES: The Shape class must have an Encode(Encoder*) method.
|
|
225
|
+
// REQUIRES: "encoder" uses the default constructor, so that its buffer
|
|
226
|
+
// can be enlarged as necessary by calling Ensure(int).
|
|
227
|
+
template <class Shape>
|
|
228
|
+
void EncodeHomogeneousShapes(const S2ShapeIndex& index, Encoder* encoder);
|
|
229
|
+
|
|
230
|
+
// A ShapeFactory that decodes shapes of a given fixed type (e.g.,
|
|
231
|
+
// EncodedS2LaxPolylineShape). Example usage:
|
|
232
|
+
//
|
|
233
|
+
// REQUIRES: The Shape type must have an Init(Decoder*) method.
|
|
234
|
+
// REQUIRES: The Decoder data buffer must outlive the returned ShapeFactory
|
|
235
|
+
// and all shapes returned by that factory.
|
|
236
|
+
template <class Shape>
|
|
237
|
+
class HomogeneousShapeFactory : public S2ShapeIndex::ShapeFactory {
|
|
238
|
+
public:
|
|
239
|
+
// Returns an empty vector and/or null S2Shapes on decoding errors.
|
|
240
|
+
explicit HomogeneousShapeFactory(Decoder* decoder);
|
|
241
|
+
|
|
242
|
+
int size() const override { return encoded_shapes_.size(); }
|
|
243
|
+
|
|
244
|
+
std::unique_ptr<S2Shape> operator[](int shape_id) const override;
|
|
245
|
+
|
|
246
|
+
std::unique_ptr<ShapeFactory> Clone() const override {
|
|
247
|
+
return absl::make_unique<HomogeneousShapeFactory>(*this);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
private:
|
|
251
|
+
s2coding::EncodedStringVector encoded_shapes_;
|
|
252
|
+
};
|
|
253
|
+
|
|
254
|
+
////////////////// Implementation details follow ////////////////////
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
template <class Shape>
|
|
258
|
+
void EncodeHomogeneousShapes(const S2ShapeIndex& index, Encoder* encoder) {
|
|
259
|
+
s2coding::StringVectorEncoder shape_vector;
|
|
260
|
+
for (S2Shape* shape : index) {
|
|
261
|
+
S2_DCHECK(shape != nullptr);
|
|
262
|
+
down_cast<Shape*>(shape)->Encode(shape_vector.AddViaEncoder());
|
|
263
|
+
}
|
|
264
|
+
shape_vector.Encode(encoder);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
template <class Shape>
|
|
268
|
+
HomogeneousShapeFactory<Shape>::HomogeneousShapeFactory(Decoder* decoder) {
|
|
269
|
+
if (!encoded_shapes_.Init(decoder)) encoded_shapes_.Clear();
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
template <class Shape>
|
|
273
|
+
std::unique_ptr<S2Shape> HomogeneousShapeFactory<Shape>::operator[](
|
|
274
|
+
int shape_id) const {
|
|
275
|
+
Decoder decoder = encoded_shapes_.GetDecoder(shape_id);
|
|
276
|
+
auto shape = absl::make_unique<Shape>();
|
|
277
|
+
if (!shape->Init(&decoder)) return nullptr;
|
|
278
|
+
return std::move(shape); // Converts from Shape to S2Shape.
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
} // namespace s2shapeutil
|
|
282
|
+
|
|
283
|
+
#endif // S2_S2SHAPEUTIL_CODING_H_
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// Copyright 2018 Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
// Author: ericv@google.com (Eric Veach)
|
|
17
|
+
|
|
18
|
+
#include "s2/s2shapeutil_coding.h"
|
|
19
|
+
|
|
20
|
+
#include <gtest/gtest.h>
|
|
21
|
+
#include "s2/util/coding/coder.h"
|
|
22
|
+
#include "s2/s2polygon.h"
|
|
23
|
+
#include "s2/s2text_format.h"
|
|
24
|
+
|
|
25
|
+
using absl::make_unique;
|
|
26
|
+
|
|
27
|
+
namespace s2shapeutil {
|
|
28
|
+
|
|
29
|
+
TEST(FastEncodeShape, S2Polygon) {
|
|
30
|
+
auto polygon = s2textformat::MakePolygonOrDie("0:0, 0:1, 1:0");
|
|
31
|
+
auto shape = make_unique<S2Polygon::Shape>(polygon.get());
|
|
32
|
+
Encoder encoder;
|
|
33
|
+
FastEncodeShape(*shape, &encoder);
|
|
34
|
+
Decoder decoder(encoder.base(), encoder.length());
|
|
35
|
+
auto shape2 = FullDecodeShape(S2Polygon::Shape::kTypeTag, &decoder);
|
|
36
|
+
EXPECT_TRUE(shape->polygon()->Equals(
|
|
37
|
+
down_cast<S2Polygon::Shape*>(shape2.get())->polygon()));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
TEST(FastEncodeTaggedShapes, MixedShapes) {
|
|
41
|
+
// Tests encoding/decoding a collection of points, polylines, and polygons.
|
|
42
|
+
auto index = s2textformat::MakeIndexOrDie(
|
|
43
|
+
"0:0 | 0:1 # 1:1, 1:2, 1:3 # 2:2; 2:3, 2:4, 3:3");
|
|
44
|
+
Encoder encoder;
|
|
45
|
+
s2shapeutil::FastEncodeTaggedShapes(*index, &encoder);
|
|
46
|
+
index->Encode(&encoder);
|
|
47
|
+
Decoder decoder(encoder.base(), encoder.length());
|
|
48
|
+
MutableS2ShapeIndex decoded_index;
|
|
49
|
+
decoded_index.Init(&decoder, s2shapeutil::FullDecodeShapeFactory(&decoder));
|
|
50
|
+
EXPECT_EQ(s2textformat::ToString(*index),
|
|
51
|
+
s2textformat::ToString(decoded_index));
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
} // namespace s2shapeutil
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// Copyright 2017 Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
// Author: ericv@google.com (Eric Veach)
|
|
17
|
+
|
|
18
|
+
#include "s2/s2shapeutil_contains_brute_force.h"
|
|
19
|
+
|
|
20
|
+
#include <utility>
|
|
21
|
+
#include "s2/s2edge_crosser.h"
|
|
22
|
+
|
|
23
|
+
namespace s2shapeutil {
|
|
24
|
+
|
|
25
|
+
bool ContainsBruteForce(const S2Shape& shape, const S2Point& point) {
|
|
26
|
+
if (shape.dimension() < 2) return false;
|
|
27
|
+
|
|
28
|
+
S2Shape::ReferencePoint ref_point = shape.GetReferencePoint();
|
|
29
|
+
if (ref_point.point == point) return ref_point.contained;
|
|
30
|
+
|
|
31
|
+
S2CopyingEdgeCrosser crosser(ref_point.point, point);
|
|
32
|
+
bool inside = ref_point.contained;
|
|
33
|
+
for (int e = 0; e < shape.num_edges(); ++e) {
|
|
34
|
+
auto edge = shape.edge(e);
|
|
35
|
+
inside ^= crosser.EdgeOrVertexCrossing(edge.v0, edge.v1);
|
|
36
|
+
}
|
|
37
|
+
return inside;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
} // namespace s2shapeutil
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// Copyright 2017 Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
// Author: ericv@google.com (Eric Veach)
|
|
17
|
+
|
|
18
|
+
#ifndef S2_S2SHAPEUTIL_CONTAINS_BRUTE_FORCE_H_
|
|
19
|
+
#define S2_S2SHAPEUTIL_CONTAINS_BRUTE_FORCE_H_
|
|
20
|
+
|
|
21
|
+
#include "s2/s2point.h"
|
|
22
|
+
#include "s2/s2shape_index.h"
|
|
23
|
+
|
|
24
|
+
namespace s2shapeutil {
|
|
25
|
+
|
|
26
|
+
// Returns true if the given shape contains the given point. Most clients
|
|
27
|
+
// should not use this method, since its running time is linear in the number
|
|
28
|
+
// of shape edges. Instead clients should create an S2ShapeIndex and use
|
|
29
|
+
// S2ContainsPointQuery, since this strategy is much more efficient when many
|
|
30
|
+
// points need to be tested.
|
|
31
|
+
//
|
|
32
|
+
// Polygon boundaries are treated as being semi-open (see S2ContainsPointQuery
|
|
33
|
+
// and S2VertexModel for other options).
|
|
34
|
+
//
|
|
35
|
+
// CAVEAT: Typically this method is only used internally. Its running time is
|
|
36
|
+
// linear in the number of shape edges.
|
|
37
|
+
bool ContainsBruteForce(const S2Shape& shape, const S2Point& point);
|
|
38
|
+
|
|
39
|
+
} // namespace s2shapeutil
|
|
40
|
+
|
|
41
|
+
#endif // S2_S2SHAPEUTIL_CONTAINS_BRUTE_FORCE_H_
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// Copyright 2017 Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
// Author: ericv@google.com (Eric Veach)
|
|
17
|
+
|
|
18
|
+
#include "s2/s2shapeutil_contains_brute_force.h"
|
|
19
|
+
|
|
20
|
+
#include <gtest/gtest.h>
|
|
21
|
+
#include "s2/s2lax_polygon_shape.h"
|
|
22
|
+
#include "s2/s2lax_polyline_shape.h"
|
|
23
|
+
#include "s2/s2text_format.h"
|
|
24
|
+
|
|
25
|
+
using s2textformat::MakeLaxPolygon;
|
|
26
|
+
using s2textformat::MakeLaxPolyline;
|
|
27
|
+
using s2textformat::MakePoint;
|
|
28
|
+
|
|
29
|
+
namespace s2shapeutil {
|
|
30
|
+
|
|
31
|
+
TEST(ContainsBruteForce, NoInterior) {
|
|
32
|
+
// Defines a polyline that almost entirely encloses the point 0:0.
|
|
33
|
+
auto polyline = MakeLaxPolyline("0:0, 0:1, 1:-1, -1:-1, -1e9:1");
|
|
34
|
+
EXPECT_FALSE(ContainsBruteForce(*polyline, MakePoint("0:0")));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
TEST(ContainsBruteForce, ContainsReferencePoint) {
|
|
38
|
+
// Checks that ContainsBruteForce agrees with GetReferencePoint.
|
|
39
|
+
auto polygon = MakeLaxPolygon("0:0, 0:1, 1:-1, -1:-1, -1e9:1");
|
|
40
|
+
auto ref = polygon->GetReferencePoint();
|
|
41
|
+
EXPECT_EQ(ref.contained, ContainsBruteForce(*polygon, ref.point));
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
TEST(ContainsBruteForce, ConsistentWithS2Loop) {
|
|
45
|
+
// Checks that ContainsBruteForce agrees with S2Loop::Contains().
|
|
46
|
+
auto loop = S2Loop::MakeRegularLoop(MakePoint("89:-179"),
|
|
47
|
+
S1Angle::Degrees(10), 100);
|
|
48
|
+
S2Loop::Shape shape(loop.get());
|
|
49
|
+
for (int i = 0; i < loop->num_vertices(); ++i) {
|
|
50
|
+
EXPECT_EQ(loop->Contains(loop->vertex(i)),
|
|
51
|
+
ContainsBruteForce(shape, loop->vertex(i)));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
} // namespace s2shapeutil
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// Copyright 2013 Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
// Author: ericv@google.com (Eric Veach)
|
|
17
|
+
|
|
18
|
+
#ifndef S2_S2SHAPEUTIL_COUNT_EDGES_H_
|
|
19
|
+
#define S2_S2SHAPEUTIL_COUNT_EDGES_H_
|
|
20
|
+
|
|
21
|
+
#include "s2/s2shape_index.h"
|
|
22
|
+
|
|
23
|
+
namespace s2shapeutil {
|
|
24
|
+
|
|
25
|
+
// Returns the total number of edges in all indexed shapes. This method takes
|
|
26
|
+
// time linear in the number of shapes.
|
|
27
|
+
template <class S2ShapeIndexType>
|
|
28
|
+
int CountEdges(const S2ShapeIndexType& index);
|
|
29
|
+
|
|
30
|
+
// Like CountEdges(), but stops once "max_edges" edges have been found (in
|
|
31
|
+
// which case the current running total is returned).
|
|
32
|
+
template <class S2ShapeIndexType>
|
|
33
|
+
int CountEdgesUpTo(const S2ShapeIndexType& index, int max_edges);
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
////////////////// Implementation details follow ////////////////////
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
template <class S2ShapeIndexType>
|
|
40
|
+
inline int CountEdges(const S2ShapeIndexType& index) {
|
|
41
|
+
return CountEdgesUpTo(index, std::numeric_limits<int>::max());
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
template <class S2ShapeIndexType>
|
|
45
|
+
int CountEdgesUpTo(const S2ShapeIndexType& index, int max_edges) {
|
|
46
|
+
int num_edges = 0;
|
|
47
|
+
for (S2Shape* shape : index) {
|
|
48
|
+
if (shape == nullptr) continue;
|
|
49
|
+
num_edges += shape->num_edges();
|
|
50
|
+
if (num_edges >= max_edges) break;
|
|
51
|
+
}
|
|
52
|
+
return num_edges;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
} // namespace s2shapeutil
|
|
56
|
+
|
|
57
|
+
#endif // S2_S2SHAPEUTIL_COUNT_EDGES_H_
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// Copyright 2013 Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
// Author: ericv@google.com (Eric Veach)
|
|
17
|
+
|
|
18
|
+
#include "s2/s2shapeutil_count_edges.h"
|
|
19
|
+
|
|
20
|
+
#include <gtest/gtest.h>
|
|
21
|
+
#include "s2/mutable_s2shape_index.h"
|
|
22
|
+
#include "s2/s2text_format.h"
|
|
23
|
+
|
|
24
|
+
namespace {
|
|
25
|
+
|
|
26
|
+
TEST(CountEdgesUpTo, StopsEarly) {
|
|
27
|
+
auto index = s2textformat::MakeIndex(
|
|
28
|
+
"0:0 | 0:1 | 0:2 | 0:3 | 0:4 # 1:0, 1:1 | 1:2, 1:3 | 1:4, 1:5, 1:6 #");
|
|
29
|
+
// Verify the test parameters.
|
|
30
|
+
ASSERT_EQ(index->num_shape_ids(), 4);
|
|
31
|
+
ASSERT_EQ(index->shape(0)->num_edges(), 5);
|
|
32
|
+
ASSERT_EQ(index->shape(1)->num_edges(), 1);
|
|
33
|
+
ASSERT_EQ(index->shape(2)->num_edges(), 1);
|
|
34
|
+
ASSERT_EQ(index->shape(3)->num_edges(), 2);
|
|
35
|
+
|
|
36
|
+
EXPECT_EQ(s2shapeutil::CountEdges(*index), 9);
|
|
37
|
+
EXPECT_EQ(s2shapeutil::CountEdgesUpTo(*index, 1), 5);
|
|
38
|
+
EXPECT_EQ(s2shapeutil::CountEdgesUpTo(*index, 5), 5);
|
|
39
|
+
EXPECT_EQ(s2shapeutil::CountEdgesUpTo(*index, 6), 6);
|
|
40
|
+
EXPECT_EQ(s2shapeutil::CountEdgesUpTo(*index, 8), 9);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
} // namespace
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// Copyright Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
#include "s2/s2shapeutil_edge_iterator.h"
|
|
17
|
+
|
|
18
|
+
#include "s2/third_party/absl/strings/str_cat.h"
|
|
19
|
+
|
|
20
|
+
namespace s2shapeutil {
|
|
21
|
+
|
|
22
|
+
EdgeIterator::EdgeIterator(const S2ShapeIndex* index)
|
|
23
|
+
: index_(index), shape_id_(-1), num_edges_(0), edge_id_(-1) {
|
|
24
|
+
Next();
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
S2Shape::Edge EdgeIterator::edge() const {
|
|
28
|
+
S2_DCHECK(!Done());
|
|
29
|
+
return index_->shape(shape_id_)->edge(edge_id_);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
void EdgeIterator::Next() {
|
|
33
|
+
while (++edge_id_ >= num_edges_) {
|
|
34
|
+
if (++shape_id_ >= index_->num_shape_ids()) break;
|
|
35
|
+
S2Shape* shape = index_->shape(shape_id_);
|
|
36
|
+
num_edges_ = (shape == nullptr) ? 0 : shape->num_edges();
|
|
37
|
+
edge_id_ = -1;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
string EdgeIterator::DebugString() const {
|
|
42
|
+
return absl::StrCat("(shape=", shape_id_, ", edge=", edge_id_, ")");
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
} // namespace s2shapeutil
|