@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,37 @@
|
|
|
1
|
+
// Copyright 2017 Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
// Author: ericv@google.com (Eric Veach)
|
|
17
|
+
|
|
18
|
+
#include "s2/s2builderutil_testing.h"
|
|
19
|
+
|
|
20
|
+
namespace s2builderutil {
|
|
21
|
+
|
|
22
|
+
void GraphClone::Init(const S2Builder::Graph& g) {
|
|
23
|
+
options_ = g.options();
|
|
24
|
+
vertices_ = g.vertices();
|
|
25
|
+
edges_ = g.edges();
|
|
26
|
+
input_edge_id_set_ids_ = g.input_edge_id_set_ids();
|
|
27
|
+
input_edge_id_set_lexicon_ = g.input_edge_id_set_lexicon();
|
|
28
|
+
label_set_ids_ = g.label_set_ids();
|
|
29
|
+
label_set_lexicon_ = g.label_set_lexicon();
|
|
30
|
+
is_full_polygon_predicate_ = g.is_full_polygon_predicate();
|
|
31
|
+
g_ = S2Builder::Graph(
|
|
32
|
+
options_, &vertices_, &edges_, &input_edge_id_set_ids_,
|
|
33
|
+
&input_edge_id_set_lexicon_, &label_set_ids_, &label_set_lexicon_,
|
|
34
|
+
is_full_polygon_predicate_);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
} // namespace s2builderutil
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
// Copyright 2017 Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
// Author: ericv@google.com (Eric Veach)
|
|
17
|
+
|
|
18
|
+
#ifndef S2_S2BUILDERUTIL_TESTING_H_
|
|
19
|
+
#define S2_S2BUILDERUTIL_TESTING_H_
|
|
20
|
+
|
|
21
|
+
#include <vector>
|
|
22
|
+
|
|
23
|
+
#include "s2/third_party/absl/memory/memory.h"
|
|
24
|
+
#include "s2/s2builder.h"
|
|
25
|
+
#include "s2/s2builder_graph.h"
|
|
26
|
+
#include "s2/s2builder_layer.h"
|
|
27
|
+
|
|
28
|
+
namespace s2builderutil {
|
|
29
|
+
|
|
30
|
+
// A class that copies an S2Builder::Graph and owns the underlying data
|
|
31
|
+
// (unlike S2Builder::Graph, which is just a view).
|
|
32
|
+
class GraphClone {
|
|
33
|
+
public:
|
|
34
|
+
GraphClone() {} // Must call Init().
|
|
35
|
+
explicit GraphClone(const S2Builder::Graph& g) { Init(g); }
|
|
36
|
+
void Init(const S2Builder::Graph& g);
|
|
37
|
+
const S2Builder::Graph& graph() { return g_; }
|
|
38
|
+
|
|
39
|
+
private:
|
|
40
|
+
S2Builder::GraphOptions options_;
|
|
41
|
+
std::vector<S2Point> vertices_;
|
|
42
|
+
std::vector<S2Builder::Graph::Edge> edges_;
|
|
43
|
+
std::vector<S2Builder::Graph::InputEdgeIdSetId> input_edge_id_set_ids_;
|
|
44
|
+
IdSetLexicon input_edge_id_set_lexicon_;
|
|
45
|
+
std::vector<S2Builder::Graph::LabelSetId> label_set_ids_;
|
|
46
|
+
IdSetLexicon label_set_lexicon_;
|
|
47
|
+
S2Builder::IsFullPolygonPredicate is_full_polygon_predicate_;
|
|
48
|
+
S2Builder::Graph g_;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
// A layer type that copies an S2Builder::Graph into a GraphClone object
|
|
52
|
+
// (which owns the underlying data, unlike S2Builder::Graph itself).
|
|
53
|
+
class GraphCloningLayer : public S2Builder::Layer {
|
|
54
|
+
public:
|
|
55
|
+
GraphCloningLayer(const S2Builder::GraphOptions& graph_options,
|
|
56
|
+
GraphClone* gc)
|
|
57
|
+
: graph_options_(graph_options), gc_(gc) {}
|
|
58
|
+
|
|
59
|
+
S2Builder::GraphOptions graph_options() const override {
|
|
60
|
+
return graph_options_;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
void Build(const S2Builder::Graph& g, S2Error* error) override {
|
|
64
|
+
gc_->Init(g);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
private:
|
|
68
|
+
GraphOptions graph_options_;
|
|
69
|
+
GraphClone* gc_;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
// A layer type that copies an S2Builder::Graph and appends it to a vector,
|
|
73
|
+
// and appends the corresponding GraphClone object (which owns the Graph data)
|
|
74
|
+
// to a separate vector.
|
|
75
|
+
class GraphAppendingLayer : public S2Builder::Layer {
|
|
76
|
+
public:
|
|
77
|
+
GraphAppendingLayer(
|
|
78
|
+
const S2Builder::GraphOptions& graph_options,
|
|
79
|
+
std::vector<S2Builder::Graph>* graphs,
|
|
80
|
+
std::vector<std::unique_ptr<GraphClone>>* clones)
|
|
81
|
+
: graph_options_(graph_options), graphs_(graphs), clones_(clones) {}
|
|
82
|
+
|
|
83
|
+
S2Builder::GraphOptions graph_options() const override {
|
|
84
|
+
return graph_options_;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
void Build(const S2Builder::Graph& g, S2Error* error) override {
|
|
88
|
+
clones_->push_back(absl::make_unique<GraphClone>(g));
|
|
89
|
+
graphs_->push_back(clones_->back()->graph());
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
private:
|
|
93
|
+
GraphOptions graph_options_;
|
|
94
|
+
std::vector<S2Builder::Graph>* graphs_;
|
|
95
|
+
std::vector<std::unique_ptr<GraphClone>>* clones_;
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
} // namespace s2builderutil
|
|
99
|
+
|
|
100
|
+
#endif // S2_S2BUILDERUTIL_TESTING_H_
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
// Copyright 2017 Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
// Author: ericv@google.com (Eric Veach)
|
|
17
|
+
|
|
18
|
+
#include "s2/s2builderutil_testing.h"
|
|
19
|
+
|
|
20
|
+
#include <memory>
|
|
21
|
+
#include <vector>
|
|
22
|
+
|
|
23
|
+
#include <gtest/gtest.h>
|
|
24
|
+
#include "s2/third_party/absl/memory/memory.h"
|
|
25
|
+
|
|
26
|
+
using absl::make_unique;
|
|
27
|
+
using std::unique_ptr;
|
|
28
|
+
using std::vector;
|
|
29
|
+
|
|
30
|
+
using EdgeType = S2Builder::EdgeType;
|
|
31
|
+
using Graph = S2Builder::Graph;
|
|
32
|
+
using GraphOptions = S2Builder::GraphOptions;
|
|
33
|
+
|
|
34
|
+
using DegenerateEdges = GraphOptions::DegenerateEdges;
|
|
35
|
+
using DuplicateEdges = GraphOptions::DuplicateEdges;
|
|
36
|
+
using SiblingPairs = GraphOptions::SiblingPairs;
|
|
37
|
+
|
|
38
|
+
namespace s2builderutil {
|
|
39
|
+
|
|
40
|
+
TEST(GraphCloningLayer, MakeIndependentCopy) {
|
|
41
|
+
// Also tests GraphClone.
|
|
42
|
+
GraphClone gc;
|
|
43
|
+
S2Builder builder{S2Builder::Options()};
|
|
44
|
+
GraphOptions graph_options(EdgeType::DIRECTED, DegenerateEdges::DISCARD,
|
|
45
|
+
DuplicateEdges::MERGE, SiblingPairs::KEEP);
|
|
46
|
+
builder.StartLayer(make_unique<GraphCloningLayer>(graph_options, &gc));
|
|
47
|
+
S2Point v0(1, 0, 0), v1(0, 1, 0);
|
|
48
|
+
builder.set_label(14);
|
|
49
|
+
builder.AddEdge(v0, v1);
|
|
50
|
+
S2Error error;
|
|
51
|
+
EXPECT_TRUE(builder.Build(&error));
|
|
52
|
+
const Graph& g = gc.graph();
|
|
53
|
+
EXPECT_TRUE(graph_options == g.options());
|
|
54
|
+
EXPECT_EQ((vector<S2Point>{v0, v1}), g.vertices());
|
|
55
|
+
EXPECT_EQ((vector<Graph::Edge>{{0, 1}}), g.edges());
|
|
56
|
+
EXPECT_EQ(1, g.input_edge_ids(0).size());
|
|
57
|
+
EXPECT_EQ(0, *g.input_edge_ids(0).begin());
|
|
58
|
+
Graph::LabelFetcher fetcher(g, g.options().edge_type());
|
|
59
|
+
vector<S2Builder::Label> labels;
|
|
60
|
+
fetcher.Fetch(0, &labels);
|
|
61
|
+
EXPECT_EQ((vector<S2Builder::Label>{14}), labels);
|
|
62
|
+
// S2Builder sets a default IsFullPolygonPredicate that returns an error.
|
|
63
|
+
EXPECT_TRUE(g.is_full_polygon_predicate() != nullptr);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
TEST(GraphAppendingLayer, AppendsTwoGraphs) {
|
|
67
|
+
vector<Graph> graphs;
|
|
68
|
+
vector<unique_ptr<GraphClone>> clones;
|
|
69
|
+
S2Builder builder{S2Builder::Options()};
|
|
70
|
+
builder.StartLayer(make_unique<GraphAppendingLayer>(
|
|
71
|
+
GraphOptions(), &graphs, &clones));
|
|
72
|
+
S2Point v0(1, 0, 0), v1(0, 1, 0);
|
|
73
|
+
builder.AddEdge(v0, v1);
|
|
74
|
+
builder.StartLayer(make_unique<GraphAppendingLayer>(
|
|
75
|
+
GraphOptions(), &graphs, &clones));
|
|
76
|
+
builder.AddEdge(v1, v0);
|
|
77
|
+
S2Error error;
|
|
78
|
+
EXPECT_TRUE(builder.Build(&error));
|
|
79
|
+
EXPECT_EQ(2, graphs.size());
|
|
80
|
+
EXPECT_EQ(2, clones.size());
|
|
81
|
+
EXPECT_EQ(v0, graphs[0].vertex(graphs[0].edge(0).first));
|
|
82
|
+
EXPECT_EQ(v1, graphs[1].vertex(graphs[1].edge(0).first));
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
} // namespace s2builderutil
|
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
// Copyright 2005 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/s2cap.h"
|
|
19
|
+
|
|
20
|
+
#include <cfloat>
|
|
21
|
+
#include <cmath>
|
|
22
|
+
#include <iosfwd>
|
|
23
|
+
#include <vector>
|
|
24
|
+
|
|
25
|
+
#include "s2/base/integral_types.h"
|
|
26
|
+
#include "s2/base/logging.h"
|
|
27
|
+
#include "s2/r1interval.h"
|
|
28
|
+
#include "s2/s1interval.h"
|
|
29
|
+
#include "s2/s2cell.h"
|
|
30
|
+
#include "s2/s2debug.h"
|
|
31
|
+
#include "s2/s2edge_distances.h"
|
|
32
|
+
#include "s2/s2latlng.h"
|
|
33
|
+
#include "s2/s2latlng_rect.h"
|
|
34
|
+
#include "s2/s2metrics.h"
|
|
35
|
+
#include "s2/s2pointutil.h"
|
|
36
|
+
#include "s2/util/math/vector.h"
|
|
37
|
+
|
|
38
|
+
using std::fabs;
|
|
39
|
+
using std::max;
|
|
40
|
+
using std::vector;
|
|
41
|
+
|
|
42
|
+
double S2Cap::GetArea() const {
|
|
43
|
+
return 2 * M_PI * max(0.0, height());
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
S2Point S2Cap::GetCentroid() const {
|
|
47
|
+
// From symmetry, the centroid of the cap must be somewhere on the line
|
|
48
|
+
// from the origin to the center of the cap on the surface of the sphere.
|
|
49
|
+
// When a sphere is divided into slices of constant thickness by a set of
|
|
50
|
+
// parallel planes, all slices have the same surface area. This implies
|
|
51
|
+
// that the radial component of the centroid is simply the midpoint of the
|
|
52
|
+
// range of radial distances spanned by the cap. That is easily computed
|
|
53
|
+
// from the cap height.
|
|
54
|
+
if (is_empty()) return S2Point();
|
|
55
|
+
double r = 1.0 - 0.5 * height();
|
|
56
|
+
return r * GetArea() * center_;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
S2Cap S2Cap::Complement() const {
|
|
60
|
+
// The complement of a full cap is an empty cap, not a singleton.
|
|
61
|
+
// Also make sure that the complement of an empty cap is full.
|
|
62
|
+
if (is_full()) return Empty();
|
|
63
|
+
if (is_empty()) return Full();
|
|
64
|
+
return S2Cap(-center_, S1ChordAngle::FromLength2(4 - radius_.length2()));
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
bool S2Cap::Contains(const S2Cap& other) const {
|
|
68
|
+
if (is_full() || other.is_empty()) return true;
|
|
69
|
+
return radius_ >= S1ChordAngle(center_, other.center_) + other.radius_;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
bool S2Cap::Intersects(const S2Cap& other) const {
|
|
73
|
+
if (is_empty() || other.is_empty()) return false;
|
|
74
|
+
return radius_ + other.radius_ >= S1ChordAngle(center_, other.center_);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
bool S2Cap::InteriorIntersects(const S2Cap& other) const {
|
|
78
|
+
// Make sure this cap has an interior and the other cap is non-empty.
|
|
79
|
+
if (radius_.length2() <= 0 || other.is_empty()) return false;
|
|
80
|
+
return radius_ + other.radius_ > S1ChordAngle(center_, other.center_);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
void S2Cap::AddPoint(const S2Point& p) {
|
|
84
|
+
// Compute the squared chord length, then convert it into a height.
|
|
85
|
+
S2_DCHECK(S2::IsUnitLength(p));
|
|
86
|
+
if (is_empty()) {
|
|
87
|
+
center_ = p;
|
|
88
|
+
radius_ = S1ChordAngle::Zero();
|
|
89
|
+
} else {
|
|
90
|
+
// After calling cap.AddPoint(p), cap.Contains(p) must be true. However
|
|
91
|
+
// we don't need to do anything special to achieve this because Contains()
|
|
92
|
+
// does exactly the same distance calculation that we do here.
|
|
93
|
+
radius_ = max(radius_, S1ChordAngle(center_, p));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
void S2Cap::AddCap(const S2Cap& other) {
|
|
98
|
+
if (is_empty()) {
|
|
99
|
+
*this = other;
|
|
100
|
+
} else if (!other.is_empty()) {
|
|
101
|
+
// We round up the distance to ensure that the cap is actually contained.
|
|
102
|
+
// TODO(ericv): Do some error analysis in order to guarantee this.
|
|
103
|
+
S1ChordAngle dist = S1ChordAngle(center_, other.center_) + other.radius_;
|
|
104
|
+
radius_ = max(radius_, dist.PlusError(DBL_EPSILON * dist.length2()));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
S2Cap S2Cap::Expanded(S1Angle distance) const {
|
|
109
|
+
S2_DCHECK_GE(distance.radians(), 0);
|
|
110
|
+
if (is_empty()) return Empty();
|
|
111
|
+
return S2Cap(center_, radius_ + S1ChordAngle(distance));
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
S2Cap S2Cap::Union(const S2Cap& other) const {
|
|
115
|
+
if (radius_ < other.radius_) {
|
|
116
|
+
return other.Union(*this);
|
|
117
|
+
}
|
|
118
|
+
if (is_full() || other.is_empty()) {
|
|
119
|
+
return *this;
|
|
120
|
+
}
|
|
121
|
+
// This calculation would be more efficient using S1ChordAngles.
|
|
122
|
+
S1Angle this_radius = GetRadius();
|
|
123
|
+
S1Angle other_radius = other.GetRadius();
|
|
124
|
+
S1Angle distance(center(), other.center());
|
|
125
|
+
if (this_radius >= distance + other_radius) {
|
|
126
|
+
return *this;
|
|
127
|
+
} else {
|
|
128
|
+
S1Angle result_radius = 0.5 * (distance + this_radius + other_radius);
|
|
129
|
+
S2Point result_center = S2::InterpolateAtDistance(
|
|
130
|
+
0.5 * (distance - this_radius + other_radius),
|
|
131
|
+
center(),
|
|
132
|
+
other.center());
|
|
133
|
+
return S2Cap(result_center, result_radius);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
S2Cap* S2Cap::Clone() const {
|
|
138
|
+
return new S2Cap(*this);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
S2Cap S2Cap::GetCapBound() const {
|
|
142
|
+
return *this;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
S2LatLngRect S2Cap::GetRectBound() const {
|
|
146
|
+
if (is_empty()) return S2LatLngRect::Empty();
|
|
147
|
+
|
|
148
|
+
// Convert the center to a (lat,lng) pair, and compute the cap angle.
|
|
149
|
+
S2LatLng center_ll(center_);
|
|
150
|
+
double cap_angle = GetRadius().radians();
|
|
151
|
+
|
|
152
|
+
bool all_longitudes = false;
|
|
153
|
+
double lat[2], lng[2];
|
|
154
|
+
lng[0] = -M_PI;
|
|
155
|
+
lng[1] = M_PI;
|
|
156
|
+
|
|
157
|
+
// Check whether cap includes the south pole.
|
|
158
|
+
lat[0] = center_ll.lat().radians() - cap_angle;
|
|
159
|
+
if (lat[0] <= -M_PI_2) {
|
|
160
|
+
lat[0] = -M_PI_2;
|
|
161
|
+
all_longitudes = true;
|
|
162
|
+
}
|
|
163
|
+
// Check whether cap includes the north pole.
|
|
164
|
+
lat[1] = center_ll.lat().radians() + cap_angle;
|
|
165
|
+
if (lat[1] >= M_PI_2) {
|
|
166
|
+
lat[1] = M_PI_2;
|
|
167
|
+
all_longitudes = true;
|
|
168
|
+
}
|
|
169
|
+
if (!all_longitudes) {
|
|
170
|
+
// Compute the range of longitudes covered by the cap. We use the law
|
|
171
|
+
// of sines for spherical triangles. Consider the triangle ABC where
|
|
172
|
+
// A is the north pole, B is the center of the cap, and C is the point
|
|
173
|
+
// of tangency between the cap boundary and a line of longitude. Then
|
|
174
|
+
// C is a right angle, and letting a,b,c denote the sides opposite A,B,C,
|
|
175
|
+
// we have sin(a)/sin(A) = sin(c)/sin(C), or sin(A) = sin(a)/sin(c).
|
|
176
|
+
// Here "a" is the cap angle, and "c" is the colatitude (90 degrees
|
|
177
|
+
// minus the latitude). This formula also works for negative latitudes.
|
|
178
|
+
//
|
|
179
|
+
// The formula for sin(a) follows from the relationship h = 1 - cos(a).
|
|
180
|
+
|
|
181
|
+
double sin_a = sin(radius_);
|
|
182
|
+
double sin_c = cos(center_ll.lat().radians());
|
|
183
|
+
if (sin_a <= sin_c) {
|
|
184
|
+
double angle_A = asin(sin_a / sin_c);
|
|
185
|
+
lng[0] = remainder(center_ll.lng().radians() - angle_A, 2 * M_PI);
|
|
186
|
+
lng[1] = remainder(center_ll.lng().radians() + angle_A, 2 * M_PI);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return S2LatLngRect(R1Interval(lat[0], lat[1]),
|
|
190
|
+
S1Interval(lng[0], lng[1]));
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Computes a covering of the S2Cap. In general the covering consists of at
|
|
194
|
+
// most 4 cells except for very large caps, which may need up to 6 cells.
|
|
195
|
+
// The output is not sorted.
|
|
196
|
+
void S2Cap::GetCellUnionBound(vector<S2CellId>* cell_ids) const {
|
|
197
|
+
// TODO(ericv): The covering could be made quite a bit tighter by mapping
|
|
198
|
+
// the cap to a rectangle in (i,j)-space and finding a covering for that.
|
|
199
|
+
cell_ids->clear();
|
|
200
|
+
|
|
201
|
+
// Find the maximum level such that the cap contains at most one cell vertex
|
|
202
|
+
// and such that S2CellId::AppendVertexNeighbors() can be called.
|
|
203
|
+
int level = S2::kMinWidth.GetLevelForMinValue(GetRadius().radians()) - 1;
|
|
204
|
+
|
|
205
|
+
// If level < 0, then more than three face cells are required.
|
|
206
|
+
if (level < 0) {
|
|
207
|
+
cell_ids->reserve(6);
|
|
208
|
+
for (int face = 0; face < 6; ++face) {
|
|
209
|
+
cell_ids->push_back(S2CellId::FromFace(face));
|
|
210
|
+
}
|
|
211
|
+
} else {
|
|
212
|
+
// The covering consists of the 4 cells at the given level that share the
|
|
213
|
+
// cell vertex that is closest to the cap center.
|
|
214
|
+
cell_ids->reserve(4);
|
|
215
|
+
S2CellId(center_).AppendVertexNeighbors(level, cell_ids);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
bool S2Cap::Intersects(const S2Cell& cell, const S2Point* vertices) const {
|
|
220
|
+
// Return true if this cap intersects any point of 'cell' excluding its
|
|
221
|
+
// vertices (which are assumed to already have been checked).
|
|
222
|
+
|
|
223
|
+
// If the cap is a hemisphere or larger, the cell and the complement of the
|
|
224
|
+
// cap are both convex. Therefore since no vertex of the cell is contained,
|
|
225
|
+
// no other interior point of the cell is contained either.
|
|
226
|
+
if (radius_ >= S1ChordAngle::Right()) return false;
|
|
227
|
+
|
|
228
|
+
// We need to check for empty caps due to the center check just below.
|
|
229
|
+
if (is_empty()) return false;
|
|
230
|
+
|
|
231
|
+
// Optimization: return true if the cell contains the cap center. (This
|
|
232
|
+
// allows half of the edge checks below to be skipped.)
|
|
233
|
+
if (cell.Contains(center_)) return true;
|
|
234
|
+
|
|
235
|
+
// At this point we know that the cell does not contain the cap center,
|
|
236
|
+
// and the cap does not contain any cell vertex. The only way that they
|
|
237
|
+
// can intersect is if the cap intersects the interior of some edge.
|
|
238
|
+
|
|
239
|
+
double sin2_angle = sin2(radius_);
|
|
240
|
+
for (int k = 0; k < 4; ++k) {
|
|
241
|
+
S2Point edge = cell.GetEdgeRaw(k);
|
|
242
|
+
double dot = center_.DotProd(edge);
|
|
243
|
+
if (dot > 0) {
|
|
244
|
+
// The center is in the interior half-space defined by the edge. We don't
|
|
245
|
+
// need to consider these edges, since if the cap intersects this edge
|
|
246
|
+
// then it also intersects the edge on the opposite side of the cell
|
|
247
|
+
// (because we know the center is not contained with the cell).
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
// The Norm2() factor is necessary because "edge" is not normalized.
|
|
251
|
+
if (dot * dot > sin2_angle * edge.Norm2()) {
|
|
252
|
+
return false; // Entire cap is on the exterior side of this edge.
|
|
253
|
+
}
|
|
254
|
+
// Otherwise, the great circle containing this edge intersects
|
|
255
|
+
// the interior of the cap. We just need to check whether the point
|
|
256
|
+
// of closest approach occurs between the two edge endpoints.
|
|
257
|
+
Vector3_d dir = edge.CrossProd(center_);
|
|
258
|
+
if (dir.DotProd(vertices[k]) < 0 && dir.DotProd(vertices[(k+1)&3]) > 0)
|
|
259
|
+
return true;
|
|
260
|
+
}
|
|
261
|
+
return false;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
bool S2Cap::Contains(const S2Cell& cell) const {
|
|
265
|
+
// If the cap does not contain all cell vertices, return false.
|
|
266
|
+
// We check the vertices before taking the Complement() because we can't
|
|
267
|
+
// accurately represent the complement of a very small cap (a height
|
|
268
|
+
// of 2-epsilon is rounded off to 2).
|
|
269
|
+
S2Point vertices[4];
|
|
270
|
+
for (int k = 0; k < 4; ++k) {
|
|
271
|
+
vertices[k] = cell.GetVertex(k);
|
|
272
|
+
if (!Contains(vertices[k])) return false;
|
|
273
|
+
}
|
|
274
|
+
// Otherwise, return true if the complement of the cap does not intersect
|
|
275
|
+
// the cell. (This test is slightly conservative, because technically we
|
|
276
|
+
// want Complement().InteriorIntersects() here.)
|
|
277
|
+
return !Complement().Intersects(cell, vertices);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
bool S2Cap::MayIntersect(const S2Cell& cell) const {
|
|
281
|
+
// If the cap contains any cell vertex, return true.
|
|
282
|
+
S2Point vertices[4];
|
|
283
|
+
for (int k = 0; k < 4; ++k) {
|
|
284
|
+
vertices[k] = cell.GetVertex(k);
|
|
285
|
+
if (Contains(vertices[k])) return true;
|
|
286
|
+
}
|
|
287
|
+
return Intersects(cell, vertices);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
bool S2Cap::Contains(const S2Point& p) const {
|
|
291
|
+
S2_DCHECK(S2::IsUnitLength(p));
|
|
292
|
+
return S1ChordAngle(center_, p) <= radius_;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
bool S2Cap::InteriorContains(const S2Point& p) const {
|
|
296
|
+
S2_DCHECK(S2::IsUnitLength(p));
|
|
297
|
+
return is_full() || S1ChordAngle(center_, p) < radius_;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
bool S2Cap::operator==(const S2Cap& other) const {
|
|
301
|
+
return (center_ == other.center_ && radius_ == other.radius_) ||
|
|
302
|
+
(is_empty() && other.is_empty()) ||
|
|
303
|
+
(is_full() && other.is_full());
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
bool S2Cap::ApproxEquals(const S2Cap& other, S1Angle max_error_angle) const {
|
|
307
|
+
const double max_error = max_error_angle.radians();
|
|
308
|
+
const double r2 = radius_.length2();
|
|
309
|
+
const double other_r2 = other.radius_.length2();
|
|
310
|
+
return (S2::ApproxEquals(center_, other.center_, max_error_angle) &&
|
|
311
|
+
fabs(r2 - other_r2) <= max_error) ||
|
|
312
|
+
(is_empty() && other_r2 <= max_error) ||
|
|
313
|
+
(other.is_empty() && r2 <= max_error) ||
|
|
314
|
+
(is_full() && other_r2 >= 2 - max_error) ||
|
|
315
|
+
(other.is_full() && r2 >= 2 - max_error);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
std::ostream& operator<<(std::ostream& os, const S2Cap& cap) {
|
|
319
|
+
return os << "[Center=" << cap.center()
|
|
320
|
+
<< ", Radius=" << cap.GetRadius() << "]";
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
void S2Cap::Encode(Encoder* encoder) const {
|
|
324
|
+
encoder->Ensure(4 * sizeof(double));
|
|
325
|
+
|
|
326
|
+
encoder->putdouble(center_.x());
|
|
327
|
+
encoder->putdouble(center_.y());
|
|
328
|
+
encoder->putdouble(center_.z());
|
|
329
|
+
encoder->putdouble(radius_.length2());
|
|
330
|
+
|
|
331
|
+
S2_DCHECK_GE(encoder->avail(), 0);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
bool S2Cap::Decode(Decoder* decoder) {
|
|
335
|
+
if (decoder->avail() < 4 * sizeof(double)) return false;
|
|
336
|
+
|
|
337
|
+
double x = decoder->getdouble();
|
|
338
|
+
double y = decoder->getdouble();
|
|
339
|
+
double z = decoder->getdouble();
|
|
340
|
+
center_ = S2Point(x, y, z);
|
|
341
|
+
radius_ = S1ChordAngle::FromLength2(decoder->getdouble());
|
|
342
|
+
|
|
343
|
+
if (FLAGS_s2debug) {
|
|
344
|
+
S2_CHECK(is_valid()) << "Invalid S2Cap: " << *this;
|
|
345
|
+
}
|
|
346
|
+
return true;
|
|
347
|
+
}
|