@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,72 @@
|
|
|
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
|
+
#ifndef S2_S2SHAPEUTIL_EDGE_ITERATOR_H_
|
|
17
|
+
#define S2_S2SHAPEUTIL_EDGE_ITERATOR_H_
|
|
18
|
+
|
|
19
|
+
#include "s2/s2shape_index.h"
|
|
20
|
+
#include "s2/s2shapeutil_shape_edge_id.h"
|
|
21
|
+
|
|
22
|
+
namespace s2shapeutil {
|
|
23
|
+
|
|
24
|
+
// An iterator that advances through all edges in an S2ShapeIndex.
|
|
25
|
+
//
|
|
26
|
+
// Example usage:
|
|
27
|
+
//
|
|
28
|
+
// for (EdgeIterator it(index); !it.Done(); it.Next()) {
|
|
29
|
+
// auto edge = it.edge();
|
|
30
|
+
// //...
|
|
31
|
+
// }
|
|
32
|
+
class EdgeIterator {
|
|
33
|
+
public:
|
|
34
|
+
explicit EdgeIterator(const S2ShapeIndex* index);
|
|
35
|
+
|
|
36
|
+
// Returns the current shape id.
|
|
37
|
+
int32 shape_id() const { return shape_id_; }
|
|
38
|
+
|
|
39
|
+
// Returns the current edge id.
|
|
40
|
+
int32 edge_id() const { return edge_id_; }
|
|
41
|
+
|
|
42
|
+
// Returns the current (shape_id, edge_id).
|
|
43
|
+
ShapeEdgeId shape_edge_id() const { return ShapeEdgeId(shape_id_, edge_id_); }
|
|
44
|
+
|
|
45
|
+
// Returns the current edge.
|
|
46
|
+
S2Shape::Edge edge() const;
|
|
47
|
+
|
|
48
|
+
// Returns true if there are no more edges in the index.
|
|
49
|
+
bool Done() const { return shape_id() >= index_->num_shape_ids(); }
|
|
50
|
+
|
|
51
|
+
// Advances to the next edge.
|
|
52
|
+
void Next();
|
|
53
|
+
|
|
54
|
+
bool operator==(const EdgeIterator& other) const {
|
|
55
|
+
return index_ == other.index_ && shape_id_ == other.shape_id_ &&
|
|
56
|
+
edge_id_ == other.edge_id_;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
bool operator!=(const EdgeIterator& other) const { return !(*this == other); }
|
|
60
|
+
|
|
61
|
+
string DebugString() const;
|
|
62
|
+
|
|
63
|
+
private:
|
|
64
|
+
const S2ShapeIndex* index_;
|
|
65
|
+
int32 shape_id_;
|
|
66
|
+
int32 num_edges_;
|
|
67
|
+
int32 edge_id_;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
} // namespace s2shapeutil
|
|
71
|
+
|
|
72
|
+
#endif // S2_S2SHAPEUTIL_EDGE_ITERATOR_H_
|
|
@@ -0,0 +1,116 @@
|
|
|
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 <vector>
|
|
19
|
+
|
|
20
|
+
#include <gtest/gtest.h>
|
|
21
|
+
#include "s2/mutable_s2shape_index.h"
|
|
22
|
+
#include "s2/s2text_format.h"
|
|
23
|
+
|
|
24
|
+
namespace s2shapeutil {
|
|
25
|
+
|
|
26
|
+
namespace {
|
|
27
|
+
|
|
28
|
+
// Returns the full list of edges in g.
|
|
29
|
+
// The edges are collected from points, lines, and polygons in that order.
|
|
30
|
+
std::vector<S2Shape::Edge> GetEdges(const S2ShapeIndex* index) {
|
|
31
|
+
std::vector<S2Shape::Edge> result;
|
|
32
|
+
for (S2Shape* shape : *index) {
|
|
33
|
+
if (shape == nullptr) continue;
|
|
34
|
+
for (int j = 0; j < shape->num_edges(); ++j) {
|
|
35
|
+
result.push_back(shape->edge(j));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Verifies that the edges produced by an EdgeIterator matches GetEdges.
|
|
42
|
+
void Verify(const S2ShapeIndex* index) {
|
|
43
|
+
std::vector<S2Shape::Edge> expected = GetEdges(index);
|
|
44
|
+
|
|
45
|
+
int i = 0;
|
|
46
|
+
for (EdgeIterator it(index); !it.Done(); it.Next(), ++i) {
|
|
47
|
+
ASSERT_TRUE(i < expected.size());
|
|
48
|
+
EXPECT_EQ(expected[i], it.edge());
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
} // namespace
|
|
53
|
+
|
|
54
|
+
TEST(S2ShapeutilEdgeIteratorTest, Empty) {
|
|
55
|
+
auto index = s2textformat::MakeIndex("##");
|
|
56
|
+
Verify(index.get());
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
TEST(S2ShapeutilEdgeIteratorTest, Points) {
|
|
60
|
+
auto index = s2textformat::MakeIndex("0:0|1:1##");
|
|
61
|
+
Verify(index.get());
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
TEST(S2ShapeutilEdgeIteratorTest, Lines) {
|
|
65
|
+
auto index = s2textformat::MakeIndex("#0:0,10:10|5:5,5:10|1:2,2:1#");
|
|
66
|
+
Verify(index.get());
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
TEST(S2ShapeutilEdgeIteratorTest, Polygons) {
|
|
70
|
+
auto index =
|
|
71
|
+
s2textformat::MakeIndex("##10:10,10:0,0:0|-10:-10,-10:0,0:0,0:-10");
|
|
72
|
+
Verify(index.get());
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
TEST(S2ShapeutilEdgeIteratorTest, Collection) {
|
|
76
|
+
auto index = s2textformat::MakeIndex(
|
|
77
|
+
"1:1|7:2#1:1,2:2,3:3|2:2,1:7#"
|
|
78
|
+
"10:10,10:0,0:0;20:20,20:10,10:10|15:15,15:0,0:0");
|
|
79
|
+
Verify(index.get());
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
TEST(S2ShapeutilEdgeIteratorTest, Remove) {
|
|
83
|
+
auto index = s2textformat::MakeIndex(
|
|
84
|
+
"1:1|7:2#1:1,2:2,3:3|2:2,1:7#"
|
|
85
|
+
"10:10,10:0,0:0;20:20,20:10,10:10|15:15,15:0,0:0");
|
|
86
|
+
index->Release(0);
|
|
87
|
+
|
|
88
|
+
Verify(index.get());
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
TEST(S2ShapeutilEdgeIteratorTest, AssignmentAndEquality) {
|
|
92
|
+
auto index1 = s2textformat::MakeIndex(
|
|
93
|
+
"1:1|7:2#1:1,2:2,3:3|2:2,1:7#"
|
|
94
|
+
"10:10,10:0,0:0;20:20,20:10,10:10|15:15,15:0,0:0");
|
|
95
|
+
|
|
96
|
+
auto index2 = s2textformat::MakeIndex(
|
|
97
|
+
"1:1|7:2#1:1,2:2,3:3|2:2,1:7#"
|
|
98
|
+
"10:10,10:0,0:0;20:20,20:10,10:10|15:15,15:0,0:0");
|
|
99
|
+
|
|
100
|
+
EdgeIterator it1(index1.get());
|
|
101
|
+
EdgeIterator it2(index2.get());
|
|
102
|
+
|
|
103
|
+
// Different indices.
|
|
104
|
+
EXPECT_TRUE(it1 != it2);
|
|
105
|
+
|
|
106
|
+
it1 = it2;
|
|
107
|
+
EXPECT_EQ(it1, it2);
|
|
108
|
+
|
|
109
|
+
it1.Next();
|
|
110
|
+
EXPECT_TRUE(it1 != it2);
|
|
111
|
+
|
|
112
|
+
it2.Next();
|
|
113
|
+
EXPECT_EQ(it1, it2);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
} // namespace s2shapeutil
|
|
@@ -0,0 +1,107 @@
|
|
|
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_get_reference_point.h"
|
|
19
|
+
|
|
20
|
+
#include <algorithm>
|
|
21
|
+
|
|
22
|
+
#include "s2/base/logging.h"
|
|
23
|
+
#include "s2/s2contains_vertex_query.h"
|
|
24
|
+
|
|
25
|
+
using std::vector;
|
|
26
|
+
using ReferencePoint = S2Shape::ReferencePoint;
|
|
27
|
+
|
|
28
|
+
namespace s2shapeutil {
|
|
29
|
+
|
|
30
|
+
// This is a helper function for GetReferencePoint() below.
|
|
31
|
+
//
|
|
32
|
+
// If the given vertex "vtest" is unbalanced (see definition below), sets
|
|
33
|
+
// "result" to a ReferencePoint indicating whther "vtest" is contained and
|
|
34
|
+
// returns true. Otherwise returns false.
|
|
35
|
+
static bool GetReferencePointAtVertex(
|
|
36
|
+
const S2Shape& shape, const S2Point& vtest, ReferencePoint* result) {
|
|
37
|
+
// Let P be an unbalanced vertex. Vertex P is defined to be inside the
|
|
38
|
+
// region if the region contains a particular direction vector starting from
|
|
39
|
+
// P, namely the direction S2::Ortho(P). This can be calculated using
|
|
40
|
+
// S2ContainsVertexQuery.
|
|
41
|
+
S2ContainsVertexQuery contains_query(vtest);
|
|
42
|
+
int n = shape.num_edges();
|
|
43
|
+
for (int e = 0; e < n; ++e) {
|
|
44
|
+
auto edge = shape.edge(e);
|
|
45
|
+
if (edge.v0 == vtest) contains_query.AddEdge(edge.v1, 1);
|
|
46
|
+
if (edge.v1 == vtest) contains_query.AddEdge(edge.v0, -1);
|
|
47
|
+
}
|
|
48
|
+
int contains_sign = contains_query.ContainsSign();
|
|
49
|
+
if (contains_sign == 0) {
|
|
50
|
+
return false; // There are no unmatched edges incident to this vertex.
|
|
51
|
+
}
|
|
52
|
+
result->point = vtest;
|
|
53
|
+
result->contained = contains_sign > 0;
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// See documentation in header file.
|
|
58
|
+
S2Shape::ReferencePoint GetReferencePoint(const S2Shape& shape) {
|
|
59
|
+
S2_DCHECK_EQ(shape.dimension(), 2);
|
|
60
|
+
if (shape.num_edges() == 0) {
|
|
61
|
+
// A shape with no edges is defined to be full if and only if it
|
|
62
|
+
// contains at least one chain.
|
|
63
|
+
return ReferencePoint::Contained(shape.num_chains() > 0);
|
|
64
|
+
}
|
|
65
|
+
// Define a "matched" edge as one that can be paired with a corresponding
|
|
66
|
+
// reversed edge. Define a vertex as "balanced" if all of its edges are
|
|
67
|
+
// matched. In order to determine containment, we must find an unbalanced
|
|
68
|
+
// vertex. Often every vertex is unbalanced, so we start by trying an
|
|
69
|
+
// arbitrary vertex.
|
|
70
|
+
auto edge = shape.edge(0);
|
|
71
|
+
ReferencePoint result;
|
|
72
|
+
if (GetReferencePointAtVertex(shape, edge.v0, &result)) {
|
|
73
|
+
return result;
|
|
74
|
+
}
|
|
75
|
+
// That didn't work, so now we do some extra work to find an unbalanced
|
|
76
|
+
// vertex (if any). Essentially we gather a list of edges and a list of
|
|
77
|
+
// reversed edges, and then sort them. The first edge that appears in one
|
|
78
|
+
// list but not the other is guaranteed to be unmatched.
|
|
79
|
+
int n = shape.num_edges();
|
|
80
|
+
vector<S2Shape::Edge> edges(n), rev_edges(n);
|
|
81
|
+
for (int i = 0; i < n; ++i) {
|
|
82
|
+
auto edge = shape.edge(i);
|
|
83
|
+
edges[i] = edge;
|
|
84
|
+
rev_edges[i] = S2Shape::Edge(edge.v1, edge.v0);
|
|
85
|
+
}
|
|
86
|
+
std::sort(edges.begin(), edges.end());
|
|
87
|
+
std::sort(rev_edges.begin(), rev_edges.end());
|
|
88
|
+
for (int i = 0; i < n; ++i) {
|
|
89
|
+
if (edges[i] < rev_edges[i]) { // edges[i] is unmatched
|
|
90
|
+
S2_CHECK(GetReferencePointAtVertex(shape, edges[i].v0, &result));
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
93
|
+
if (rev_edges[i] < edges[i]) { // rev_edges[i] is unmatched
|
|
94
|
+
S2_CHECK(GetReferencePointAtVertex(shape, rev_edges[i].v0, &result));
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// All vertices are balanced, so this polygon is either empty or full except
|
|
99
|
+
// for degeneracies. By convention it is defined to be full if it contains
|
|
100
|
+
// any chain with no edges.
|
|
101
|
+
for (int i = 0; i < shape.num_chains(); ++i) {
|
|
102
|
+
if (shape.chain(i).length == 0) return ReferencePoint::Contained(true);
|
|
103
|
+
}
|
|
104
|
+
return ReferencePoint::Contained(false);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
} // namespace s2shapeutil
|
|
@@ -0,0 +1,48 @@
|
|
|
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_GET_REFERENCE_POINT_H_
|
|
19
|
+
#define S2_S2SHAPEUTIL_GET_REFERENCE_POINT_H_
|
|
20
|
+
|
|
21
|
+
#include "s2/s2shape_index.h"
|
|
22
|
+
|
|
23
|
+
namespace s2shapeutil {
|
|
24
|
+
|
|
25
|
+
// This is a helper function for implementing S2Shape::GetReferencePoint().
|
|
26
|
+
//
|
|
27
|
+
// Given a shape consisting of closed polygonal loops, the interior of the
|
|
28
|
+
// shape is defined as the region to the left of all edges (which must be
|
|
29
|
+
// oriented consistently). This function then chooses an arbitrary point and
|
|
30
|
+
// returns true if that point is contained by the shape.
|
|
31
|
+
//
|
|
32
|
+
// Unlike S2Loop and S2Polygon, this method allows duplicate vertices and
|
|
33
|
+
// edges, which requires some extra care with definitions. The rule that we
|
|
34
|
+
// apply is that an edge and its reverse edge "cancel" each other: the result
|
|
35
|
+
// is the same as if that edge pair were not present. Therefore shapes that
|
|
36
|
+
// consist only of degenerate loop(s) are either empty or full; by convention,
|
|
37
|
+
// the shape is considered full if and only if it contains an empty loop (see
|
|
38
|
+
// S2LaxPolygonShape for details).
|
|
39
|
+
//
|
|
40
|
+
// Determining whether a loop on the sphere contains a point is harder than
|
|
41
|
+
// the corresponding problem in 2D plane geometry. It cannot be implemented
|
|
42
|
+
// just by counting edge crossings because there is no such thing as a "point
|
|
43
|
+
// at infinity" that is guaranteed to be outside the loop.
|
|
44
|
+
S2Shape::ReferencePoint GetReferencePoint(const S2Shape& shape);
|
|
45
|
+
|
|
46
|
+
} // namespace s2shapeutil
|
|
47
|
+
|
|
48
|
+
#endif // S2_S2SHAPEUTIL_GET_REFERENCE_POINT_H_
|
|
@@ -0,0 +1,104 @@
|
|
|
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_get_reference_point.h"
|
|
19
|
+
|
|
20
|
+
#include <vector>
|
|
21
|
+
|
|
22
|
+
#include <gtest/gtest.h>
|
|
23
|
+
#include "s2/s2lax_polygon_shape.h"
|
|
24
|
+
#include "s2/s2polygon.h"
|
|
25
|
+
#include "s2/s2shapeutil_contains_brute_force.h"
|
|
26
|
+
#include "s2/s2testing.h"
|
|
27
|
+
#include "s2/s2text_format.h"
|
|
28
|
+
|
|
29
|
+
using std::vector;
|
|
30
|
+
|
|
31
|
+
namespace s2shapeutil {
|
|
32
|
+
|
|
33
|
+
TEST(GetReferencePoint, EmptyPolygon) {
|
|
34
|
+
S2LaxPolygonShape shape((S2Polygon()));
|
|
35
|
+
EXPECT_FALSE(shape.GetReferencePoint().contained);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
TEST(GetReferencePoint, FullPolygon) {
|
|
39
|
+
S2LaxPolygonShape shape(S2Polygon(s2textformat::MakeLoopOrDie("full")));
|
|
40
|
+
EXPECT_TRUE(shape.GetReferencePoint().contained);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
TEST(GetReferencePoint, DegenerateLoops) {
|
|
44
|
+
vector<S2LaxPolygonShape::Loop> loops = {
|
|
45
|
+
s2textformat::ParsePoints("1:1, 1:2, 2:2, 1:2, 1:3, 1:2, 1:1"),
|
|
46
|
+
s2textformat::ParsePoints("0:0, 0:3, 0:6, 0:9, 0:6, 0:3, 0:0"),
|
|
47
|
+
s2textformat::ParsePoints("5:5, 6:6")
|
|
48
|
+
};
|
|
49
|
+
S2LaxPolygonShape shape(loops);
|
|
50
|
+
EXPECT_FALSE(shape.GetReferencePoint().contained);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
TEST(GetReferencePoint, InvertedLoops) {
|
|
54
|
+
vector<S2LaxPolygonShape::Loop> loops = {
|
|
55
|
+
s2textformat::ParsePoints("1:2, 1:1, 2:2"),
|
|
56
|
+
s2textformat::ParsePoints("3:4, 3:3, 4:4")
|
|
57
|
+
};
|
|
58
|
+
S2LaxPolygonShape shape(loops);
|
|
59
|
+
EXPECT_TRUE(s2shapeutil::ContainsBruteForce(shape, S2::Origin()));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
TEST(GetReferencePoint, PartiallyDegenerateLoops) {
|
|
63
|
+
for (int iter = 0; iter < 100; ++iter) {
|
|
64
|
+
// First we construct a long convoluted edge chain that follows the
|
|
65
|
+
// S2CellId Hilbert curve. At some random point along the curve, we
|
|
66
|
+
// insert a small triangular loop.
|
|
67
|
+
vector<S2LaxPolygonShape::Loop> loops(1);
|
|
68
|
+
S2LaxPolygonShape::Loop* loop = &loops[0];
|
|
69
|
+
const int num_vertices = 100;
|
|
70
|
+
S2CellId start = S2Testing::GetRandomCellId(S2CellId::kMaxLevel - 1);
|
|
71
|
+
S2CellId end = start.advance_wrap(num_vertices);
|
|
72
|
+
S2CellId loop_cellid = start.advance_wrap(
|
|
73
|
+
S2Testing::rnd.Uniform(num_vertices - 2) + 1);
|
|
74
|
+
vector<S2Point> triangle;
|
|
75
|
+
for (S2CellId cellid = start; cellid != end; cellid = cellid.next_wrap()) {
|
|
76
|
+
if (cellid == loop_cellid) {
|
|
77
|
+
// Insert a small triangular loop. We save the loop so that we can
|
|
78
|
+
// test whether it contains the origin later.
|
|
79
|
+
triangle.push_back(cellid.child(0).ToPoint());
|
|
80
|
+
triangle.push_back(cellid.child(1).ToPoint());
|
|
81
|
+
triangle.push_back(cellid.child(2).ToPoint());
|
|
82
|
+
loop->insert(loop->end(), triangle.begin(), triangle.end());
|
|
83
|
+
loop->push_back(cellid.child(0).ToPoint());
|
|
84
|
+
} else {
|
|
85
|
+
loop->push_back(cellid.ToPoint());
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Now we retrace our steps, except that we skip the three edges that form
|
|
89
|
+
// the triangular loop above.
|
|
90
|
+
for (S2CellId cellid = end; cellid != start; cellid = cellid.prev_wrap()) {
|
|
91
|
+
if (cellid == loop_cellid) {
|
|
92
|
+
loop->push_back(cellid.child(0).ToPoint());
|
|
93
|
+
} else {
|
|
94
|
+
loop->push_back(cellid.ToPoint());
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
S2LaxPolygonShape shape(loops);
|
|
98
|
+
S2Loop triangle_loop(triangle);
|
|
99
|
+
auto ref = shape.GetReferencePoint();
|
|
100
|
+
EXPECT_EQ(triangle_loop.Contains(ref.point), ref.contained);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
} // namespace s2shapeutil
|
|
@@ -0,0 +1,58 @@
|
|
|
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_range_iterator.h"
|
|
19
|
+
|
|
20
|
+
namespace s2shapeutil {
|
|
21
|
+
|
|
22
|
+
RangeIterator::RangeIterator(const S2ShapeIndex& index)
|
|
23
|
+
: it_(&index, S2ShapeIndex::BEGIN) {
|
|
24
|
+
Refresh();
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
void RangeIterator::Next() {
|
|
28
|
+
it_.Next();
|
|
29
|
+
Refresh();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
void RangeIterator::SeekTo(const RangeIterator& target) {
|
|
33
|
+
it_.Seek(target.range_min());
|
|
34
|
+
// If the current cell does not overlap "target", it is possible that the
|
|
35
|
+
// previous cell is the one we are looking for. This can only happen when
|
|
36
|
+
// the previous cell contains "target" but has a smaller S2CellId.
|
|
37
|
+
if (it_.done() || it_.id().range_min() > target.range_max()) {
|
|
38
|
+
if (it_.Prev() && it_.id().range_max() < target.id()) it_.Next();
|
|
39
|
+
}
|
|
40
|
+
Refresh();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
void RangeIterator::SeekBeyond(const RangeIterator& target) {
|
|
44
|
+
it_.Seek(target.range_max().next());
|
|
45
|
+
if (!it_.done() && it_.id().range_min() <= target.range_max()) {
|
|
46
|
+
it_.Next();
|
|
47
|
+
}
|
|
48
|
+
Refresh();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// This method is inline, but is only called by non-inline methods defined in
|
|
52
|
+
// this file. Putting the definition here enforces this requirement.
|
|
53
|
+
inline void RangeIterator::Refresh() {
|
|
54
|
+
range_min_ = id().range_min();
|
|
55
|
+
range_max_ = id().range_max();
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
} // namespace s2shapeutil
|
|
@@ -0,0 +1,65 @@
|
|
|
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_RANGE_ITERATOR_H_
|
|
19
|
+
#define S2_S2SHAPEUTIL_RANGE_ITERATOR_H_
|
|
20
|
+
|
|
21
|
+
#include "s2/s2cell_id.h"
|
|
22
|
+
#include "s2/s2shape_index.h"
|
|
23
|
+
|
|
24
|
+
class S2Loop;
|
|
25
|
+
class S2Error;
|
|
26
|
+
|
|
27
|
+
namespace s2shapeutil {
|
|
28
|
+
|
|
29
|
+
// RangeIterator is a wrapper over S2ShapeIndex::Iterator with extra methods
|
|
30
|
+
// that are useful for merging the contents of two or more S2ShapeIndexes.
|
|
31
|
+
class RangeIterator {
|
|
32
|
+
public:
|
|
33
|
+
// Construct a new RangeIterator positioned at the first cell of the index.
|
|
34
|
+
explicit RangeIterator(const S2ShapeIndex& index);
|
|
35
|
+
|
|
36
|
+
// The current S2CellId and cell contents.
|
|
37
|
+
S2CellId id() const { return it_.id(); }
|
|
38
|
+
const S2ShapeIndexCell& cell() const { return it_.cell(); }
|
|
39
|
+
|
|
40
|
+
// The min and max leaf cell ids covered by the current cell. If done() is
|
|
41
|
+
// true, these methods return a value larger than any valid cell id.
|
|
42
|
+
S2CellId range_min() const { return range_min_; }
|
|
43
|
+
S2CellId range_max() const { return range_max_; }
|
|
44
|
+
|
|
45
|
+
void Next();
|
|
46
|
+
bool done() { return it_.done(); }
|
|
47
|
+
|
|
48
|
+
// Position the iterator at the first cell that overlaps or follows
|
|
49
|
+
// "target", i.e. such that range_max() >= target.range_min().
|
|
50
|
+
void SeekTo(const RangeIterator& target);
|
|
51
|
+
|
|
52
|
+
// Position the iterator at the first cell that follows "target", i.e. the
|
|
53
|
+
// first cell such that range_min() > target.range_max().
|
|
54
|
+
void SeekBeyond(const RangeIterator& target);
|
|
55
|
+
|
|
56
|
+
private:
|
|
57
|
+
// Updates internal state after the iterator has been repositioned.
|
|
58
|
+
void Refresh();
|
|
59
|
+
S2ShapeIndex::Iterator it_;
|
|
60
|
+
S2CellId range_min_, range_max_;
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
} // namespace s2shapeutil
|
|
64
|
+
|
|
65
|
+
#endif // S2_S2SHAPEUTIL_RANGE_ITERATOR_H_
|
|
@@ -0,0 +1,61 @@
|
|
|
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_range_iterator.h"
|
|
19
|
+
|
|
20
|
+
#include <gtest/gtest.h>
|
|
21
|
+
#include "s2/mutable_s2shape_index.h"
|
|
22
|
+
#include "s2/s2text_format.h"
|
|
23
|
+
|
|
24
|
+
namespace s2shapeutil {
|
|
25
|
+
|
|
26
|
+
TEST(RangeIterator, Next) {
|
|
27
|
+
// Create an index with one point each on S2CellId faces 0, 1, and 2.
|
|
28
|
+
auto index = s2textformat::MakeIndex("0:0 | 0:90 | 90:0 # #");
|
|
29
|
+
RangeIterator it(*index);
|
|
30
|
+
EXPECT_EQ(0, it.id().face());
|
|
31
|
+
it.Next();
|
|
32
|
+
EXPECT_EQ(1, it.id().face());
|
|
33
|
+
it.Next();
|
|
34
|
+
EXPECT_EQ(2, it.id().face());
|
|
35
|
+
it.Next();
|
|
36
|
+
EXPECT_EQ(S2CellId::Sentinel(), it.id());
|
|
37
|
+
EXPECT_TRUE(it.done());
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
TEST(RangeIterator, EmptyIndex) {
|
|
41
|
+
auto empty = s2textformat::MakeIndex("# #");
|
|
42
|
+
auto non_empty = s2textformat::MakeIndex("0:0 # #");
|
|
43
|
+
RangeIterator empty_it(*empty);
|
|
44
|
+
RangeIterator non_empty_it(*non_empty);
|
|
45
|
+
EXPECT_FALSE(non_empty_it.done());
|
|
46
|
+
EXPECT_TRUE(empty_it.done());
|
|
47
|
+
|
|
48
|
+
empty_it.SeekTo(non_empty_it);
|
|
49
|
+
EXPECT_TRUE(empty_it.done());
|
|
50
|
+
|
|
51
|
+
empty_it.SeekBeyond(non_empty_it);
|
|
52
|
+
EXPECT_TRUE(empty_it.done());
|
|
53
|
+
|
|
54
|
+
empty_it.SeekTo(empty_it);
|
|
55
|
+
EXPECT_TRUE(empty_it.done());
|
|
56
|
+
|
|
57
|
+
empty_it.SeekBeyond(empty_it);
|
|
58
|
+
EXPECT_TRUE(empty_it.done());
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
} // namespace s2shapeutil
|