@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,60 @@
|
|
|
1
|
+
// Copyright 2015 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__FP_CONTRACT_OFF_H_
|
|
19
|
+
#define S2__FP_CONTRACT_OFF_H_
|
|
20
|
+
|
|
21
|
+
// Turn off the fused multiply-add optimization ("fp-contract"). With
|
|
22
|
+
// fp-contract on, any expression of the form "a * b + c" has two possible
|
|
23
|
+
// results, and the compiler is free to choose either of them. Effectively
|
|
24
|
+
// this makes it impossible to write deterministic functions that involve
|
|
25
|
+
// floating-point math.
|
|
26
|
+
//
|
|
27
|
+
// S2 requires deterministic arithmetic for correctness. We need to turn off
|
|
28
|
+
// fp-contract for the entire compilation unit, because S2 has public inline
|
|
29
|
+
// functions, and the optimization is controlled by the setting in effect when
|
|
30
|
+
// inline functions are instantiated (not when they are defined).
|
|
31
|
+
//
|
|
32
|
+
// Note that there is a standard C pragma to turn off FP contraction:
|
|
33
|
+
// #pragma STDC FP_CONTRACT OFF
|
|
34
|
+
// but it is not implemented in GCC because the standard pragma allows control
|
|
35
|
+
// at the level of compound statements rather than entire functions.
|
|
36
|
+
//
|
|
37
|
+
// This file may be included with other files in any order, as long as it
|
|
38
|
+
// appears before the first non-inline function definition. It is
|
|
39
|
+
// named with an underscore so that it is included first among the S2 headers.
|
|
40
|
+
|
|
41
|
+
// TODO(compiler-team): Figure out how to do this in a portable way.
|
|
42
|
+
#if defined(HAVE_ARMEABI_V7A)
|
|
43
|
+
// Some android builds use a buggy compiler that runs out of memory while
|
|
44
|
+
// parsing the pragma (--cpu=armeabi-v7a).
|
|
45
|
+
|
|
46
|
+
#elif defined(__ANDROID__)
|
|
47
|
+
// Other android builds use a buggy compiler that crashes with an internal
|
|
48
|
+
// error (Android NDK R9).
|
|
49
|
+
|
|
50
|
+
#elif defined(__clang__)
|
|
51
|
+
// Clang supports the standard C++ pragma for turning off this optimization.
|
|
52
|
+
#pragma STDC FP_CONTRACT OFF
|
|
53
|
+
|
|
54
|
+
#elif defined(__GNUC__)
|
|
55
|
+
// GCC defines its own pragma that operates at the function level rather than
|
|
56
|
+
// the statement level.
|
|
57
|
+
#pragma GCC optimize("fp-contract=off")
|
|
58
|
+
#endif
|
|
59
|
+
|
|
60
|
+
#endif // S2__FP_CONTRACT_OFF_H_
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
// Copyright 2009 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
|
+
|
|
17
|
+
//
|
|
18
|
+
// Various Google-specific casting templates.
|
|
19
|
+
//
|
|
20
|
+
// This code is compiled directly on many platforms, including client
|
|
21
|
+
// platforms like Windows, Mac, and embedded systems. Before making
|
|
22
|
+
// any changes here, make sure that you're not breaking any platforms.
|
|
23
|
+
//
|
|
24
|
+
|
|
25
|
+
#ifndef S2_BASE_CASTS_H_
|
|
26
|
+
#define S2_BASE_CASTS_H_
|
|
27
|
+
|
|
28
|
+
#include <cassert> // for use with down_cast<>
|
|
29
|
+
#include <climits> // for enumeration casts and tests
|
|
30
|
+
#include <type_traits>
|
|
31
|
+
|
|
32
|
+
#include "s2/third_party/absl/base/casts.h"
|
|
33
|
+
#include "s2/third_party/absl/base/macros.h"
|
|
34
|
+
|
|
35
|
+
// An "upcast", i.e. a conversion from a pointer to an object to a pointer to a
|
|
36
|
+
// base subobject, always succeeds if the base is unambiguous and accessible,
|
|
37
|
+
// and so it's fine to use implicit_cast.
|
|
38
|
+
//
|
|
39
|
+
// A "downcast", i.e. a conversion from a pointer to an object to a pointer
|
|
40
|
+
// to a more-derived object that may contain the original object as a base
|
|
41
|
+
// subobject, cannot safely be done using static_cast, because you do not
|
|
42
|
+
// generally know whether the source object is really the base subobject of
|
|
43
|
+
// a containing, more-derived object of the target type. Thus, when you
|
|
44
|
+
// downcast in a polymorphic type hierarchy, you should use the following
|
|
45
|
+
// function template.
|
|
46
|
+
//
|
|
47
|
+
// In debug mode, we use dynamic_cast to double-check whether the downcast is
|
|
48
|
+
// legal (we die if it's not). In normal mode, we do the efficient static_cast
|
|
49
|
+
// instead. Thus, it's important to test in debug mode to make sure the cast is
|
|
50
|
+
// legal!
|
|
51
|
+
//
|
|
52
|
+
// This is the only place in the codebase we should use dynamic_cast.
|
|
53
|
+
// In particular, you should NOT use dynamic_cast for RTTI, e.g. for
|
|
54
|
+
// code like this:
|
|
55
|
+
// if (auto* p = dynamic_cast<Subclass1*>(foo)) HandleASubclass1Object(p);
|
|
56
|
+
// if (auto* p = dynamic_cast<Subclass2*>(foo)) HandleASubclass2Object(p);
|
|
57
|
+
// You should design the code some other way not to need this.
|
|
58
|
+
|
|
59
|
+
template<typename To, typename From> // use like this: down_cast<T*>(foo);
|
|
60
|
+
inline To down_cast(From* f) { // so we only accept pointers
|
|
61
|
+
static_assert(
|
|
62
|
+
(std::is_base_of<From, typename std::remove_pointer<To>::type>::value),
|
|
63
|
+
"target type not derived from source type");
|
|
64
|
+
|
|
65
|
+
// We skip the assert and hence the dynamic_cast if RTTI is disabled.
|
|
66
|
+
#if !defined(__GNUC__) || defined(__GXX_RTTI)
|
|
67
|
+
// Uses RTTI in dbg and fastbuild. asserts are disabled in opt builds.
|
|
68
|
+
assert(f == nullptr || dynamic_cast<To>(f) != nullptr);
|
|
69
|
+
#endif // !defined(__GNUC__) || defined(__GXX_RTTI)
|
|
70
|
+
|
|
71
|
+
return static_cast<To>(f);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Overload of down_cast for references. Use like this: down_cast<T&>(foo).
|
|
75
|
+
// The code is slightly convoluted because we're still using the pointer
|
|
76
|
+
// form of dynamic cast. (The reference form throws an exception if it
|
|
77
|
+
// fails.)
|
|
78
|
+
//
|
|
79
|
+
// There's no need for a special const overload either for the pointer
|
|
80
|
+
// or the reference form. If you call down_cast with a const T&, the
|
|
81
|
+
// compiler will just bind From to const T.
|
|
82
|
+
template<typename To, typename From>
|
|
83
|
+
inline To down_cast(From& f) {
|
|
84
|
+
static_assert(
|
|
85
|
+
std::is_lvalue_reference<To>::value, "target type not a reference");
|
|
86
|
+
static_assert(
|
|
87
|
+
(std::is_base_of<From, typename std::remove_reference<To>::type>::value),
|
|
88
|
+
"target type not derived from source type");
|
|
89
|
+
|
|
90
|
+
// We skip the assert and hence the dynamic_cast if RTTI is disabled.
|
|
91
|
+
#if !defined(__GNUC__) || defined(__GXX_RTTI)
|
|
92
|
+
// RTTI: debug mode only
|
|
93
|
+
assert(dynamic_cast<typename std::remove_reference<To>::type*>(&f) !=
|
|
94
|
+
nullptr);
|
|
95
|
+
#endif // !defined(__GNUC__) || defined(__GXX_RTTI)
|
|
96
|
+
|
|
97
|
+
return static_cast<To>(f);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// **** Enumeration Casts and Tests
|
|
101
|
+
//
|
|
102
|
+
// C++ requires that the value of an integer that is converted to an
|
|
103
|
+
// enumeration be within the value bounds of the enumeration. Modern
|
|
104
|
+
// compilers can and do take advantage of this requirement to optimize
|
|
105
|
+
// programs. So, using a raw static_cast with enums can be bad. See
|
|
106
|
+
//
|
|
107
|
+
// The following templates and macros enable casting from an int to an enum
|
|
108
|
+
// with checking against the appropriate bounds. First, when defining an
|
|
109
|
+
// enumeration, identify the limits of the values of its enumerators.
|
|
110
|
+
//
|
|
111
|
+
// enum A { A_min = -18, A_max = 33 };
|
|
112
|
+
// MAKE_ENUM_LIMITS(A, A_min, A_max)
|
|
113
|
+
//
|
|
114
|
+
// Convert an int to an enum in one of two ways. The prefered way is a
|
|
115
|
+
// tight conversion, which ensures that A_min <= value <= A_max.
|
|
116
|
+
//
|
|
117
|
+
// A var = tight_enum_cast<A>(3);
|
|
118
|
+
//
|
|
119
|
+
// However, the C++ language defines the set of possible values for an
|
|
120
|
+
// enumeration to be essentially the range of a bitfield that can represent
|
|
121
|
+
// all the enumerators, i.e. those within the nearest containing power
|
|
122
|
+
// of two. In the example above, the nearest positive power of two is 64,
|
|
123
|
+
// and so the upper bound is 63. The nearest negative power of two is
|
|
124
|
+
// -32 and so the lower bound is -32 (two's complement), which is upgraded
|
|
125
|
+
// to match the upper bound, becoming -64. The values within this range
|
|
126
|
+
// of -64 to 63 are valid, according to the C++ standard. You can cast
|
|
127
|
+
// values within this range as follows.
|
|
128
|
+
//
|
|
129
|
+
// A var = loose_enum_cast<A>(45);
|
|
130
|
+
//
|
|
131
|
+
// These casts will log a message if the value does not reside within the
|
|
132
|
+
// specified range, and will be fatal when in debug mode.
|
|
133
|
+
//
|
|
134
|
+
// For those times when an assert too strong, there are test functions.
|
|
135
|
+
//
|
|
136
|
+
// bool var = tight_enum_test<A>(3);
|
|
137
|
+
// bool var = loose_enum_test<A>(45);
|
|
138
|
+
//
|
|
139
|
+
// For code that needs to use the enumeration value if and only if
|
|
140
|
+
// it is good, there is a function that both tests and casts.
|
|
141
|
+
//
|
|
142
|
+
// int i = ....;
|
|
143
|
+
// A var;
|
|
144
|
+
// if (tight_enum_test_cast<A>(i, &var))
|
|
145
|
+
// .... // use valid var with value as indicated by i
|
|
146
|
+
// else
|
|
147
|
+
// .... // handle invalid enum cast
|
|
148
|
+
//
|
|
149
|
+
// The enum test/cast facility is currently limited to enumerations that
|
|
150
|
+
// fit within an int. It is also limited to two's complement ints.
|
|
151
|
+
|
|
152
|
+
// ** Implementation Description
|
|
153
|
+
//
|
|
154
|
+
// The enum_limits template class captures the minimum and maximum
|
|
155
|
+
// enumerator. All uses of this template are intended to be of
|
|
156
|
+
// specializations, so the generic has a field to identify itself as
|
|
157
|
+
// not specialized. The test/cast templates assert specialization.
|
|
158
|
+
|
|
159
|
+
template <typename Enum>
|
|
160
|
+
class enum_limits {
|
|
161
|
+
public:
|
|
162
|
+
static const Enum min_enumerator = 0;
|
|
163
|
+
static const Enum max_enumerator = 0;
|
|
164
|
+
static const bool is_specialized = false;
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
// Now we define the macro to define the specialization for enum_limits.
|
|
168
|
+
// The specialization checks that the enumerators fit within an int.
|
|
169
|
+
// This checking relies on integral promotion.
|
|
170
|
+
|
|
171
|
+
#define MAKE_ENUM_LIMITS(ENUM_TYPE, ENUM_MIN, ENUM_MAX) \
|
|
172
|
+
template <> \
|
|
173
|
+
class enum_limits<ENUM_TYPE> { \
|
|
174
|
+
public: \
|
|
175
|
+
static const ENUM_TYPE min_enumerator = ENUM_MIN; \
|
|
176
|
+
static const ENUM_TYPE max_enumerator = ENUM_MAX; \
|
|
177
|
+
static const bool is_specialized = true; \
|
|
178
|
+
static_assert(ENUM_MIN >= INT_MIN, "enumerator too negative for int"); \
|
|
179
|
+
static_assert(ENUM_MAX <= INT_MAX, "enumerator too positive for int"); \
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
// The loose enum test/cast is actually the more complicated one,
|
|
183
|
+
// because of the problem of finding the bounds.
|
|
184
|
+
//
|
|
185
|
+
// The unary upper bound, ub, on a positive number is its positive
|
|
186
|
+
// saturation, i.e. for a value v within pow(2,k-1) <= v < pow(2,k),
|
|
187
|
+
// the upper bound is pow(2,k)-1.
|
|
188
|
+
//
|
|
189
|
+
// The unary lower bound, lb, on a negative number is its negative
|
|
190
|
+
// saturation, i.e. for a value v within -pow(2,k) <= v < -pow(2,k-1),
|
|
191
|
+
// the lower bound is -pow(2,k).
|
|
192
|
+
//
|
|
193
|
+
// The actual bounds are (1) the binary upper bound over the maximum
|
|
194
|
+
// enumerator and the one's complement of a negative minimum enumerator
|
|
195
|
+
// and (2) the binary lower bound over the minimum enumerator and the
|
|
196
|
+
// one's complement of the positive maximum enumerator, except that if no
|
|
197
|
+
// enumerators are negative, the lower bound is zero.
|
|
198
|
+
//
|
|
199
|
+
// The algorithm relies heavily on the observation that
|
|
200
|
+
//
|
|
201
|
+
// a,b>0 then ub(a,b) == ub(a) | ub(b) == ub(a|b)
|
|
202
|
+
// a,b<0 then lb(a,b) == lb(a) & lb(b) == lb(a&b)
|
|
203
|
+
//
|
|
204
|
+
// Note that the compiler will boil most of this code away
|
|
205
|
+
// because of value propagation on the constant enumerator bounds.
|
|
206
|
+
|
|
207
|
+
template <typename Enum>
|
|
208
|
+
inline bool loose_enum_test(int e_val) {
|
|
209
|
+
static_assert(enum_limits<Enum>::is_specialized, "missing MAKE_ENUM_LIMITS");
|
|
210
|
+
const Enum e_min = enum_limits<Enum>::min_enumerator;
|
|
211
|
+
const Enum e_max = enum_limits<Enum>::max_enumerator;
|
|
212
|
+
static_assert(sizeof(e_val) == 4 || sizeof(e_val) == 8,
|
|
213
|
+
"unexpected int size");
|
|
214
|
+
|
|
215
|
+
// Find the unary bounding negative number of e_min and e_max.
|
|
216
|
+
|
|
217
|
+
// Find the unary bounding negative number of e_max.
|
|
218
|
+
// This would be b_min = e_max < 0 ? e_max : ~e_max,
|
|
219
|
+
// but we want to avoid branches to help the compiler.
|
|
220
|
+
int e_max_sign = e_max >> (sizeof(e_val)*8 - 1);
|
|
221
|
+
int b_min = ~e_max_sign ^ e_max;
|
|
222
|
+
|
|
223
|
+
// Find the binary bounding negative of both e_min and e_max.
|
|
224
|
+
b_min &= e_min;
|
|
225
|
+
|
|
226
|
+
// However, if e_min is positive, the result will be positive.
|
|
227
|
+
// Now clear all bits right of the most significant clear bit,
|
|
228
|
+
// which is a negative saturation for negative numbers.
|
|
229
|
+
// In the case of positive numbers, this is flush to zero.
|
|
230
|
+
b_min &= b_min >> 1;
|
|
231
|
+
b_min &= b_min >> 2;
|
|
232
|
+
b_min &= b_min >> 4;
|
|
233
|
+
b_min &= b_min >> 8;
|
|
234
|
+
b_min &= b_min >> 16;
|
|
235
|
+
#if INT_MAX > 2147483647
|
|
236
|
+
b_min &= b_min >> 32;
|
|
237
|
+
#endif
|
|
238
|
+
|
|
239
|
+
// Find the unary bounding positive number of e_max.
|
|
240
|
+
int b_max = e_max_sign ^ e_max;
|
|
241
|
+
|
|
242
|
+
// Find the binary bounding positive number of that
|
|
243
|
+
// and the unary bounding positive number of e_min.
|
|
244
|
+
int e_min_sign = e_min >> (sizeof(e_val)*8 - 1);
|
|
245
|
+
b_max |= e_min_sign ^ e_min;
|
|
246
|
+
|
|
247
|
+
// Now set all bits right of the most significant set bit,
|
|
248
|
+
// which is a positive saturation for positive numbers.
|
|
249
|
+
b_max |= b_max >> 1;
|
|
250
|
+
b_max |= b_max >> 2;
|
|
251
|
+
b_max |= b_max >> 4;
|
|
252
|
+
b_max |= b_max >> 8;
|
|
253
|
+
b_max |= b_max >> 16;
|
|
254
|
+
#if INT_MAX > 2147483647
|
|
255
|
+
b_max |= b_max >> 32;
|
|
256
|
+
#endif
|
|
257
|
+
|
|
258
|
+
// Finally test the bounds.
|
|
259
|
+
return b_min <= e_val && e_val <= b_max;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
template <typename Enum>
|
|
263
|
+
inline bool tight_enum_test(int e_val) {
|
|
264
|
+
static_assert(enum_limits<Enum>::is_specialized, "missing MAKE_ENUM_LIMITS");
|
|
265
|
+
const Enum e_min = enum_limits<Enum>::min_enumerator;
|
|
266
|
+
const Enum e_max = enum_limits<Enum>::max_enumerator;
|
|
267
|
+
return e_min <= e_val && e_val <= e_max;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
template <typename Enum>
|
|
271
|
+
inline bool loose_enum_test_cast(int e_val, Enum* e_var) {
|
|
272
|
+
if (loose_enum_test<Enum>(e_val)) {
|
|
273
|
+
*e_var = static_cast<Enum>(e_val);
|
|
274
|
+
return true;
|
|
275
|
+
} else {
|
|
276
|
+
return false;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
template <typename Enum>
|
|
281
|
+
inline bool tight_enum_test_cast(int e_val, Enum* e_var) {
|
|
282
|
+
if (tight_enum_test<Enum>(e_val)) {
|
|
283
|
+
*e_var = static_cast<Enum>(e_val);
|
|
284
|
+
return true;
|
|
285
|
+
} else {
|
|
286
|
+
return false;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
// The plain casts require logging, and we get header recursion if
|
|
291
|
+
// it is done directly. So, we do it indirectly.
|
|
292
|
+
// The following function is defined in logging.cc.
|
|
293
|
+
|
|
294
|
+
namespace base {
|
|
295
|
+
namespace internal {
|
|
296
|
+
|
|
297
|
+
void WarnEnumCastError(int value_of_int);
|
|
298
|
+
|
|
299
|
+
} // namespace internal
|
|
300
|
+
} // namespace base
|
|
301
|
+
|
|
302
|
+
template <typename Enum>
|
|
303
|
+
inline Enum loose_enum_cast(int e_val) {
|
|
304
|
+
if (!loose_enum_test<Enum>(e_val)) {
|
|
305
|
+
base::internal::WarnEnumCastError(e_val);
|
|
306
|
+
}
|
|
307
|
+
return static_cast<Enum>(e_val);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
template <typename Enum>
|
|
311
|
+
inline Enum tight_enum_cast(int e_val) {
|
|
312
|
+
if (!tight_enum_test<Enum>(e_val)) {
|
|
313
|
+
base::internal::WarnEnumCastError(e_val);
|
|
314
|
+
}
|
|
315
|
+
return static_cast<Enum>(e_val);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
#endif // S2_BASE_CASTS_H_
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// Copyright Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
#ifndef S2_BASE_COMMANDLINEFLAGS_H_
|
|
17
|
+
#define S2_BASE_COMMANDLINEFLAGS_H_
|
|
18
|
+
|
|
19
|
+
#ifdef S2_USE_GFLAGS
|
|
20
|
+
|
|
21
|
+
#include <gflags/gflags.h>
|
|
22
|
+
|
|
23
|
+
// If the GFlags library is available, map the local macro names to
|
|
24
|
+
// GFlags macros.
|
|
25
|
+
#define S2_DEFINE_bool DEFINE_bool
|
|
26
|
+
#define S2_DECLARE_bool DECLARE_bool
|
|
27
|
+
|
|
28
|
+
#define S2_DEFINE_double DEFINE_double
|
|
29
|
+
#define S2_DECLARE_double DECLARE_double
|
|
30
|
+
|
|
31
|
+
#define S2_DEFINE_int32 DEFINE_int32
|
|
32
|
+
#define S2_DECLARE_int32 DECLARE_int32
|
|
33
|
+
|
|
34
|
+
#define S2_DEFINE_string DEFINE_string
|
|
35
|
+
#define S2_DECLARE_string DECLARE_string
|
|
36
|
+
|
|
37
|
+
#else // !defined(S2_USE_GFLAGS)
|
|
38
|
+
|
|
39
|
+
#include <string>
|
|
40
|
+
|
|
41
|
+
#include "s2/base/integral_types.h"
|
|
42
|
+
|
|
43
|
+
// Create a set of gflags-like macros for declaring/defining flags. Use
|
|
44
|
+
// a library-specific name to potential minimize clashes with GFlags.
|
|
45
|
+
|
|
46
|
+
#define S2_DEFINE_bool(name, default_value, description) \
|
|
47
|
+
bool FLAGS_##name = default_value
|
|
48
|
+
#define S2_DECLARE_bool(name) \
|
|
49
|
+
extern bool FLAGS_##name
|
|
50
|
+
#define S2_DEFINE_double(name, default_value, description) \
|
|
51
|
+
double FLAGS_##name = default_value
|
|
52
|
+
#define S2_DECLARE_double(name) \
|
|
53
|
+
extern double FLAGS_##name
|
|
54
|
+
|
|
55
|
+
#define S2_DEFINE_int32(name, default_value, description) \
|
|
56
|
+
int32 FLAGS_##name = default_value
|
|
57
|
+
#define S2_DECLARE_int32(name) \
|
|
58
|
+
extern int32 FLAGS_##name
|
|
59
|
+
|
|
60
|
+
#define S2_DEFINE_string(name, default_value, description) \
|
|
61
|
+
std::string FLAGS_##name = default_value
|
|
62
|
+
#define S2_DECLARE_string(name) \
|
|
63
|
+
extern std::string FLAGS_##name
|
|
64
|
+
|
|
65
|
+
#endif // !defined(S2_USE_GFLAGS)
|
|
66
|
+
|
|
67
|
+
#endif // S2_BASE_COMMANDLINEFLAGS_H_
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// Copyright 2018 Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
#ifndef S2_BASE_INTEGRAL_TYPES_H_
|
|
17
|
+
#define S2_BASE_INTEGRAL_TYPES_H_
|
|
18
|
+
|
|
19
|
+
using int8 = signed char;
|
|
20
|
+
using int16 = short;
|
|
21
|
+
using int32 = int;
|
|
22
|
+
using int64 = long long;
|
|
23
|
+
|
|
24
|
+
using uint8 = unsigned char;
|
|
25
|
+
using uint16 = unsigned short;
|
|
26
|
+
using uint32 = unsigned int;
|
|
27
|
+
using uint64 = unsigned long long;
|
|
28
|
+
|
|
29
|
+
using uword_t = unsigned long;
|
|
30
|
+
|
|
31
|
+
#endif // S2_BASE_INTEGRAL_TYPES_H_
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// Copyright Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
#ifndef S2_BASE_LOG_SEVERITY_H_
|
|
17
|
+
#define S2_BASE_LOG_SEVERITY_H_
|
|
18
|
+
|
|
19
|
+
#ifdef S2_USE_GLOG
|
|
20
|
+
|
|
21
|
+
#include <glog/log_severity.h>
|
|
22
|
+
|
|
23
|
+
#else // !defined(S2_USE_GLOG)
|
|
24
|
+
|
|
25
|
+
#include "s2/third_party/absl/base/log_severity.h"
|
|
26
|
+
|
|
27
|
+
// Stay compatible with glog.
|
|
28
|
+
namespace google {
|
|
29
|
+
|
|
30
|
+
#ifdef NDEBUG
|
|
31
|
+
constexpr bool DEBUG_MODE = false;
|
|
32
|
+
#else
|
|
33
|
+
constexpr bool DEBUG_MODE = true;
|
|
34
|
+
#endif
|
|
35
|
+
|
|
36
|
+
} // namespace google
|
|
37
|
+
|
|
38
|
+
#endif // !defined(S2_USE_GLOG)
|
|
39
|
+
|
|
40
|
+
#endif // S2_BASE_LOG_SEVERITY_H_
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
// Copyright Google Inc. All Rights Reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
#ifndef S2_BASE_LOGGING_H_
|
|
17
|
+
#define S2_BASE_LOGGING_H_
|
|
18
|
+
|
|
19
|
+
#ifdef S2_USE_GLOG
|
|
20
|
+
|
|
21
|
+
#include <glog/logging.h>
|
|
22
|
+
|
|
23
|
+
// The names CHECK, etc. are too common and may conflict with other
|
|
24
|
+
// packages. We use S2_CHECK to make it easier to switch to
|
|
25
|
+
// something other than GLOG for logging.
|
|
26
|
+
|
|
27
|
+
#define S2_LOG LOG
|
|
28
|
+
#define S2_LOG_IF LOG_IF
|
|
29
|
+
#define S2_DLOG_IF DLOG_IF
|
|
30
|
+
|
|
31
|
+
#define S2_CHECK CHECK
|
|
32
|
+
#define S2_CHECK_EQ CHECK_EQ
|
|
33
|
+
#define S2_CHECK_NE CHECK_NE
|
|
34
|
+
#define S2_CHECK_LT CHECK_LT
|
|
35
|
+
#define S2_CHECK_LE CHECK_LE
|
|
36
|
+
#define S2_CHECK_GT CHECK_GT
|
|
37
|
+
#define S2_CHECK_GE CHECK_GE
|
|
38
|
+
|
|
39
|
+
#define S2_DCHECK DCHECK
|
|
40
|
+
#define S2_DCHECK_EQ DCHECK_EQ
|
|
41
|
+
#define S2_DCHECK_NE DCHECK_NE
|
|
42
|
+
#define S2_DCHECK_LT DCHECK_LT
|
|
43
|
+
#define S2_DCHECK_LE DCHECK_LE
|
|
44
|
+
#define S2_DCHECK_GT DCHECK_GT
|
|
45
|
+
#define S2_DCHECK_GE DCHECK_GE
|
|
46
|
+
|
|
47
|
+
#define S2_VLOG VLOG
|
|
48
|
+
#define S2_VLOG_IS_ON VLOG_IS_ON
|
|
49
|
+
|
|
50
|
+
#else // !defined(S2_USE_GLOG)
|
|
51
|
+
|
|
52
|
+
#include <iostream>
|
|
53
|
+
|
|
54
|
+
#include "s2/base/log_severity.h"
|
|
55
|
+
#include "s2/third_party/absl/base/attributes.h"
|
|
56
|
+
#include "s2/third_party/absl/base/log_severity.h"
|
|
57
|
+
|
|
58
|
+
class S2LogMessage {
|
|
59
|
+
public:
|
|
60
|
+
S2LogMessage(const char* file, int line,
|
|
61
|
+
absl::LogSeverity severity, std::ostream& stream)
|
|
62
|
+
: severity_(severity), stream_(stream) {
|
|
63
|
+
if (enabled()) {
|
|
64
|
+
stream_ << file << ":" << line << " "
|
|
65
|
+
<< absl::LogSeverityName(severity) << " ";
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
~S2LogMessage() { if (enabled()) stream_ << std::endl; }
|
|
69
|
+
|
|
70
|
+
std::ostream& stream() { return stream_; }
|
|
71
|
+
|
|
72
|
+
private:
|
|
73
|
+
bool enabled() const {
|
|
74
|
+
#ifdef ABSL_MIN_LOG_LEVEL
|
|
75
|
+
return (static_cast<int>(severity_) >= ABSL_MIN_LOG_LEVEL ||
|
|
76
|
+
severity_ >= absl::LogSeverity::kFatal);
|
|
77
|
+
#else
|
|
78
|
+
return true;
|
|
79
|
+
#endif
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
absl::LogSeverity severity_;
|
|
83
|
+
std::ostream& stream_;
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
// Same as S2LogMessage, but destructor is marked no-return to avoid
|
|
87
|
+
// "no return value warnings" in functions that return non-void.
|
|
88
|
+
class S2FatalLogMessage : public S2LogMessage {
|
|
89
|
+
public:
|
|
90
|
+
S2FatalLogMessage(const char* file, int line,
|
|
91
|
+
absl::LogSeverity severity, std::ostream& stream)
|
|
92
|
+
ABSL_ATTRIBUTE_COLD
|
|
93
|
+
: S2LogMessage(file, line, severity, stream) {}
|
|
94
|
+
ABSL_ATTRIBUTE_NORETURN ~S2FatalLogMessage() { abort(); }
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
// Logging stream that does nothing.
|
|
98
|
+
struct S2NullStream {
|
|
99
|
+
template <typename T>
|
|
100
|
+
S2NullStream& operator<<(const T& v) { return *this; }
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
// Used to suppress "unused value" warnings.
|
|
104
|
+
struct S2LogMessageVoidify {
|
|
105
|
+
// Must have precedence lower than << but higher than ?:.
|
|
106
|
+
void operator&(std::ostream&) {}
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
#define S2_LOG_MESSAGE_(LogMessageClass, log_severity) \
|
|
110
|
+
LogMessageClass(__FILE__, __LINE__, log_severity, std::cerr)
|
|
111
|
+
#define S2_LOG_INFO \
|
|
112
|
+
S2_LOG_MESSAGE_(S2LogMessage, absl::LogSeverity::kInfo)
|
|
113
|
+
#define S2_LOG_WARNING \
|
|
114
|
+
S2_LOG_MESSAGE_(S2LogMessage, absl::LogSeverity::kWarning)
|
|
115
|
+
#define S2_LOG_ERROR \
|
|
116
|
+
S2_LOG_MESSAGE_(S2LogMessage, absl::LogSeverity::kError)
|
|
117
|
+
#define S2_LOG_FATAL \
|
|
118
|
+
S2_LOG_MESSAGE_(S2FatalLogMessage, absl::LogSeverity::kFatal)
|
|
119
|
+
#ifndef NDEBUG
|
|
120
|
+
#define S2_LOG_DFATAL S2_LOG_FATAL
|
|
121
|
+
#else
|
|
122
|
+
#define S2_LOG_DFATAL S2_LOG_ERROR
|
|
123
|
+
#endif
|
|
124
|
+
|
|
125
|
+
#define S2_LOG(severity) S2_LOG_##severity.stream()
|
|
126
|
+
|
|
127
|
+
// Implementing this as if (...) {} else S2_LOG(...) will cause dangling else
|
|
128
|
+
// warnings when someone does if (...) S2_LOG_IF(...), so do this tricky
|
|
129
|
+
// thing instead.
|
|
130
|
+
#define S2_LOG_IF(severity, condition) \
|
|
131
|
+
!(condition) ? (void)0 : S2LogMessageVoidify() & S2_LOG(severity)
|
|
132
|
+
|
|
133
|
+
#define S2_CHECK(condition) \
|
|
134
|
+
S2_LOG_IF(FATAL, ABSL_PREDICT_FALSE(!(condition))) \
|
|
135
|
+
<< ("Check failed: " #condition " ")
|
|
136
|
+
|
|
137
|
+
#ifndef NDEBUG
|
|
138
|
+
|
|
139
|
+
#define S2_DLOG_IF S2_LOG_IF
|
|
140
|
+
#define S2_DCHECK S2_CHECK
|
|
141
|
+
|
|
142
|
+
#else // defined(NDEBUG)
|
|
143
|
+
|
|
144
|
+
#define S2_DLOG_IF(severity, condition) \
|
|
145
|
+
while (false && (condition)) S2NullStream()
|
|
146
|
+
#define S2_DCHECK(condition) \
|
|
147
|
+
while (false && (condition)) S2NullStream()
|
|
148
|
+
|
|
149
|
+
#endif // defined(NDEBUG)
|
|
150
|
+
|
|
151
|
+
#define S2_CHECK_OP(op, val1, val2) S2_CHECK((val1) op (val2))
|
|
152
|
+
#define S2_CHECK_EQ(val1, val2) S2_CHECK_OP(==, val1, val2)
|
|
153
|
+
#define S2_CHECK_NE(val1, val2) S2_CHECK_OP(!=, val1, val2)
|
|
154
|
+
#define S2_CHECK_LT(val1, val2) S2_CHECK_OP(<, val1, val2)
|
|
155
|
+
#define S2_CHECK_LE(val1, val2) S2_CHECK_OP(<=, val1, val2)
|
|
156
|
+
#define S2_CHECK_GT(val1, val2) S2_CHECK_OP(>, val1, val2)
|
|
157
|
+
#define S2_CHECK_GE(val1, val2) S2_CHECK_OP(>=, val1, val2)
|
|
158
|
+
|
|
159
|
+
#define S2_DCHECK_OP(op, val1, val2) S2_DCHECK((val1) op (val2))
|
|
160
|
+
#define S2_DCHECK_EQ(val1, val2) S2_DCHECK_OP(==, val1, val2)
|
|
161
|
+
#define S2_DCHECK_NE(val1, val2) S2_DCHECK_OP(!=, val1, val2)
|
|
162
|
+
#define S2_DCHECK_LT(val1, val2) S2_DCHECK_OP(<, val1, val2)
|
|
163
|
+
#define S2_DCHECK_LE(val1, val2) S2_DCHECK_OP(<=, val1, val2)
|
|
164
|
+
#define S2_DCHECK_GT(val1, val2) S2_DCHECK_OP(>, val1, val2)
|
|
165
|
+
#define S2_DCHECK_GE(val1, val2) S2_DCHECK_OP(>=, val1, val2)
|
|
166
|
+
|
|
167
|
+
// We don't support VLOG.
|
|
168
|
+
#define S2_VLOG(verbose_level) S2NullStream()
|
|
169
|
+
#define S2_VLOG_IS_ON(verbose_level) (false)
|
|
170
|
+
|
|
171
|
+
#endif // !defined(S2_USE_GLOG)
|
|
172
|
+
|
|
173
|
+
#endif // S2_BASE_LOGGING_H_
|