@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,348 @@
|
|
|
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/s2lax_polygon_shape.h"
|
|
19
|
+
|
|
20
|
+
#include "s2/s2shapeutil_get_reference_point.h"
|
|
21
|
+
|
|
22
|
+
using absl::make_unique;
|
|
23
|
+
using absl::MakeSpan;
|
|
24
|
+
using absl::Span;
|
|
25
|
+
using std::vector;
|
|
26
|
+
using ChainPosition = S2Shape::ChainPosition;
|
|
27
|
+
|
|
28
|
+
// When adding a new encoding, be aware that old binaries will not be able
|
|
29
|
+
// to decode it.
|
|
30
|
+
static const unsigned char kCurrentEncodingVersionNumber = 1;
|
|
31
|
+
|
|
32
|
+
S2LaxPolygonShape::S2LaxPolygonShape(
|
|
33
|
+
const vector<S2LaxPolygonShape::Loop>& loops) {
|
|
34
|
+
Init(loops);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
S2LaxPolygonShape::S2LaxPolygonShape(const S2Polygon& polygon) {
|
|
38
|
+
Init(polygon);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
void S2LaxPolygonShape::Init(const vector<S2LaxPolygonShape::Loop>& loops) {
|
|
42
|
+
vector<Span<const S2Point>> spans;
|
|
43
|
+
spans.reserve(loops.size());
|
|
44
|
+
for (const S2LaxPolygonShape::Loop& loop : loops) {
|
|
45
|
+
spans.emplace_back(loop);
|
|
46
|
+
}
|
|
47
|
+
Init(spans);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
void S2LaxPolygonShape::Init(const S2Polygon& polygon) {
|
|
51
|
+
vector<Span<const S2Point>> spans;
|
|
52
|
+
for (int i = 0; i < polygon.num_loops(); ++i) {
|
|
53
|
+
const S2Loop* loop = polygon.loop(i);
|
|
54
|
+
if (loop->is_full()) {
|
|
55
|
+
spans.emplace_back(); // Empty span.
|
|
56
|
+
} else {
|
|
57
|
+
spans.emplace_back(&loop->vertex(0), loop->num_vertices());
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
Init(spans);
|
|
61
|
+
|
|
62
|
+
// S2Polygon and S2LaxPolygonShape holes are oriented oppositely, so we need
|
|
63
|
+
// to reverse the orientation of any loops representing holes.
|
|
64
|
+
for (int i = 0; i < polygon.num_loops(); ++i) {
|
|
65
|
+
if (polygon.loop(i)->is_hole()) {
|
|
66
|
+
S2Point* v0 = &vertices_[cumulative_vertices_[i]];
|
|
67
|
+
std::reverse(v0, v0 + num_loop_vertices(i));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
void S2LaxPolygonShape::Init(const vector<Span<const S2Point>>& loops) {
|
|
73
|
+
num_loops_ = loops.size();
|
|
74
|
+
if (num_loops_ == 0) {
|
|
75
|
+
num_vertices_ = 0;
|
|
76
|
+
vertices_ = nullptr;
|
|
77
|
+
} else if (num_loops_ == 1) {
|
|
78
|
+
num_vertices_ = loops[0].size();
|
|
79
|
+
vertices_.reset(new S2Point[num_vertices_]);
|
|
80
|
+
std::copy(loops[0].begin(), loops[0].end(), vertices_.get());
|
|
81
|
+
} else {
|
|
82
|
+
cumulative_vertices_ = new uint32[num_loops_ + 1];
|
|
83
|
+
int32 num_vertices = 0;
|
|
84
|
+
for (int i = 0; i < num_loops_; ++i) {
|
|
85
|
+
cumulative_vertices_[i] = num_vertices;
|
|
86
|
+
num_vertices += loops[i].size();
|
|
87
|
+
}
|
|
88
|
+
cumulative_vertices_[num_loops_] = num_vertices;
|
|
89
|
+
vertices_.reset(new S2Point[num_vertices]);
|
|
90
|
+
for (int i = 0; i < num_loops_; ++i) {
|
|
91
|
+
std::copy(loops[i].begin(), loops[i].end(),
|
|
92
|
+
vertices_.get() + cumulative_vertices_[i]);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
S2LaxPolygonShape::~S2LaxPolygonShape() {
|
|
98
|
+
if (num_loops() > 1) {
|
|
99
|
+
delete[] cumulative_vertices_;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
int S2LaxPolygonShape::num_vertices() const {
|
|
104
|
+
if (num_loops() <= 1) {
|
|
105
|
+
return num_vertices_;
|
|
106
|
+
} else {
|
|
107
|
+
return cumulative_vertices_[num_loops()];
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
int S2LaxPolygonShape::num_loop_vertices(int i) const {
|
|
112
|
+
S2_DCHECK_LT(i, num_loops());
|
|
113
|
+
if (num_loops() == 1) {
|
|
114
|
+
return num_vertices_;
|
|
115
|
+
} else {
|
|
116
|
+
return cumulative_vertices_[i + 1] - cumulative_vertices_[i];
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const S2Point& S2LaxPolygonShape::loop_vertex(int i, int j) const {
|
|
121
|
+
S2_DCHECK_LT(i, num_loops());
|
|
122
|
+
S2_DCHECK_LT(j, num_loop_vertices(i));
|
|
123
|
+
if (num_loops() == 1) {
|
|
124
|
+
return vertices_[j];
|
|
125
|
+
} else {
|
|
126
|
+
return vertices_[cumulative_vertices_[i] + j];
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
void S2LaxPolygonShape::Encode(Encoder* encoder,
|
|
131
|
+
s2coding::CodingHint hint) const {
|
|
132
|
+
encoder->Ensure(1 + Varint::kMax32);
|
|
133
|
+
encoder->put8(kCurrentEncodingVersionNumber);
|
|
134
|
+
encoder->put_varint32(num_loops_);
|
|
135
|
+
s2coding::EncodeS2PointVector(MakeSpan(vertices_.get(), num_vertices()),
|
|
136
|
+
hint, encoder);
|
|
137
|
+
if (num_loops() > 1) {
|
|
138
|
+
s2coding::EncodeUintVector<uint32>(MakeSpan(cumulative_vertices_,
|
|
139
|
+
num_loops() + 1), encoder);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
bool S2LaxPolygonShape::Init(Decoder* decoder) {
|
|
144
|
+
if (decoder->avail() < 1) return false;
|
|
145
|
+
uint8 version = decoder->get8();
|
|
146
|
+
if (version != kCurrentEncodingVersionNumber) return false;
|
|
147
|
+
|
|
148
|
+
uint32 num_loops;
|
|
149
|
+
if (!decoder->get_varint32(&num_loops)) return false;
|
|
150
|
+
num_loops_ = num_loops;
|
|
151
|
+
s2coding::EncodedS2PointVector vertices;
|
|
152
|
+
if (!vertices.Init(decoder)) return false;
|
|
153
|
+
|
|
154
|
+
if (num_loops_ == 0) {
|
|
155
|
+
num_vertices_ = 0;
|
|
156
|
+
vertices_ = nullptr;
|
|
157
|
+
} else {
|
|
158
|
+
vertices_ = make_unique<S2Point[]>(vertices.size());
|
|
159
|
+
for (int i = 0; i < vertices.size(); ++i) {
|
|
160
|
+
vertices_[i] = vertices[i];
|
|
161
|
+
}
|
|
162
|
+
if (num_loops_ == 1) {
|
|
163
|
+
num_vertices_ = vertices.size();
|
|
164
|
+
} else {
|
|
165
|
+
s2coding::EncodedUintVector<uint32> cumulative_vertices;
|
|
166
|
+
if (!cumulative_vertices.Init(decoder)) return false;
|
|
167
|
+
cumulative_vertices_ = new uint32[cumulative_vertices.size()];
|
|
168
|
+
for (int i = 0; i < cumulative_vertices.size(); ++i) {
|
|
169
|
+
cumulative_vertices_[i] = cumulative_vertices[i];
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return true;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
S2Shape::Edge S2LaxPolygonShape::edge(int e0) const {
|
|
177
|
+
S2_DCHECK_LT(e0, num_edges());
|
|
178
|
+
int e1 = e0 + 1;
|
|
179
|
+
if (num_loops() == 1) {
|
|
180
|
+
if (e1 == num_vertices_) { e1 = 0; }
|
|
181
|
+
} else {
|
|
182
|
+
// Find the index of the first vertex of the loop following this one.
|
|
183
|
+
const int kMaxLinearSearchLoops = 12; // From benchmarks.
|
|
184
|
+
uint32* next = cumulative_vertices_ + 1;
|
|
185
|
+
if (num_loops() <= kMaxLinearSearchLoops) {
|
|
186
|
+
while (*next <= e0) ++next;
|
|
187
|
+
} else {
|
|
188
|
+
next = std::lower_bound(next, next + num_loops(), e1);
|
|
189
|
+
}
|
|
190
|
+
// Wrap around to the first vertex of the loop if necessary.
|
|
191
|
+
if (e1 == *next) { e1 = next[-1]; }
|
|
192
|
+
}
|
|
193
|
+
return Edge(vertices_[e0], vertices_[e1]);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
S2Shape::ReferencePoint S2LaxPolygonShape::GetReferencePoint() const {
|
|
197
|
+
return s2shapeutil::GetReferencePoint(*this);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
S2Shape::Chain S2LaxPolygonShape::chain(int i) const {
|
|
201
|
+
S2_DCHECK_LT(i, num_loops());
|
|
202
|
+
if (num_loops() == 1) {
|
|
203
|
+
return Chain(0, num_vertices_);
|
|
204
|
+
} else {
|
|
205
|
+
int start = cumulative_vertices_[i];
|
|
206
|
+
return Chain(start, cumulative_vertices_[i + 1] - start);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
S2Shape::Edge S2LaxPolygonShape::chain_edge(int i, int j) const {
|
|
211
|
+
S2_DCHECK_LT(i, num_loops());
|
|
212
|
+
S2_DCHECK_LT(j, num_loop_vertices(i));
|
|
213
|
+
int n = num_loop_vertices(i);
|
|
214
|
+
int k = (j + 1 == n) ? 0 : j + 1;
|
|
215
|
+
if (num_loops() == 1) {
|
|
216
|
+
return Edge(vertices_[j], vertices_[k]);
|
|
217
|
+
} else {
|
|
218
|
+
int base = cumulative_vertices_[i];
|
|
219
|
+
return Edge(vertices_[base + j], vertices_[base + k]);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
S2Shape::ChainPosition S2LaxPolygonShape::chain_position(int e) const {
|
|
224
|
+
S2_DCHECK_LT(e, num_edges());
|
|
225
|
+
const int kMaxLinearSearchLoops = 12; // From benchmarks.
|
|
226
|
+
if (num_loops() == 1) {
|
|
227
|
+
return ChainPosition(0, e);
|
|
228
|
+
} else {
|
|
229
|
+
// Find the index of the first vertex of the loop following this one.
|
|
230
|
+
uint32* next = cumulative_vertices_ + 1;
|
|
231
|
+
if (num_loops() <= kMaxLinearSearchLoops) {
|
|
232
|
+
while (*next <= e) ++next;
|
|
233
|
+
} else {
|
|
234
|
+
next = std::lower_bound(next, next + num_loops(), e + 1);
|
|
235
|
+
}
|
|
236
|
+
return ChainPosition(next - (cumulative_vertices_ + 1), e - next[-1]);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
bool EncodedS2LaxPolygonShape::Init(Decoder* decoder) {
|
|
241
|
+
if (decoder->avail() < 1) return false;
|
|
242
|
+
uint8 version = decoder->get8();
|
|
243
|
+
if (version != kCurrentEncodingVersionNumber) return false;
|
|
244
|
+
|
|
245
|
+
uint32 num_loops;
|
|
246
|
+
if (!decoder->get_varint32(&num_loops)) return false;
|
|
247
|
+
num_loops_ = num_loops;
|
|
248
|
+
|
|
249
|
+
if (!vertices_.Init(decoder)) return false;
|
|
250
|
+
|
|
251
|
+
if (num_loops_ > 1) {
|
|
252
|
+
if (!cumulative_vertices_.Init(decoder)) return false;
|
|
253
|
+
}
|
|
254
|
+
return true;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
int EncodedS2LaxPolygonShape::num_vertices() const {
|
|
258
|
+
if (num_loops() <= 1) {
|
|
259
|
+
return vertices_.size();
|
|
260
|
+
} else {
|
|
261
|
+
return cumulative_vertices_[num_loops()];
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
int EncodedS2LaxPolygonShape::num_loop_vertices(int i) const {
|
|
266
|
+
S2_DCHECK_LT(i, num_loops());
|
|
267
|
+
if (num_loops() == 1) {
|
|
268
|
+
return vertices_.size();
|
|
269
|
+
} else {
|
|
270
|
+
return cumulative_vertices_[i + 1] - cumulative_vertices_[i];
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
S2Point EncodedS2LaxPolygonShape::loop_vertex(int i, int j) const {
|
|
275
|
+
S2_DCHECK_LT(i, num_loops());
|
|
276
|
+
S2_DCHECK_LT(j, num_loop_vertices(i));
|
|
277
|
+
if (num_loops() == 1) {
|
|
278
|
+
return vertices_[j];
|
|
279
|
+
} else {
|
|
280
|
+
return vertices_[cumulative_vertices_[i] + j];
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
S2Shape::Edge EncodedS2LaxPolygonShape::edge(int e) const {
|
|
285
|
+
S2_DCHECK_LT(e, num_edges());
|
|
286
|
+
int e1 = e + 1;
|
|
287
|
+
if (num_loops() == 1) {
|
|
288
|
+
if (e1 == vertices_.size()) { e1 = 0; }
|
|
289
|
+
} else {
|
|
290
|
+
// Find the index of the first vertex of the loop following this one.
|
|
291
|
+
const int kMaxLinearSearchLoops = 12; // From benchmarks.
|
|
292
|
+
int next = 1;
|
|
293
|
+
if (num_loops() <= kMaxLinearSearchLoops) {
|
|
294
|
+
while (cumulative_vertices_[next] <= e) ++next;
|
|
295
|
+
} else {
|
|
296
|
+
next = cumulative_vertices_.lower_bound(e1);
|
|
297
|
+
}
|
|
298
|
+
// Wrap around to the first vertex of the loop if necessary.
|
|
299
|
+
if (e1 == cumulative_vertices_[next]) {
|
|
300
|
+
e1 = cumulative_vertices_[next - 1];
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
return Edge(vertices_[e], vertices_[e1]);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
S2Shape::ReferencePoint EncodedS2LaxPolygonShape::GetReferencePoint() const {
|
|
307
|
+
return s2shapeutil::GetReferencePoint(*this);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
S2Shape::Chain EncodedS2LaxPolygonShape::chain(int i) const {
|
|
311
|
+
S2_DCHECK_LT(i, num_loops());
|
|
312
|
+
if (num_loops() == 1) {
|
|
313
|
+
return Chain(0, vertices_.size());
|
|
314
|
+
} else {
|
|
315
|
+
int start = cumulative_vertices_[i];
|
|
316
|
+
return Chain(start, cumulative_vertices_[i + 1] - start);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
S2Shape::Edge EncodedS2LaxPolygonShape::chain_edge(int i, int j) const {
|
|
321
|
+
S2_DCHECK_LT(i, num_loops());
|
|
322
|
+
S2_DCHECK_LT(j, num_loop_vertices(i));
|
|
323
|
+
int n = num_loop_vertices(i);
|
|
324
|
+
int k = (j + 1 == n) ? 0 : j + 1;
|
|
325
|
+
if (num_loops() == 1) {
|
|
326
|
+
return Edge(vertices_[j], vertices_[k]);
|
|
327
|
+
} else {
|
|
328
|
+
int base = cumulative_vertices_[i];
|
|
329
|
+
return Edge(vertices_[base + j], vertices_[base + k]);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
S2Shape::ChainPosition EncodedS2LaxPolygonShape::chain_position(int e) const {
|
|
334
|
+
S2_DCHECK_LT(e, num_edges());
|
|
335
|
+
const int kMaxLinearSearchLoops = 12; // From benchmarks.
|
|
336
|
+
if (num_loops() == 1) {
|
|
337
|
+
return ChainPosition(0, e);
|
|
338
|
+
} else {
|
|
339
|
+
// Find the index of the first vertex of the loop following this one.
|
|
340
|
+
int next = 1;
|
|
341
|
+
if (num_loops() <= kMaxLinearSearchLoops) {
|
|
342
|
+
while (cumulative_vertices_[next] <= e) ++next;
|
|
343
|
+
} else {
|
|
344
|
+
next = cumulative_vertices_.lower_bound(e + 1);
|
|
345
|
+
}
|
|
346
|
+
return ChainPosition(next - 1, e - cumulative_vertices_[next - 1]);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
@@ -0,0 +1,183 @@
|
|
|
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_S2LAX_POLYGON_SHAPE_H_
|
|
19
|
+
#define S2_S2LAX_POLYGON_SHAPE_H_
|
|
20
|
+
|
|
21
|
+
#include <memory>
|
|
22
|
+
#include <vector>
|
|
23
|
+
|
|
24
|
+
#include "s2/third_party/absl/types/span.h"
|
|
25
|
+
#include "s2/encoded_s2point_vector.h"
|
|
26
|
+
#include "s2/encoded_uint_vector.h"
|
|
27
|
+
#include "s2/s2polygon.h"
|
|
28
|
+
#include "s2/s2shape.h"
|
|
29
|
+
|
|
30
|
+
// S2LaxPolygonShape represents a region defined by a collection of zero or
|
|
31
|
+
// more closed loops. The interior is the region to the left of all loops.
|
|
32
|
+
// This is similar to S2Polygon::Shape except that this class supports
|
|
33
|
+
// polygons with degeneracies. Degeneracies are of two types: degenerate
|
|
34
|
+
// edges (from a vertex to itself) and sibling edge pairs (consisting of two
|
|
35
|
+
// oppositely oriented edges). Degeneracies can represent either "shells" or
|
|
36
|
+
// "holes" depending on the loop they are contained by. For example, a
|
|
37
|
+
// degenerate edge or sibling pair contained by a "shell" would be interpreted
|
|
38
|
+
// as a degenerate hole. Such edges form part of the boundary of the polygon.
|
|
39
|
+
//
|
|
40
|
+
// Loops with fewer than three vertices are interpreted as follows:
|
|
41
|
+
// - A loop with two vertices defines two edges (in opposite directions).
|
|
42
|
+
// - A loop with one vertex defines a single degenerate edge.
|
|
43
|
+
// - A loop with no vertices is interpreted as the "full loop" containing
|
|
44
|
+
// all points on the sphere. If this loop is present, then all other loops
|
|
45
|
+
// must form degeneracies (i.e., degenerate edges or sibling pairs). For
|
|
46
|
+
// example, two loops {} and {X} would be interpreted as the full polygon
|
|
47
|
+
// with a degenerate single-point hole at X.
|
|
48
|
+
//
|
|
49
|
+
// S2LaxPolygonShape does not have any error checking, and it is perfectly
|
|
50
|
+
// fine to create S2LaxPolygonShape objects that do not meet the requirements
|
|
51
|
+
// below (e.g., in order to analyze or fix those problems). However,
|
|
52
|
+
// S2LaxPolygonShapes must satisfy some additional conditions in order to
|
|
53
|
+
// perform certain operations:
|
|
54
|
+
//
|
|
55
|
+
// - In order to be valid for point containment tests, the polygon must
|
|
56
|
+
// satisfy the "interior is on the left" rule. This means that there must
|
|
57
|
+
// not be any crossing edges, and if there are duplicate edges then all but
|
|
58
|
+
// at most one of thm must belong to a sibling pair (i.e., the number of
|
|
59
|
+
// edges in opposite directions must differ by at most one).
|
|
60
|
+
//
|
|
61
|
+
// - To be valid for boolean operations (S2BooleanOperation), degenerate
|
|
62
|
+
// edges and sibling pairs cannot coincide with any other edges. For
|
|
63
|
+
// example, the following situations are not allowed:
|
|
64
|
+
//
|
|
65
|
+
// {AA, AA} // degenerate edge coincides with another edge
|
|
66
|
+
// {AA, AB} // degenerate edge coincides with another edge
|
|
67
|
+
// {AB, BA, AB} // sibling pair coincides with another edge
|
|
68
|
+
//
|
|
69
|
+
// Note that S2LaxPolygonShape is must faster to initialize and is more
|
|
70
|
+
// compact than S2Polygon, but unlike S2Polygon it does not have any built-in
|
|
71
|
+
// operations. Instead you should use S2ShapeIndex operations
|
|
72
|
+
// (S2BooleanOperation, S2ClosestEdgeQuery, etc).
|
|
73
|
+
class S2LaxPolygonShape : public S2Shape {
|
|
74
|
+
public:
|
|
75
|
+
static constexpr TypeTag kTypeTag = 5;
|
|
76
|
+
|
|
77
|
+
// Constructs an empty polygon.
|
|
78
|
+
S2LaxPolygonShape() : num_loops_(0), num_vertices_(0) {}
|
|
79
|
+
|
|
80
|
+
// Constructs an S2LaxPolygonShape from the given vertex loops.
|
|
81
|
+
using Loop = std::vector<S2Point>;
|
|
82
|
+
explicit S2LaxPolygonShape(const std::vector<Loop>& loops);
|
|
83
|
+
|
|
84
|
+
// Constructs an S2LaxPolygonShape from an S2Polygon, by copying its data.
|
|
85
|
+
// Full and empty S2Polygons are supported.
|
|
86
|
+
explicit S2LaxPolygonShape(const S2Polygon& polygon);
|
|
87
|
+
|
|
88
|
+
~S2LaxPolygonShape() override;
|
|
89
|
+
|
|
90
|
+
// Initializes an S2LaxPolygonShape from the given vertex loops.
|
|
91
|
+
void Init(const std::vector<Loop>& loops);
|
|
92
|
+
|
|
93
|
+
// Initializes an S2LaxPolygonShape from an S2Polygon, by copying its data.
|
|
94
|
+
// Full and empty S2Polygons are supported.
|
|
95
|
+
void Init(const S2Polygon& polygon);
|
|
96
|
+
|
|
97
|
+
// Returns the number of loops.
|
|
98
|
+
int num_loops() const { return num_loops_; }
|
|
99
|
+
|
|
100
|
+
// Returns the total number of vertices in all loops.
|
|
101
|
+
int num_vertices() const;
|
|
102
|
+
|
|
103
|
+
// Returns the number of vertices in the given loop.
|
|
104
|
+
int num_loop_vertices(int i) const;
|
|
105
|
+
|
|
106
|
+
// Returns the vertex from loop "i" at index "j".
|
|
107
|
+
// REQUIRES: 0 <= i < num_loops()
|
|
108
|
+
// REQUIRES: 0 <= j < num_loop_vertices(i)
|
|
109
|
+
const S2Point& loop_vertex(int i, int j) const;
|
|
110
|
+
|
|
111
|
+
// Appends an encoded representation of the S2LaxPolygonShape to "encoder".
|
|
112
|
+
//
|
|
113
|
+
// REQUIRES: "encoder" uses the default constructor, so that its buffer
|
|
114
|
+
// can be enlarged as necessary by calling Ensure(int).
|
|
115
|
+
void Encode(Encoder* encoder,
|
|
116
|
+
s2coding::CodingHint hint = s2coding::CodingHint::COMPACT) const;
|
|
117
|
+
|
|
118
|
+
// Decodes an S2LaxPolygonShape, returning true on success. (The method
|
|
119
|
+
// name is chosen for compatibility with EncodedS2LaxPolygonShape below.)
|
|
120
|
+
bool Init(Decoder* decoder);
|
|
121
|
+
|
|
122
|
+
// S2Shape interface:
|
|
123
|
+
int num_edges() const final { return num_vertices(); }
|
|
124
|
+
Edge edge(int e) const final;
|
|
125
|
+
int dimension() const final { return 2; }
|
|
126
|
+
ReferencePoint GetReferencePoint() const final;
|
|
127
|
+
int num_chains() const final { return num_loops(); }
|
|
128
|
+
Chain chain(int i) const final;
|
|
129
|
+
Edge chain_edge(int i, int j) const final;
|
|
130
|
+
ChainPosition chain_position(int e) const final;
|
|
131
|
+
TypeTag type_tag() const override { return kTypeTag; }
|
|
132
|
+
|
|
133
|
+
private:
|
|
134
|
+
void Init(const std::vector<absl::Span<const S2Point>>& loops);
|
|
135
|
+
|
|
136
|
+
int32 num_loops_;
|
|
137
|
+
std::unique_ptr<S2Point[]> vertices_;
|
|
138
|
+
// If num_loops_ <= 1, this union stores the number of vertices.
|
|
139
|
+
// Otherwise it points to an array of size (num_loops + 1) where element "i"
|
|
140
|
+
// is the total number of vertices in loops 0..i-1.
|
|
141
|
+
union {
|
|
142
|
+
int32 num_vertices_;
|
|
143
|
+
uint32* cumulative_vertices_; // Don't use unique_ptr in unions.
|
|
144
|
+
};
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
// Exactly like S2LaxPolygonShape, except that the vertices are kept in an
|
|
148
|
+
// encoded form and are decoded only as they are accessed. This allows for
|
|
149
|
+
// very fast initialization and no additional memory use beyond the encoded
|
|
150
|
+
// data. The encoded data is not owned by this class; typically it points
|
|
151
|
+
// into a large contiguous buffer that contains other encoded data as well.
|
|
152
|
+
class EncodedS2LaxPolygonShape : public S2Shape {
|
|
153
|
+
public:
|
|
154
|
+
// Constructs an uninitialized object; requires Init() to be called.
|
|
155
|
+
EncodedS2LaxPolygonShape() {}
|
|
156
|
+
|
|
157
|
+
// Initializes an EncodedS2LaxPolygonShape.
|
|
158
|
+
//
|
|
159
|
+
// REQUIRES: The Decoder data buffer must outlive this object.
|
|
160
|
+
bool Init(Decoder* decoder);
|
|
161
|
+
|
|
162
|
+
int num_loops() const { return num_loops_; }
|
|
163
|
+
int num_vertices() const;
|
|
164
|
+
int num_loop_vertices(int i) const;
|
|
165
|
+
S2Point loop_vertex(int i, int j) const;
|
|
166
|
+
|
|
167
|
+
// S2Shape interface:
|
|
168
|
+
int num_edges() const final { return num_vertices(); }
|
|
169
|
+
Edge edge(int e) const final;
|
|
170
|
+
int dimension() const final { return 2; }
|
|
171
|
+
ReferencePoint GetReferencePoint() const final;
|
|
172
|
+
int num_chains() const final { return num_loops(); }
|
|
173
|
+
Chain chain(int i) const final;
|
|
174
|
+
Edge chain_edge(int i, int j) const final;
|
|
175
|
+
ChainPosition chain_position(int e) const final;
|
|
176
|
+
|
|
177
|
+
private:
|
|
178
|
+
int32 num_loops_;
|
|
179
|
+
s2coding::EncodedS2PointVector vertices_;
|
|
180
|
+
s2coding::EncodedUintVector<uint32> cumulative_vertices_;
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
#endif // S2_S2LAX_POLYGON_SHAPE_H_
|