@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,86 @@
|
|
|
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_S2BUILDERUTIL_FIND_POLYGON_DEGENERACIES_H_
|
|
19
|
+
#define S2_S2BUILDERUTIL_FIND_POLYGON_DEGENERACIES_H_
|
|
20
|
+
|
|
21
|
+
#include <vector>
|
|
22
|
+
|
|
23
|
+
#include "s2/base/integral_types.h"
|
|
24
|
+
#include "s2/s2builder_graph.h"
|
|
25
|
+
#include "s2/s2error.h"
|
|
26
|
+
|
|
27
|
+
namespace s2builderutil {
|
|
28
|
+
|
|
29
|
+
// A polygon degeneracy is either a degenerate edge (an edge from a vertex to
|
|
30
|
+
// itself) or a sibling edge pair (consisting of an edge and its corresponding
|
|
31
|
+
// reverse edge). "is_hole" indicates whether the degeneracy corresponds to a
|
|
32
|
+
// polygon hole (as opposed to a polygon shell).
|
|
33
|
+
//
|
|
34
|
+
// Degeneracies are not allowed to coincide with any non-degenerate portions
|
|
35
|
+
// of the polygon's boundary (since that would make it impossible to classify
|
|
36
|
+
// the degeneracy as a shell or hole). Specifically, degenerate edges must
|
|
37
|
+
// coincide only with other degenerate edges, and sibling pairs must coincide
|
|
38
|
+
// only with other sibling pairs. (Below we require a slightly stronger
|
|
39
|
+
// condition, namely that sibling pairs cannot coincide with any other edges.)
|
|
40
|
+
struct PolygonDegeneracy {
|
|
41
|
+
uint32 edge_id : 31;
|
|
42
|
+
uint32 is_hole : 1;
|
|
43
|
+
|
|
44
|
+
PolygonDegeneracy() : edge_id(0), is_hole(false) {}
|
|
45
|
+
PolygonDegeneracy(S2Builder::Graph::EdgeId _edge_id, bool _is_hole)
|
|
46
|
+
: edge_id(_edge_id), is_hole(_is_hole) {
|
|
47
|
+
}
|
|
48
|
+
bool operator==(PolygonDegeneracy y) const {
|
|
49
|
+
return edge_id == y.edge_id && is_hole == y.is_hole;
|
|
50
|
+
}
|
|
51
|
+
bool operator<(PolygonDegeneracy y) const {
|
|
52
|
+
return edge_id < y.edge_id || (edge_id == y.edge_id && is_hole < y.is_hole);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
// Given a graph representing a polygon, finds all degenerate edges and
|
|
57
|
+
// sibling pairs and classifies them as being either shells or holes. The
|
|
58
|
+
// result vector is sorted by edge id.
|
|
59
|
+
//
|
|
60
|
+
// REQUIRES: g.options().edge_type() == DIRECTED
|
|
61
|
+
// REQUIRES: g.options().sibling_pairs() == DISCARD_EXCESS (or DISCARD)
|
|
62
|
+
// REQUIRES: g.options().degenerate_edges() == DISCARD_EXCESS (or DISCARD)
|
|
63
|
+
//
|
|
64
|
+
// Usually callers will want to specify SiblingPairs::DISCARD_EXCESS and
|
|
65
|
+
// DegenerateEdges::DISCARD_EXCESS in order to remove all redundant
|
|
66
|
+
// degeneracies. DISCARD is also allowed in case you want to keep only one
|
|
67
|
+
// type of degeneracy (i.e., degenerate edges or sibling pairs).
|
|
68
|
+
//
|
|
69
|
+
// If the graph edges cannot be assembled into loops, the result is undefined.
|
|
70
|
+
// (An error may or may not be returned.)
|
|
71
|
+
std::vector<PolygonDegeneracy> FindPolygonDegeneracies(
|
|
72
|
+
const S2Builder::Graph& g, S2Error* error);
|
|
73
|
+
|
|
74
|
+
// Given a graph representing a polygon, returns true the graph consists
|
|
75
|
+
// entirely of degenerate edges and/or sibling pairs. Such a graph represents
|
|
76
|
+
// either the empty polygon together with a collection of degenerate shells,
|
|
77
|
+
// or the full polygon together with a collection of degenerate holes.
|
|
78
|
+
//
|
|
79
|
+
// REQUIRES: g.options().edge_type() == DIRECTED
|
|
80
|
+
// REQUIRES: g.options().sibling_pairs() == DISCARD_EXCESS (or DISCARD)
|
|
81
|
+
// REQUIRES: g.options().degenerate_edges() == DISCARD_EXCESS (or DISCARD)
|
|
82
|
+
bool IsFullyDegenerate(const S2Builder::Graph& g);
|
|
83
|
+
|
|
84
|
+
} // namespace s2builderutil
|
|
85
|
+
|
|
86
|
+
#endif // S2_S2BUILDERUTIL_FIND_POLYGON_DEGENERACIES_H_
|
|
@@ -0,0 +1,182 @@
|
|
|
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/s2builderutil_find_polygon_degeneracies.h"
|
|
19
|
+
|
|
20
|
+
#include <iosfwd>
|
|
21
|
+
#include <memory>
|
|
22
|
+
#include <vector>
|
|
23
|
+
|
|
24
|
+
#include <gtest/gtest.h>
|
|
25
|
+
#include "s2/third_party/absl/memory/memory.h"
|
|
26
|
+
#include "s2/s2builder.h"
|
|
27
|
+
#include "s2/s2builder_graph.h"
|
|
28
|
+
#include "s2/s2builder_layer.h"
|
|
29
|
+
#include "s2/s2cap.h"
|
|
30
|
+
#include "s2/s2lax_polygon_shape.h"
|
|
31
|
+
#include "s2/s2pointutil.h"
|
|
32
|
+
#include "s2/s2testing.h"
|
|
33
|
+
#include "s2/s2text_format.h"
|
|
34
|
+
|
|
35
|
+
using absl::make_unique;
|
|
36
|
+
using std::vector;
|
|
37
|
+
|
|
38
|
+
using EdgeType = S2Builder::EdgeType;
|
|
39
|
+
using Graph = S2Builder::Graph;
|
|
40
|
+
using GraphOptions = S2Builder::GraphOptions;
|
|
41
|
+
|
|
42
|
+
using DegenerateEdges = GraphOptions::DegenerateEdges;
|
|
43
|
+
using DuplicateEdges = GraphOptions::DuplicateEdges;
|
|
44
|
+
using SiblingPairs = GraphOptions::SiblingPairs;
|
|
45
|
+
|
|
46
|
+
namespace s2builderutil {
|
|
47
|
+
|
|
48
|
+
struct TestDegeneracy {
|
|
49
|
+
string edge_str;
|
|
50
|
+
bool is_hole;
|
|
51
|
+
TestDegeneracy(string _edge_str, bool _is_hole)
|
|
52
|
+
: edge_str(_edge_str), is_hole(_is_hole) {
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
bool operator<(const TestDegeneracy& x, const TestDegeneracy& y) {
|
|
57
|
+
if (x.edge_str < y.edge_str) return true;
|
|
58
|
+
if (y.edge_str < x.edge_str) return false;
|
|
59
|
+
return x.is_hole < y.is_hole;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
bool operator==(const TestDegeneracy& x, const TestDegeneracy& y) {
|
|
63
|
+
return x.edge_str == y.edge_str && x.is_hole == y.is_hole;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
class DegeneracyCheckingLayer : public S2Builder::Layer {
|
|
67
|
+
public:
|
|
68
|
+
explicit DegeneracyCheckingLayer(const vector<TestDegeneracy>& expected)
|
|
69
|
+
: expected_(expected) {
|
|
70
|
+
}
|
|
71
|
+
GraphOptions graph_options() const override {
|
|
72
|
+
return GraphOptions(EdgeType::DIRECTED, DegenerateEdges::DISCARD_EXCESS,
|
|
73
|
+
DuplicateEdges::KEEP, SiblingPairs::DISCARD_EXCESS);
|
|
74
|
+
}
|
|
75
|
+
void Build(const Graph& g, S2Error* error) override;
|
|
76
|
+
|
|
77
|
+
private:
|
|
78
|
+
vector<TestDegeneracy> expected_;
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
std::ostream& operator<<(std::ostream& os, const vector<TestDegeneracy>& v) {
|
|
82
|
+
for (const auto& degeneracy : v) {
|
|
83
|
+
os << (degeneracy.is_hole ? "Hole(" : "Shell(");
|
|
84
|
+
os << degeneracy.edge_str + ") ";
|
|
85
|
+
}
|
|
86
|
+
return os;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
void DegeneracyCheckingLayer::Build(const Graph& g, S2Error* error) {
|
|
90
|
+
auto degeneracies = FindPolygonDegeneracies(g, error);
|
|
91
|
+
// Convert the output into a human-readable format.
|
|
92
|
+
vector<TestDegeneracy> actual;
|
|
93
|
+
for (const auto& degeneracy : degeneracies) {
|
|
94
|
+
Graph::Edge edge = g.edge(degeneracy.edge_id);
|
|
95
|
+
vector<S2Point> points { g.vertex(edge.first), g.vertex(edge.second) };
|
|
96
|
+
actual.push_back(TestDegeneracy(s2textformat::ToString(points),
|
|
97
|
+
degeneracy.is_hole));
|
|
98
|
+
}
|
|
99
|
+
std::sort(actual.begin(), actual.end());
|
|
100
|
+
std::sort(expected_.begin(), expected_.end());
|
|
101
|
+
EXPECT_TRUE(expected_ == actual) << "\nExpected: " << expected_
|
|
102
|
+
<< "\nActual: " << actual;
|
|
103
|
+
EXPECT_EQ(IsFullyDegenerate(g), degeneracies.size() == g.num_edges());
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
void ExpectDegeneracies(const string& polygon_str,
|
|
107
|
+
const vector<TestDegeneracy>& expected) {
|
|
108
|
+
S2Builder builder{S2Builder::Options()};
|
|
109
|
+
builder.StartLayer(make_unique<DegeneracyCheckingLayer>(expected));
|
|
110
|
+
auto polygon = s2textformat::MakeLaxPolygonOrDie(polygon_str);
|
|
111
|
+
builder.AddIsFullPolygonPredicate(
|
|
112
|
+
[&polygon](const Graph& graph, S2Error* error) {
|
|
113
|
+
return polygon->GetReferencePoint().contained;
|
|
114
|
+
});
|
|
115
|
+
for (int i = 0; i < polygon->num_edges(); ++i) {
|
|
116
|
+
auto edge = polygon->edge(i);
|
|
117
|
+
builder.AddEdge(edge.v0, edge.v1);
|
|
118
|
+
}
|
|
119
|
+
S2Error error;
|
|
120
|
+
EXPECT_TRUE(builder.Build(&error)) << error;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
TEST(FindPolygonDegeneracies, EmptyPolygon) {
|
|
124
|
+
ExpectDegeneracies("", {});
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
TEST(FindPolygonDegeneracies, NoDegeneracies) {
|
|
128
|
+
ExpectDegeneracies("0:0, 0:1, 1:0", {});
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
TEST(FindPolygonDegeneracies, PointShell) {
|
|
132
|
+
ExpectDegeneracies("0:0", {{"0:0, 0:0", false}});
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
TEST(FindPolygonDegeneracies, SiblingPairShells) {
|
|
136
|
+
ExpectDegeneracies("0:0, 0:1, 1:0; 1:0, 0:1, 0:0", {
|
|
137
|
+
{"0:0, 0:1", false}, {"0:1, 0:0", false}, {"0:1, 1:0", false},
|
|
138
|
+
{"1:0, 0:1", false}, {"0:0, 1:0", false}, {"1:0, 0:0", false}
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
TEST(FindPolygonDegeneracies, AttachedSiblingPairShells) {
|
|
143
|
+
ExpectDegeneracies("0:0, 0:1, 1:0; 1:0, 2:0",
|
|
144
|
+
{{"1:0, 2:0", false}, {"2:0, 1:0", false}});
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
TEST(FindPolygonDegeneracies, AttachedSiblingPairHoles) {
|
|
148
|
+
ExpectDegeneracies("0:0, 0:3, 3:0; 0:0, 1:1",
|
|
149
|
+
{{"0:0, 1:1", true}, {"1:1, 0:0", true}});
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
TEST(FindPolygonDegeneracies, AttachedSiblingPairShellsAndHoles) {
|
|
153
|
+
ExpectDegeneracies("0:0, 0:3, 3:0; 3:0, 1:1; 3:0, 5:5", {
|
|
154
|
+
{"3:0, 1:1", true}, {"1:1, 3:0", true},
|
|
155
|
+
{"3:0, 5:5", false}, {"5:5, 3:0", false},
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
TEST(FindPolygonDegeneracies, DegenerateShellsOutsideLoop) {
|
|
160
|
+
ExpectDegeneracies("0:0, 0:3, 3:3, 3:0; 4:4, 5:5; 6:6", {
|
|
161
|
+
{"4:4, 5:5", false}, {"5:5, 4:4", false}, {"6:6, 6:6", false}
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
TEST(FindPolygonDegeneracies, DegenerateHolesWithinLoop) {
|
|
166
|
+
ExpectDegeneracies("0:0, 0:5, 5:5, 5:0; 1:1, 2:2; 3:3", {
|
|
167
|
+
{"1:1, 2:2", true}, {"2:2, 1:1", true}, {"3:3, 3:3", true}
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
TEST(FindPolygonDegeneracies, PointHoleWithinFull) {
|
|
172
|
+
ExpectDegeneracies("full; 0:0", {{"0:0, 0:0", true}});
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
TEST(FindPolygonDegeneracies, SiblingPairHolesWithinFull) {
|
|
176
|
+
ExpectDegeneracies("full; 0:0, 0:1, 1:0; 1:0, 0:1, 0:0", {
|
|
177
|
+
{"0:0, 0:1", true}, {"0:1, 0:0", true}, {"0:1, 1:0", true},
|
|
178
|
+
{"1:0, 0:1", true}, {"0:0, 1:0", true}, {"1:0, 0:0", true}
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
} // namespace s2builderutil
|
|
@@ -0,0 +1,57 @@
|
|
|
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_S2BUILDERUTIL_GRAPH_SHAPE_H_
|
|
19
|
+
#define S2_S2BUILDERUTIL_GRAPH_SHAPE_H_
|
|
20
|
+
|
|
21
|
+
#include <vector>
|
|
22
|
+
|
|
23
|
+
#include "s2/s2builder_graph.h"
|
|
24
|
+
|
|
25
|
+
namespace s2builderutil {
|
|
26
|
+
|
|
27
|
+
// An S2Shape representing the edges in an S2Builder::Graph.
|
|
28
|
+
class GraphShape final : public S2Shape {
|
|
29
|
+
public:
|
|
30
|
+
using Graph = S2Builder::Graph;
|
|
31
|
+
explicit GraphShape(const Graph* g) : g_(*g) {}
|
|
32
|
+
int num_edges() const override { return g_.num_edges(); }
|
|
33
|
+
Edge edge(int e) const override {
|
|
34
|
+
Graph::Edge g_edge = g_.edge(e);
|
|
35
|
+
return Edge(g_.vertex(g_edge.first), g_.vertex(g_edge.second));
|
|
36
|
+
}
|
|
37
|
+
int dimension() const override { return 1; }
|
|
38
|
+
ReferencePoint GetReferencePoint() const override {
|
|
39
|
+
return ReferencePoint::Contained(false);
|
|
40
|
+
}
|
|
41
|
+
int num_chains() const override { return g_.num_edges(); }
|
|
42
|
+
Chain chain(int i) const override { return Chain(i, 1); }
|
|
43
|
+
Edge chain_edge(int i, int j) const override {
|
|
44
|
+
S2_DCHECK_EQ(j, 0);
|
|
45
|
+
return edge(i);
|
|
46
|
+
}
|
|
47
|
+
ChainPosition chain_position(int e) const override {
|
|
48
|
+
return ChainPosition(e, 0);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
private:
|
|
52
|
+
const Graph& g_;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
} // namespace s2builderutil
|
|
56
|
+
|
|
57
|
+
#endif // S2_S2BUILDERUTIL_GRAPH_SHAPE_H_
|
|
@@ -0,0 +1,212 @@
|
|
|
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/s2builderutil_lax_polygon_layer.h"
|
|
19
|
+
|
|
20
|
+
#include <algorithm>
|
|
21
|
+
#include <memory>
|
|
22
|
+
#include "s2/third_party/absl/memory/memory.h"
|
|
23
|
+
#include "s2/s2builderutil_find_polygon_degeneracies.h"
|
|
24
|
+
#include "s2/s2debug.h"
|
|
25
|
+
|
|
26
|
+
using std::vector;
|
|
27
|
+
|
|
28
|
+
using EdgeType = S2Builder::EdgeType;
|
|
29
|
+
using Graph = S2Builder::Graph;
|
|
30
|
+
using GraphOptions = S2Builder::GraphOptions;
|
|
31
|
+
using Label = S2Builder::Label;
|
|
32
|
+
|
|
33
|
+
using DegenerateEdges = GraphOptions::DegenerateEdges;
|
|
34
|
+
using DuplicateEdges = GraphOptions::DuplicateEdges;
|
|
35
|
+
using SiblingPairs = GraphOptions::SiblingPairs;
|
|
36
|
+
|
|
37
|
+
using Edge = Graph::Edge;
|
|
38
|
+
using EdgeId = Graph::EdgeId;
|
|
39
|
+
using InputEdgeIdSetId = Graph::InputEdgeIdSetId;
|
|
40
|
+
using LoopType = Graph::LoopType;
|
|
41
|
+
|
|
42
|
+
namespace s2builderutil {
|
|
43
|
+
|
|
44
|
+
using DegenerateBoundaries = LaxPolygonLayer::Options::DegenerateBoundaries;
|
|
45
|
+
|
|
46
|
+
LaxPolygonLayer::LaxPolygonLayer(S2LaxPolygonShape* polygon,
|
|
47
|
+
const Options& options) {
|
|
48
|
+
Init(polygon, nullptr, nullptr, options);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
LaxPolygonLayer::LaxPolygonLayer(
|
|
52
|
+
S2LaxPolygonShape* polygon, LabelSetIds* label_set_ids,
|
|
53
|
+
IdSetLexicon* label_set_lexicon, const Options& options) {
|
|
54
|
+
Init(polygon, label_set_ids, label_set_lexicon, options);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
void LaxPolygonLayer::Init(
|
|
58
|
+
S2LaxPolygonShape* polygon, LabelSetIds* label_set_ids,
|
|
59
|
+
IdSetLexicon* label_set_lexicon, const Options& options) {
|
|
60
|
+
S2_DCHECK_EQ(label_set_ids == nullptr, label_set_lexicon == nullptr);
|
|
61
|
+
polygon_ = polygon;
|
|
62
|
+
label_set_ids_ = label_set_ids;
|
|
63
|
+
label_set_lexicon_ = label_set_lexicon;
|
|
64
|
+
options_ = options;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
GraphOptions LaxPolygonLayer::graph_options() const {
|
|
68
|
+
if (options_.degenerate_boundaries() == DegenerateBoundaries::DISCARD) {
|
|
69
|
+
// There should not be any duplicate edges, but if there are then we keep
|
|
70
|
+
// them since this yields more comprehensible error messages.
|
|
71
|
+
return GraphOptions(options_.edge_type(), DegenerateEdges::DISCARD,
|
|
72
|
+
DuplicateEdges::KEEP, SiblingPairs::DISCARD);
|
|
73
|
+
} else {
|
|
74
|
+
// Keep at most one copy of each sibling pair and each isolated vertex.
|
|
75
|
+
// We need DuplicateEdges::MERGE because DegenerateEdges::DISCARD_EXCESS
|
|
76
|
+
// can still keep multiple copies (it only discards degenerate edges that
|
|
77
|
+
// are connected to non-degenerate edges).
|
|
78
|
+
return GraphOptions(options_.edge_type(), DegenerateEdges::DISCARD_EXCESS,
|
|
79
|
+
DuplicateEdges::MERGE, SiblingPairs::DISCARD_EXCESS);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
void LaxPolygonLayer::AppendPolygonLoops(
|
|
84
|
+
const Graph& g, const vector<Graph::EdgeLoop>& edge_loops,
|
|
85
|
+
vector<vector<S2Point>>* loops) const {
|
|
86
|
+
for (const auto& edge_loop : edge_loops) {
|
|
87
|
+
vector<S2Point> vertices;
|
|
88
|
+
vertices.reserve(edge_loop.size());
|
|
89
|
+
for (auto edge_id : edge_loop) {
|
|
90
|
+
vertices.push_back(g.vertex(g.edge(edge_id).first));
|
|
91
|
+
}
|
|
92
|
+
loops->push_back(std::move(vertices));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
void LaxPolygonLayer::AppendEdgeLabels(
|
|
97
|
+
const Graph& g,
|
|
98
|
+
const vector<Graph::EdgeLoop>& edge_loops) {
|
|
99
|
+
if (!label_set_ids_) return;
|
|
100
|
+
|
|
101
|
+
vector<Label> labels; // Temporary storage for labels.
|
|
102
|
+
Graph::LabelFetcher fetcher(g, options_.edge_type());
|
|
103
|
+
for (const auto& edge_loop : edge_loops) {
|
|
104
|
+
vector<LabelSetId> loop_label_set_ids;
|
|
105
|
+
loop_label_set_ids.reserve(edge_loop.size());
|
|
106
|
+
for (auto edge_id : edge_loop) {
|
|
107
|
+
fetcher.Fetch(edge_id, &labels);
|
|
108
|
+
loop_label_set_ids.push_back(label_set_lexicon_->Add(labels));
|
|
109
|
+
}
|
|
110
|
+
label_set_ids_->push_back(std::move(loop_label_set_ids));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Returns all edges of "g" except for those identified by "edges_to_discard".
|
|
115
|
+
static void DiscardEdges(const Graph& g, const vector<EdgeId>& edges_to_discard,
|
|
116
|
+
vector<Edge>* new_edges,
|
|
117
|
+
vector<InputEdgeIdSetId>* new_input_edge_id_set_ids) {
|
|
118
|
+
S2_DCHECK(std::is_sorted(edges_to_discard.begin(), edges_to_discard.end()));
|
|
119
|
+
new_edges->clear();
|
|
120
|
+
new_input_edge_id_set_ids->clear();
|
|
121
|
+
new_edges->reserve(g.num_edges());
|
|
122
|
+
new_input_edge_id_set_ids->reserve(g.num_edges());
|
|
123
|
+
auto it = edges_to_discard.begin();
|
|
124
|
+
for (int e = 0; e < g.num_edges(); ++e) {
|
|
125
|
+
if (it != edges_to_discard.end() && e == *it) {
|
|
126
|
+
++it;
|
|
127
|
+
} else {
|
|
128
|
+
new_edges->push_back(g.edge(e));
|
|
129
|
+
new_input_edge_id_set_ids->push_back(g.input_edge_id_set_id(e));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
S2_DCHECK(it == edges_to_discard.end());
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
static void MaybeAddFullLoop(
|
|
136
|
+
const Graph& g, vector<vector<S2Point>>* loops, S2Error* error) {
|
|
137
|
+
if (g.IsFullPolygon(error)) {
|
|
138
|
+
loops->push_back({}); // Full loop.
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
void LaxPolygonLayer::BuildDirected(Graph g, S2Error* error) {
|
|
142
|
+
// Some cases are implemented by constructing a new graph with certain
|
|
143
|
+
// degenerate edges removed (overwriting "g"). "new_edges" is where the
|
|
144
|
+
// edges for the new graph are stored.
|
|
145
|
+
vector<Edge> new_edges;
|
|
146
|
+
vector<InputEdgeIdSetId> new_input_edge_id_set_ids;
|
|
147
|
+
vector<vector<S2Point>> loops;
|
|
148
|
+
auto degenerate_boundaries = options_.degenerate_boundaries();
|
|
149
|
+
if (degenerate_boundaries == DegenerateBoundaries::DISCARD) {
|
|
150
|
+
// This is the easiest case, since there are no degeneracies.
|
|
151
|
+
if (g.num_edges() == 0) MaybeAddFullLoop(g, &loops, error);
|
|
152
|
+
} else if (degenerate_boundaries == DegenerateBoundaries::KEEP) {
|
|
153
|
+
// S2LaxPolygonShape doesn't need to distinguish degenerate shells from
|
|
154
|
+
// holes except when the entire graph is degenerate, in which case we need
|
|
155
|
+
// to decide whether it represents an empty polygons possibly with
|
|
156
|
+
// degenerate shells, or a full polygon possibly with degenerate holes.
|
|
157
|
+
if (s2builderutil::IsFullyDegenerate(g)) {
|
|
158
|
+
MaybeAddFullLoop(g, &loops, error);
|
|
159
|
+
}
|
|
160
|
+
} else {
|
|
161
|
+
// For DISCARD_SHELLS and DISCARD_HOLES we first determine whether any
|
|
162
|
+
// degenerate loops of the given type exist, and if so we construct a new
|
|
163
|
+
// graph with those edges removed (overwriting "g").
|
|
164
|
+
bool discard_holes =
|
|
165
|
+
(degenerate_boundaries == DegenerateBoundaries::DISCARD_HOLES);
|
|
166
|
+
auto degeneracies = s2builderutil::FindPolygonDegeneracies(g, error);
|
|
167
|
+
if (!error->ok()) return;
|
|
168
|
+
if (degeneracies.size() == g.num_edges()) {
|
|
169
|
+
if (degeneracies.empty()) {
|
|
170
|
+
MaybeAddFullLoop(g, &loops, error);
|
|
171
|
+
} else if (degeneracies[0].is_hole) {
|
|
172
|
+
loops.push_back({}); // Full loop.
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
vector<EdgeId> edges_to_discard;
|
|
176
|
+
for (auto degeneracy : degeneracies) {
|
|
177
|
+
if (degeneracy.is_hole == discard_holes) {
|
|
178
|
+
edges_to_discard.push_back(degeneracy.edge_id);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
if (!edges_to_discard.empty()) {
|
|
182
|
+
// Construct a new graph that discards the unwanted edges.
|
|
183
|
+
std::sort(edges_to_discard.begin(), edges_to_discard.end());
|
|
184
|
+
DiscardEdges(g, edges_to_discard, &new_edges, &new_input_edge_id_set_ids);
|
|
185
|
+
g = Graph(g.options(), &g.vertices(),
|
|
186
|
+
&new_edges, &new_input_edge_id_set_ids,
|
|
187
|
+
&g.input_edge_id_set_lexicon(), &g.label_set_ids(),
|
|
188
|
+
&g.label_set_lexicon(), g.is_full_polygon_predicate());
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
vector<Graph::EdgeLoop> edge_loops;
|
|
192
|
+
if (!g.GetDirectedLoops(LoopType::CIRCUIT, &edge_loops, error)) {
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
AppendPolygonLoops(g, edge_loops, &loops);
|
|
196
|
+
AppendEdgeLabels(g, edge_loops);
|
|
197
|
+
vector<Graph::EdgeLoop>().swap(edge_loops); // Release memory
|
|
198
|
+
vector<Edge>().swap(new_edges);
|
|
199
|
+
vector<InputEdgeIdSetId>().swap(new_input_edge_id_set_ids);
|
|
200
|
+
polygon_->Init(loops);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
void LaxPolygonLayer::Build(const Graph& g, S2Error* error) {
|
|
204
|
+
if (label_set_ids_) label_set_ids_->clear();
|
|
205
|
+
if (g.options().edge_type() == EdgeType::DIRECTED) {
|
|
206
|
+
BuildDirected(g, error);
|
|
207
|
+
} else {
|
|
208
|
+
error->Init(S2Error::UNIMPLEMENTED, "Undirected edges not supported yet");
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
} // namespace s2builderutil
|