@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,322 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2017 The Abseil Authors.
|
|
3
|
+
//
|
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
// you may not use this file except in compliance with the License.
|
|
6
|
+
// You may obtain a copy of the License at
|
|
7
|
+
//
|
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
//
|
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
// See the License for the specific language governing permissions and
|
|
14
|
+
// limitations under the License.
|
|
15
|
+
//
|
|
16
|
+
|
|
17
|
+
#ifndef S2_THIRD_PARTY_ABSL_BASE_INTERNAL_UNALIGNED_ACCESS_H_
|
|
18
|
+
#define S2_THIRD_PARTY_ABSL_BASE_INTERNAL_UNALIGNED_ACCESS_H_
|
|
19
|
+
|
|
20
|
+
#include <cstring>
|
|
21
|
+
#include <cstdint>
|
|
22
|
+
|
|
23
|
+
#include "s2/third_party/absl/base/attributes.h"
|
|
24
|
+
|
|
25
|
+
// unaligned APIs
|
|
26
|
+
|
|
27
|
+
// Portable handling of unaligned loads, stores, and copies.
|
|
28
|
+
// On some platforms, like ARM, the copy functions can be more efficient
|
|
29
|
+
// then a load and a store.
|
|
30
|
+
//
|
|
31
|
+
// It is possible to implement all of these these using constant-length memcpy
|
|
32
|
+
// calls, which is portable and will usually be inlined into simple loads and
|
|
33
|
+
// stores if the architecture supports it. However, such inlining usually
|
|
34
|
+
// happens in a pass that's quite late in compilation, which means the resulting
|
|
35
|
+
// loads and stores cannot participate in many other optimizations, leading to
|
|
36
|
+
// overall worse code.
|
|
37
|
+
// TODO(user): Reimplement these unaligned access APIs using memcpy() when
|
|
38
|
+
// pretty early in the optimization pipeline. For x86-64 LLVM, this needs to be
|
|
39
|
+
// solution works and is better than memcpy(). For ARM LLVM, the packed
|
|
40
|
+
// attribute solution generates the same code as memcpy(). So we should just
|
|
41
|
+
// to LLVM.
|
|
42
|
+
|
|
43
|
+
// The unaligned API is C++ only. The declarations use C++ features
|
|
44
|
+
// (namespaces, inline) which are absent or incompatible in C.
|
|
45
|
+
#if defined(__cplusplus)
|
|
46
|
+
|
|
47
|
+
#if defined(ADDRESS_SANITIZER) || defined(THREAD_SANITIZER) ||\
|
|
48
|
+
defined(MEMORY_SANITIZER)
|
|
49
|
+
// Consider we have an unaligned load/store of 4 bytes from address 0x...05.
|
|
50
|
+
// AddressSanitizer will treat it as a 3-byte access to the range 05:07 and
|
|
51
|
+
// will miss a bug if 08 is the first unaddressable byte.
|
|
52
|
+
// ThreadSanitizer will also treat this as a 3-byte access to 05:07 and will
|
|
53
|
+
// miss a race between this access and some other accesses to 08.
|
|
54
|
+
// MemorySanitizer will correctly propagate the shadow on unaligned stores
|
|
55
|
+
// and correctly report bugs on unaligned loads, but it may not properly
|
|
56
|
+
// update and report the origin of the uninitialized memory.
|
|
57
|
+
// For all three tools, replacing an unaligned access with a tool-specific
|
|
58
|
+
// callback solves the problem.
|
|
59
|
+
|
|
60
|
+
// Make sure uint16_t/uint32_t/uint64_t are defined.
|
|
61
|
+
#include <cstdint>
|
|
62
|
+
|
|
63
|
+
extern "C" {
|
|
64
|
+
uint16_t __sanitizer_unaligned_load16(const void *p);
|
|
65
|
+
uint32_t __sanitizer_unaligned_load32(const void *p);
|
|
66
|
+
uint64_t __sanitizer_unaligned_load64(const void *p);
|
|
67
|
+
void __sanitizer_unaligned_store16(void *p, uint16_t v);
|
|
68
|
+
void __sanitizer_unaligned_store32(void *p, uint32_t v);
|
|
69
|
+
void __sanitizer_unaligned_store64(void *p, uint64_t v);
|
|
70
|
+
} // extern "C"
|
|
71
|
+
|
|
72
|
+
namespace absl {
|
|
73
|
+
namespace base_internal {
|
|
74
|
+
|
|
75
|
+
inline uint16_t UnalignedLoad16(const void *p) {
|
|
76
|
+
return __sanitizer_unaligned_load16(p);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
inline uint32_t UnalignedLoad32(const void *p) {
|
|
80
|
+
return __sanitizer_unaligned_load32(p);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
inline uint64_t UnalignedLoad64(const void *p) {
|
|
84
|
+
return __sanitizer_unaligned_load64(p);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
inline void UnalignedStore16(void *p, uint16_t v) {
|
|
88
|
+
__sanitizer_unaligned_store16(p, v);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
inline void UnalignedStore32(void *p, uint32_t v) {
|
|
92
|
+
__sanitizer_unaligned_store32(p, v);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
inline void UnalignedStore64(void *p, uint64_t v) {
|
|
96
|
+
__sanitizer_unaligned_store64(p, v);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
} // namespace base_internal
|
|
100
|
+
} // namespace absl
|
|
101
|
+
|
|
102
|
+
#define ABSL_INTERNAL_UNALIGNED_LOAD16(_p) \
|
|
103
|
+
(absl::base_internal::UnalignedLoad16(_p))
|
|
104
|
+
#define ABSL_INTERNAL_UNALIGNED_LOAD32(_p) \
|
|
105
|
+
(absl::base_internal::UnalignedLoad32(_p))
|
|
106
|
+
#define ABSL_INTERNAL_UNALIGNED_LOAD64(_p) \
|
|
107
|
+
(absl::base_internal::UnalignedLoad64(_p))
|
|
108
|
+
|
|
109
|
+
#define ABSL_INTERNAL_UNALIGNED_STORE16(_p, _val) \
|
|
110
|
+
(absl::base_internal::UnalignedStore16(_p, _val))
|
|
111
|
+
#define ABSL_INTERNAL_UNALIGNED_STORE32(_p, _val) \
|
|
112
|
+
(absl::base_internal::UnalignedStore32(_p, _val))
|
|
113
|
+
#define ABSL_INTERNAL_UNALIGNED_STORE64(_p, _val) \
|
|
114
|
+
(absl::base_internal::UnalignedStore64(_p, _val))
|
|
115
|
+
|
|
116
|
+
#elif defined(UNDEFINED_BEHAVIOR_SANITIZER)
|
|
117
|
+
|
|
118
|
+
namespace absl {
|
|
119
|
+
namespace base_internal {
|
|
120
|
+
|
|
121
|
+
inline uint16_t UnalignedLoad16(const void *p) {
|
|
122
|
+
uint16_t t;
|
|
123
|
+
memcpy(&t, p, sizeof t);
|
|
124
|
+
return t;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
inline uint32_t UnalignedLoad32(const void *p) {
|
|
128
|
+
uint32_t t;
|
|
129
|
+
memcpy(&t, p, sizeof t);
|
|
130
|
+
return t;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
inline uint64_t UnalignedLoad64(const void *p) {
|
|
134
|
+
uint64_t t;
|
|
135
|
+
memcpy(&t, p, sizeof t);
|
|
136
|
+
return t;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
inline void UnalignedStore16(void *p, uint16_t v) { memcpy(p, &v, sizeof v); }
|
|
140
|
+
|
|
141
|
+
inline void UnalignedStore32(void *p, uint32_t v) { memcpy(p, &v, sizeof v); }
|
|
142
|
+
|
|
143
|
+
inline void UnalignedStore64(void *p, uint64_t v) { memcpy(p, &v, sizeof v); }
|
|
144
|
+
|
|
145
|
+
} // namespace base_internal
|
|
146
|
+
} // namespace absl
|
|
147
|
+
|
|
148
|
+
#define ABSL_INTERNAL_UNALIGNED_LOAD16(_p) \
|
|
149
|
+
(absl::base_internal::UnalignedLoad16(_p))
|
|
150
|
+
#define ABSL_INTERNAL_UNALIGNED_LOAD32(_p) \
|
|
151
|
+
(absl::base_internal::UnalignedLoad32(_p))
|
|
152
|
+
#define ABSL_INTERNAL_UNALIGNED_LOAD64(_p) \
|
|
153
|
+
(absl::base_internal::UnalignedLoad64(_p))
|
|
154
|
+
|
|
155
|
+
#define ABSL_INTERNAL_UNALIGNED_STORE16(_p, _val) \
|
|
156
|
+
(absl::base_internal::UnalignedStore16(_p, _val))
|
|
157
|
+
#define ABSL_INTERNAL_UNALIGNED_STORE32(_p, _val) \
|
|
158
|
+
(absl::base_internal::UnalignedStore32(_p, _val))
|
|
159
|
+
#define ABSL_INTERNAL_UNALIGNED_STORE64(_p, _val) \
|
|
160
|
+
(absl::base_internal::UnalignedStore64(_p, _val))
|
|
161
|
+
|
|
162
|
+
#elif defined(__x86_64__) || defined(_M_X64) || defined(__i386) || \
|
|
163
|
+
defined(_M_IX86) || defined(__ppc__) || defined(__PPC__) || \
|
|
164
|
+
defined(__ppc64__) || defined(__PPC64__)
|
|
165
|
+
|
|
166
|
+
// x86 and x86-64 can perform unaligned loads/stores directly;
|
|
167
|
+
// modern PowerPC hardware can also do unaligned integer loads and stores;
|
|
168
|
+
// but note: the FPU still sends unaligned loads and stores to a trap handler!
|
|
169
|
+
|
|
170
|
+
#define ABSL_INTERNAL_UNALIGNED_LOAD16(_p) \
|
|
171
|
+
(*reinterpret_cast<const uint16_t *>(_p))
|
|
172
|
+
#define ABSL_INTERNAL_UNALIGNED_LOAD32(_p) \
|
|
173
|
+
(*reinterpret_cast<const uint32_t *>(_p))
|
|
174
|
+
#define ABSL_INTERNAL_UNALIGNED_LOAD64(_p) \
|
|
175
|
+
(*reinterpret_cast<const uint64_t *>(_p))
|
|
176
|
+
|
|
177
|
+
#define ABSL_INTERNAL_UNALIGNED_STORE16(_p, _val) \
|
|
178
|
+
(*reinterpret_cast<uint16_t *>(_p) = (_val))
|
|
179
|
+
#define ABSL_INTERNAL_UNALIGNED_STORE32(_p, _val) \
|
|
180
|
+
(*reinterpret_cast<uint32_t *>(_p) = (_val))
|
|
181
|
+
#define ABSL_INTERNAL_UNALIGNED_STORE64(_p, _val) \
|
|
182
|
+
(*reinterpret_cast<uint64_t *>(_p) = (_val))
|
|
183
|
+
|
|
184
|
+
#elif defined(__arm__) && \
|
|
185
|
+
!defined(__ARM_ARCH_5__) && \
|
|
186
|
+
!defined(__ARM_ARCH_5T__) && \
|
|
187
|
+
!defined(__ARM_ARCH_5TE__) && \
|
|
188
|
+
!defined(__ARM_ARCH_5TEJ__) && \
|
|
189
|
+
!defined(__ARM_ARCH_6__) && \
|
|
190
|
+
!defined(__ARM_ARCH_6J__) && \
|
|
191
|
+
!defined(__ARM_ARCH_6K__) && \
|
|
192
|
+
!defined(__ARM_ARCH_6Z__) && \
|
|
193
|
+
!defined(__ARM_ARCH_6ZK__) && \
|
|
194
|
+
!defined(__ARM_ARCH_6T2__)
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
// ARMv7 and newer support native unaligned accesses, but only of 16-bit
|
|
198
|
+
// and 32-bit values (not 64-bit); older versions either raise a fatal signal,
|
|
199
|
+
// do an unaligned read and rotate the words around a bit, or do the reads very
|
|
200
|
+
// slowly (trip through kernel mode). There's no simple #define that says just
|
|
201
|
+
// "ARMv7 or higher", so we have to filter away all ARMv5 and ARMv6
|
|
202
|
+
// sub-architectures. Newer gcc (>= 4.6) set an __ARM_FEATURE_ALIGNED #define,
|
|
203
|
+
// so in time, maybe we can move on to that.
|
|
204
|
+
//
|
|
205
|
+
// This is a mess, but there's not much we can do about it.
|
|
206
|
+
//
|
|
207
|
+
// To further complicate matters, only LDR instructions (single reads) are
|
|
208
|
+
// allowed to be unaligned, not LDRD (two reads) or LDM (many reads). Unless we
|
|
209
|
+
// explicitly tell the compiler that these accesses can be unaligned, it can and
|
|
210
|
+
// will combine accesses. On armcc, the way to signal this is done by accessing
|
|
211
|
+
// through the type (uint32_t __packed *), but GCC has no such attribute
|
|
212
|
+
// (it ignores __attribute__((packed)) on individual variables). However,
|
|
213
|
+
// we can tell it that a _struct_ is unaligned, which has the same effect,
|
|
214
|
+
// so we do that.
|
|
215
|
+
|
|
216
|
+
namespace absl {
|
|
217
|
+
namespace base_internal {
|
|
218
|
+
|
|
219
|
+
struct Unaligned16Struct {
|
|
220
|
+
uint16_t value;
|
|
221
|
+
uint8_t dummy; // To make the size non-power-of-two.
|
|
222
|
+
} ABSL_ATTRIBUTE_PACKED;
|
|
223
|
+
|
|
224
|
+
struct Unaligned32Struct {
|
|
225
|
+
uint32_t value;
|
|
226
|
+
uint8_t dummy; // To make the size non-power-of-two.
|
|
227
|
+
} ABSL_ATTRIBUTE_PACKED;
|
|
228
|
+
|
|
229
|
+
} // namespace base_internal
|
|
230
|
+
} // namespace absl
|
|
231
|
+
|
|
232
|
+
#define ABSL_INTERNAL_UNALIGNED_LOAD16(_p) \
|
|
233
|
+
((reinterpret_cast<const ::absl::base_internal::Unaligned16Struct *>(_p)) \
|
|
234
|
+
->value)
|
|
235
|
+
#define ABSL_INTERNAL_UNALIGNED_LOAD32(_p) \
|
|
236
|
+
((reinterpret_cast<const ::absl::base_internal::Unaligned32Struct *>(_p)) \
|
|
237
|
+
->value)
|
|
238
|
+
|
|
239
|
+
#define ABSL_INTERNAL_UNALIGNED_STORE16(_p, _val) \
|
|
240
|
+
((reinterpret_cast< ::absl::base_internal::Unaligned16Struct *>(_p)) \
|
|
241
|
+
->value = (_val))
|
|
242
|
+
#define ABSL_INTERNAL_UNALIGNED_STORE32(_p, _val) \
|
|
243
|
+
((reinterpret_cast< ::absl::base_internal::Unaligned32Struct *>(_p)) \
|
|
244
|
+
->value = (_val))
|
|
245
|
+
|
|
246
|
+
namespace absl {
|
|
247
|
+
namespace base_internal {
|
|
248
|
+
|
|
249
|
+
inline uint64_t UnalignedLoad64(const void *p) {
|
|
250
|
+
uint64_t t;
|
|
251
|
+
memcpy(&t, p, sizeof t);
|
|
252
|
+
return t;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
inline void UnalignedStore64(void *p, uint64_t v) { memcpy(p, &v, sizeof v); }
|
|
256
|
+
|
|
257
|
+
} // namespace base_internal
|
|
258
|
+
} // namespace absl
|
|
259
|
+
|
|
260
|
+
#define ABSL_INTERNAL_UNALIGNED_LOAD64(_p) \
|
|
261
|
+
(absl::base_internal::UnalignedLoad64(_p))
|
|
262
|
+
#define ABSL_INTERNAL_UNALIGNED_STORE64(_p, _val) \
|
|
263
|
+
(absl::base_internal::UnalignedStore64(_p, _val))
|
|
264
|
+
|
|
265
|
+
#else
|
|
266
|
+
|
|
267
|
+
// ABSL_INTERNAL_NEED_ALIGNED_LOADS is defined when the underlying platform
|
|
268
|
+
// doesn't support unaligned access.
|
|
269
|
+
#define ABSL_INTERNAL_NEED_ALIGNED_LOADS
|
|
270
|
+
|
|
271
|
+
// These functions are provided for architectures that don't support
|
|
272
|
+
// unaligned loads and stores.
|
|
273
|
+
|
|
274
|
+
namespace absl {
|
|
275
|
+
namespace base_internal {
|
|
276
|
+
|
|
277
|
+
inline uint16_t UnalignedLoad16(const void *p) {
|
|
278
|
+
uint16_t t;
|
|
279
|
+
memcpy(&t, p, sizeof t);
|
|
280
|
+
return t;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
inline uint32_t UnalignedLoad32(const void *p) {
|
|
284
|
+
uint32_t t;
|
|
285
|
+
memcpy(&t, p, sizeof t);
|
|
286
|
+
return t;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
inline uint64_t UnalignedLoad64(const void *p) {
|
|
290
|
+
uint64_t t;
|
|
291
|
+
memcpy(&t, p, sizeof t);
|
|
292
|
+
return t;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
inline void UnalignedStore16(void *p, uint16_t v) { memcpy(p, &v, sizeof v); }
|
|
296
|
+
|
|
297
|
+
inline void UnalignedStore32(void *p, uint32_t v) { memcpy(p, &v, sizeof v); }
|
|
298
|
+
|
|
299
|
+
inline void UnalignedStore64(void *p, uint64_t v) { memcpy(p, &v, sizeof v); }
|
|
300
|
+
|
|
301
|
+
} // namespace base_internal
|
|
302
|
+
} // namespace absl
|
|
303
|
+
|
|
304
|
+
#define ABSL_INTERNAL_UNALIGNED_LOAD16(_p) \
|
|
305
|
+
(absl::base_internal::UnalignedLoad16(_p))
|
|
306
|
+
#define ABSL_INTERNAL_UNALIGNED_LOAD32(_p) \
|
|
307
|
+
(absl::base_internal::UnalignedLoad32(_p))
|
|
308
|
+
#define ABSL_INTERNAL_UNALIGNED_LOAD64(_p) \
|
|
309
|
+
(absl::base_internal::UnalignedLoad64(_p))
|
|
310
|
+
|
|
311
|
+
#define ABSL_INTERNAL_UNALIGNED_STORE16(_p, _val) \
|
|
312
|
+
(absl::base_internal::UnalignedStore16(_p, _val))
|
|
313
|
+
#define ABSL_INTERNAL_UNALIGNED_STORE32(_p, _val) \
|
|
314
|
+
(absl::base_internal::UnalignedStore32(_p, _val))
|
|
315
|
+
#define ABSL_INTERNAL_UNALIGNED_STORE64(_p, _val) \
|
|
316
|
+
(absl::base_internal::UnalignedStore64(_p, _val))
|
|
317
|
+
|
|
318
|
+
#endif
|
|
319
|
+
|
|
320
|
+
#endif // defined(__cplusplus), end of unaligned API
|
|
321
|
+
|
|
322
|
+
#endif // S2_THIRD_PARTY_ABSL_BASE_INTERNAL_UNALIGNED_ACCESS_H_
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// Copyright 2017 The Abseil Authors.
|
|
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
|
+
// NOTE FOR GOOGLERS:
|
|
17
|
+
//
|
|
18
|
+
// IWYU pragma: private, include "base/log_severity.h"
|
|
19
|
+
|
|
20
|
+
#ifndef S2_THIRD_PARTY_ABSL_BASE_INTERNAL_LOG_SEVERITY_H_
|
|
21
|
+
#define S2_THIRD_PARTY_ABSL_BASE_INTERNAL_LOG_SEVERITY_H_
|
|
22
|
+
|
|
23
|
+
#include <array>
|
|
24
|
+
|
|
25
|
+
#include "s2/third_party/absl/base/attributes.h"
|
|
26
|
+
|
|
27
|
+
namespace absl {
|
|
28
|
+
|
|
29
|
+
// Four severity levels are defined. Logging APIs should terminate the program
|
|
30
|
+
// when a message is logged at severity `kFatal`; the other levels have no
|
|
31
|
+
// special semantics.
|
|
32
|
+
enum class LogSeverity : int {
|
|
33
|
+
kInfo = 0,
|
|
34
|
+
kWarning = 1,
|
|
35
|
+
kError = 2,
|
|
36
|
+
kFatal = 3,
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
// Returns an iterable of all standard `absl::LogSeverity` values, ordered from
|
|
40
|
+
// least to most severe.
|
|
41
|
+
constexpr std::array<absl::LogSeverity, 4> LogSeverities() {
|
|
42
|
+
return {{absl::LogSeverity::kInfo, absl::LogSeverity::kWarning,
|
|
43
|
+
absl::LogSeverity::kError, absl::LogSeverity::kFatal}};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// `absl::kLogDebugFatal` equals `absl::LogSeverity::kFatal` in debug builds
|
|
47
|
+
// (i.e. when `NDEBUG` is not defined) and `absl::LogSeverity::kError`
|
|
48
|
+
// otherwise. It is extern to prevent ODR violations when compilation units
|
|
49
|
+
// with different build settings are linked together.
|
|
50
|
+
ABSL_CONST_INIT extern const absl::LogSeverity kLogDebugFatal;
|
|
51
|
+
|
|
52
|
+
// Returns the all-caps string representation (e.g. "INFO") of the specified
|
|
53
|
+
// severity level if it is one of the normal levels and "UNKNOWN" otherwise.
|
|
54
|
+
constexpr const char* LogSeverityName(absl::LogSeverity s) {
|
|
55
|
+
return s == absl::LogSeverity::kInfo
|
|
56
|
+
? "INFO"
|
|
57
|
+
: s == absl::LogSeverity::kWarning
|
|
58
|
+
? "WARNING"
|
|
59
|
+
: s == absl::LogSeverity::kError
|
|
60
|
+
? "ERROR"
|
|
61
|
+
: s == absl::LogSeverity::kFatal ? "FATAL" : "UNKNOWN";
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Values less than `kInfo` normalize to `kInfo`; values greater than `kFatal`
|
|
65
|
+
// normalize to `kError` (**NOT** `kFatal`).
|
|
66
|
+
constexpr absl::LogSeverity NormalizeLogSeverity(absl::LogSeverity s) {
|
|
67
|
+
return s < absl::LogSeverity::kInfo
|
|
68
|
+
? absl::LogSeverity::kInfo
|
|
69
|
+
: s > absl::LogSeverity::kFatal ? absl::LogSeverity::kError : s;
|
|
70
|
+
}
|
|
71
|
+
constexpr absl::LogSeverity NormalizeLogSeverity(int s) {
|
|
72
|
+
return NormalizeLogSeverity(static_cast<absl::LogSeverity>(s));
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
} // namespace absl
|
|
76
|
+
|
|
77
|
+
#endif // S2_THIRD_PARTY_ABSL_BASE_INTERNAL_LOG_SEVERITY_H_
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2017 The Abseil Authors.
|
|
3
|
+
//
|
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
// you may not use this file except in compliance with the License.
|
|
6
|
+
// You may obtain a copy of the License at
|
|
7
|
+
//
|
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
//
|
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
// See the License for the specific language governing permissions and
|
|
14
|
+
// limitations under the License.
|
|
15
|
+
//
|
|
16
|
+
// -----------------------------------------------------------------------------
|
|
17
|
+
// File: macros.h
|
|
18
|
+
// -----------------------------------------------------------------------------
|
|
19
|
+
//
|
|
20
|
+
// This header file defines the set of language macros used within Abseil code.
|
|
21
|
+
// For the set of macros used to determine supported compilers and platforms,
|
|
22
|
+
// see absl/base/config.h instead.
|
|
23
|
+
//
|
|
24
|
+
// This code is compiled directly on many platforms, including client
|
|
25
|
+
// platforms like Windows, Mac, and embedded systems. Before making
|
|
26
|
+
// any changes here, make sure that you're not breaking any platforms.
|
|
27
|
+
|
|
28
|
+
#ifndef S2_THIRD_PARTY_ABSL_BASE_MACROS_H_
|
|
29
|
+
#define S2_THIRD_PARTY_ABSL_BASE_MACROS_H_
|
|
30
|
+
|
|
31
|
+
#include <cassert>
|
|
32
|
+
#include <cstddef>
|
|
33
|
+
|
|
34
|
+
#include "s2/third_party/absl/base/port.h"
|
|
35
|
+
|
|
36
|
+
// ABSL_ARRAYSIZE()
|
|
37
|
+
//
|
|
38
|
+
// Returns the number of elements in an array as a compile-time constant, which
|
|
39
|
+
// can be used in defining new arrays. If you use this macro on a pointer by
|
|
40
|
+
// mistake, you will get a compile-time error.
|
|
41
|
+
#define ABSL_ARRAYSIZE(array) \
|
|
42
|
+
(sizeof(::absl::macros_internal::ArraySizeHelper(array)))
|
|
43
|
+
|
|
44
|
+
namespace absl {
|
|
45
|
+
namespace macros_internal {
|
|
46
|
+
// Note: this internal template function declaration is used by ABSL_ARRAYSIZE.
|
|
47
|
+
// The function doesn't need a definition, as we only use its type.
|
|
48
|
+
template <typename T, size_t N>
|
|
49
|
+
auto ArraySizeHelper(const T (&array)[N]) -> char (&)[N];
|
|
50
|
+
} // namespace macros_internal
|
|
51
|
+
} // namespace absl
|
|
52
|
+
|
|
53
|
+
// TODO(b/62370839): Replace arraysize() with ABSL_ARRAYSIZE().
|
|
54
|
+
template <typename T, size_t N>
|
|
55
|
+
auto ArraySizeHelper(const T (&array)[N]) -> char (&)[N];
|
|
56
|
+
|
|
57
|
+
#define arraysize(array) (sizeof(ArraySizeHelper(array)))
|
|
58
|
+
|
|
59
|
+
// kLinkerInitialized
|
|
60
|
+
//
|
|
61
|
+
// An enum used only as a constructor argument to indicate that a variable has
|
|
62
|
+
// static storage duration, and that the constructor should do nothing to its
|
|
63
|
+
// state. Use of this macro indicates to the reader that it is legal to
|
|
64
|
+
// declare a static instance of the class, provided the constructor is given
|
|
65
|
+
// the absl::base_internal::kLinkerInitialized argument.
|
|
66
|
+
//
|
|
67
|
+
// Normally, it is unsafe to declare a static variable that has a constructor or
|
|
68
|
+
// a destructor because invocation order is undefined. However, if the type can
|
|
69
|
+
// be zero-initialized (which the loader does for static variables) into a valid
|
|
70
|
+
// state and the type's destructor does not affect storage, then a constructor
|
|
71
|
+
// for static initialization can be declared.
|
|
72
|
+
//
|
|
73
|
+
// Example:
|
|
74
|
+
// // Declaration
|
|
75
|
+
// explicit MyClass(absl::base_internal:LinkerInitialized x) {}
|
|
76
|
+
//
|
|
77
|
+
// // Invocation
|
|
78
|
+
// static MyClass my_global(absl::base_internal::kLinkerInitialized);
|
|
79
|
+
namespace absl {
|
|
80
|
+
namespace base_internal {
|
|
81
|
+
enum LinkerInitialized {
|
|
82
|
+
kLinkerInitialized = 0,
|
|
83
|
+
LINKER_INITIALIZED = 0,
|
|
84
|
+
};
|
|
85
|
+
} // namespace base_internal
|
|
86
|
+
} // namespace absl
|
|
87
|
+
|
|
88
|
+
namespace base {
|
|
89
|
+
using absl::base_internal::LinkerInitialized;
|
|
90
|
+
using absl::base_internal::LINKER_INITIALIZED;
|
|
91
|
+
} // namespace base
|
|
92
|
+
|
|
93
|
+
// ABSL_FALLTHROUGH_INTENDED
|
|
94
|
+
//
|
|
95
|
+
// Annotates implicit fall-through between switch labels, allowing a case to
|
|
96
|
+
// indicate intentional fallthrough and turn off warnings about any lack of a
|
|
97
|
+
// `break` statement. The ABSL_FALLTHROUGH_INTENDED macro should be followed by
|
|
98
|
+
// a semicolon and can be used in most places where `break` can, provided that
|
|
99
|
+
// no statements exist between it and the next switch label.
|
|
100
|
+
//
|
|
101
|
+
// Example:
|
|
102
|
+
//
|
|
103
|
+
// switch (x) {
|
|
104
|
+
// case 40:
|
|
105
|
+
// case 41:
|
|
106
|
+
// if (truth_is_out_there) {
|
|
107
|
+
// ++x;
|
|
108
|
+
// ABSL_FALLTHROUGH_INTENDED; // Use instead of/along with annotations
|
|
109
|
+
// // in comments
|
|
110
|
+
// } else {
|
|
111
|
+
// return x;
|
|
112
|
+
// }
|
|
113
|
+
// case 42:
|
|
114
|
+
// ...
|
|
115
|
+
//
|
|
116
|
+
// Notes: when compiled with clang in C++11 mode, the ABSL_FALLTHROUGH_INTENDED
|
|
117
|
+
// macro is expanded to the [[clang::fallthrough]] attribute, which is analysed
|
|
118
|
+
// when performing switch labels fall-through diagnostic
|
|
119
|
+
// (`-Wimplicit-fallthrough`). See clang documentation on language extensions
|
|
120
|
+
// for details:
|
|
121
|
+
// http://clang.llvm.org/docs/AttributeReference.html#fallthrough-clang-fallthrough
|
|
122
|
+
//
|
|
123
|
+
// When used with unsupported compilers, the ABSL_FALLTHROUGH_INTENDED macro
|
|
124
|
+
// has no effect on diagnostics. In any case this macro has no effect on runtime
|
|
125
|
+
// behavior and performance of code.
|
|
126
|
+
// TODO(b/62370839): Replace FALLTHROUGH_INTENDED with
|
|
127
|
+
// ABSL_FALLTHROUGH_INTENDED.
|
|
128
|
+
#if defined(__clang__) && defined(__has_warning)
|
|
129
|
+
#if __has_feature(cxx_attributes) && __has_warning("-Wimplicit-fallthrough")
|
|
130
|
+
#define FALLTHROUGH_INTENDED [[clang::fallthrough]]
|
|
131
|
+
#endif
|
|
132
|
+
#elif defined(__GNUC__) && __GNUC__ >= 7
|
|
133
|
+
#define FALLTHROUGH_INTENDED [[gnu::fallthrough]]
|
|
134
|
+
#endif
|
|
135
|
+
|
|
136
|
+
#ifndef FALLTHROUGH_INTENDED
|
|
137
|
+
#define FALLTHROUGH_INTENDED do { } while (0)
|
|
138
|
+
#endif
|
|
139
|
+
#ifdef ABSL_FALLTHROUGH_INTENDED
|
|
140
|
+
#error "ABSL_FALLTHROUGH_INTENDED should not be defined."
|
|
141
|
+
#endif
|
|
142
|
+
|
|
143
|
+
// TODO(user): Use c++17 standard [[fallthrough]] macro, when supported.
|
|
144
|
+
#if defined(__clang__) && defined(__has_warning)
|
|
145
|
+
#if __has_feature(cxx_attributes) && __has_warning("-Wimplicit-fallthrough")
|
|
146
|
+
#define ABSL_FALLTHROUGH_INTENDED [[clang::fallthrough]]
|
|
147
|
+
#endif
|
|
148
|
+
#elif defined(__GNUC__) && __GNUC__ >= 7
|
|
149
|
+
#define ABSL_FALLTHROUGH_INTENDED [[gnu::fallthrough]]
|
|
150
|
+
#endif
|
|
151
|
+
|
|
152
|
+
#ifndef ABSL_FALLTHROUGH_INTENDED
|
|
153
|
+
#define ABSL_FALLTHROUGH_INTENDED \
|
|
154
|
+
do { \
|
|
155
|
+
} while (0)
|
|
156
|
+
#endif
|
|
157
|
+
|
|
158
|
+
// ABSL_DEPRECATED()
|
|
159
|
+
//
|
|
160
|
+
// Marks a deprecated class, struct, enum, function, method and variable
|
|
161
|
+
// declarations. The macro argument is used as a custom diagnostic message (e.g.
|
|
162
|
+
// suggestion of a better alternative).
|
|
163
|
+
//
|
|
164
|
+
// Example:
|
|
165
|
+
//
|
|
166
|
+
// class ABSL_DEPRECATED("Use Bar instead") Foo {...};
|
|
167
|
+
// ABSL_DEPRECATED("Use Baz instead") void Bar() {...}
|
|
168
|
+
//
|
|
169
|
+
// Every usage of a deprecated entity will trigger a warning when compiled with
|
|
170
|
+
// clang's `-Wdeprecated-declarations` option. This option is turned off by
|
|
171
|
+
// default, but the warnings will be reported by clang-tidy.
|
|
172
|
+
#if defined(__clang__) && __cplusplus >= 201103L
|
|
173
|
+
#define ABSL_DEPRECATED(message) __attribute__((deprecated(message)))
|
|
174
|
+
#endif
|
|
175
|
+
|
|
176
|
+
#ifndef ABSL_DEPRECATED
|
|
177
|
+
#define ABSL_DEPRECATED(message)
|
|
178
|
+
#endif
|
|
179
|
+
|
|
180
|
+
// ABSL_BAD_CALL_IF()
|
|
181
|
+
//
|
|
182
|
+
// Used on a function overload to trap bad calls: any call that matches the
|
|
183
|
+
// overload will cause a compile-time error. This macro uses a clang-specific
|
|
184
|
+
// "enable_if" attribute, as described at
|
|
185
|
+
// http://clang.llvm.org/docs/AttributeReference.html#enable-if
|
|
186
|
+
//
|
|
187
|
+
// Overloads which use this macro should be bracketed by
|
|
188
|
+
// `#ifdef ABSL_BAD_CALL_IF`.
|
|
189
|
+
//
|
|
190
|
+
// Example:
|
|
191
|
+
//
|
|
192
|
+
// int isdigit(int c);
|
|
193
|
+
// #ifdef ABSL_BAD_CALL_IF
|
|
194
|
+
// int isdigit(int c)
|
|
195
|
+
// ABSL_BAD_CALL_IF(c <= -1 || c > 255,
|
|
196
|
+
// "'c' must have the value of an unsigned char or EOF");
|
|
197
|
+
// #endif // ABSL_BAD_CALL_IF
|
|
198
|
+
|
|
199
|
+
#if defined(__clang__)
|
|
200
|
+
# if __has_attribute(enable_if)
|
|
201
|
+
# define ABSL_BAD_CALL_IF(expr, msg) \
|
|
202
|
+
__attribute__((enable_if(expr, "Bad call trap"), unavailable(msg)))
|
|
203
|
+
# endif
|
|
204
|
+
#endif
|
|
205
|
+
|
|
206
|
+
// ABSL_ASSERT()
|
|
207
|
+
//
|
|
208
|
+
// In C++11, `assert` can't be used portably within constexpr functions.
|
|
209
|
+
// ABSL_ASSERT functions as a runtime assert but works in C++11 constexpr
|
|
210
|
+
// functions. Example:
|
|
211
|
+
//
|
|
212
|
+
// constexpr double Divide(double a, double b) {
|
|
213
|
+
// return ABSL_ASSERT(b != 0), a / b;
|
|
214
|
+
// }
|
|
215
|
+
//
|
|
216
|
+
// This macro is inspired by
|
|
217
|
+
// https://akrzemi1.wordpress.com/2017/05/18/asserts-in-constexpr-functions/
|
|
218
|
+
#if defined(NDEBUG)
|
|
219
|
+
#define ABSL_ASSERT(expr) (false ? (void)(expr) : (void)0)
|
|
220
|
+
#else
|
|
221
|
+
#define ABSL_ASSERT(expr) \
|
|
222
|
+
(ABSL_PREDICT_TRUE((expr)) ? (void)0 \
|
|
223
|
+
: [] { assert(false && #expr); }()) // NOLINT
|
|
224
|
+
#endif
|
|
225
|
+
|
|
226
|
+
#ifdef ABSL_HAVE_EXCEPTIONS
|
|
227
|
+
#define ABSL_INTERNAL_TRY try
|
|
228
|
+
#define ABSL_INTERNAL_CATCH_ANY catch (...)
|
|
229
|
+
#define ABSL_INTERNAL_RETHROW do { throw; } while (false)
|
|
230
|
+
#else // ABSL_HAVE_EXCEPTIONS
|
|
231
|
+
#define ABSL_INTERNAL_TRY if (true)
|
|
232
|
+
#define ABSL_INTERNAL_CATCH_ANY else if (false)
|
|
233
|
+
#define ABSL_INTERNAL_RETHROW do {} while (false)
|
|
234
|
+
#endif // ABSL_HAVE_EXCEPTIONS
|
|
235
|
+
|
|
236
|
+
#endif // S2_THIRD_PARTY_ABSL_BASE_MACROS_H_
|