@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,177 @@
|
|
|
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: optimization.h
|
|
18
|
+
// -----------------------------------------------------------------------------
|
|
19
|
+
//
|
|
20
|
+
// This header file defines portable macros for performance optimization.
|
|
21
|
+
|
|
22
|
+
#ifndef S2_THIRD_PARTY_ABSL_BASE_OPTIMIZATION_H_
|
|
23
|
+
#define S2_THIRD_PARTY_ABSL_BASE_OPTIMIZATION_H_
|
|
24
|
+
|
|
25
|
+
#include "s2/third_party/absl/base/config.h"
|
|
26
|
+
|
|
27
|
+
// ABSL_BLOCK_TAIL_CALL_OPTIMIZATION
|
|
28
|
+
//
|
|
29
|
+
// Instructs the compiler to avoid optimizing tail-call recursion. Use of this
|
|
30
|
+
// macro is useful when you wish to preserve the existing function order within
|
|
31
|
+
// a stack trace for logging, debugging, or profiling purposes.
|
|
32
|
+
//
|
|
33
|
+
// Example:
|
|
34
|
+
//
|
|
35
|
+
// int f() {
|
|
36
|
+
// int result = g();
|
|
37
|
+
// ABSL_BLOCK_TAIL_CALL_OPTIMIZATION();
|
|
38
|
+
// return result;
|
|
39
|
+
// }
|
|
40
|
+
#if defined(__pnacl__)
|
|
41
|
+
#define ABSL_BLOCK_TAIL_CALL_OPTIMIZATION() if (volatile int x = 0) { (void)x; }
|
|
42
|
+
#elif defined(__clang__)
|
|
43
|
+
// Clang will not tail call given inline volatile assembly.
|
|
44
|
+
#define ABSL_BLOCK_TAIL_CALL_OPTIMIZATION() __asm__ __volatile__("")
|
|
45
|
+
#elif defined(__GNUC__)
|
|
46
|
+
// GCC will not tail call given inline volatile assembly.
|
|
47
|
+
#define ABSL_BLOCK_TAIL_CALL_OPTIMIZATION() __asm__ __volatile__("")
|
|
48
|
+
#elif defined(_MSC_VER)
|
|
49
|
+
#include <intrin.h>
|
|
50
|
+
// The __nop() intrinsic blocks the optimisation.
|
|
51
|
+
#define ABSL_BLOCK_TAIL_CALL_OPTIMIZATION() __nop()
|
|
52
|
+
#else
|
|
53
|
+
#define ABSL_BLOCK_TAIL_CALL_OPTIMIZATION() if (volatile int x = 0) { (void)x; }
|
|
54
|
+
#endif
|
|
55
|
+
|
|
56
|
+
// ABSL_CACHELINE_SIZE
|
|
57
|
+
//
|
|
58
|
+
// Explicitly defines the size of the L1 cache for purposes of alignment.
|
|
59
|
+
// Setting the cacheline size allows you to specify that certain objects be
|
|
60
|
+
// aligned on a cacheline boundary with `ABSL_CACHELINE_ALIGNED` declarations.
|
|
61
|
+
// (See below.)
|
|
62
|
+
//
|
|
63
|
+
// NOTE: this macro should be replaced with the following C++17 features, when
|
|
64
|
+
// those are generally available:
|
|
65
|
+
//
|
|
66
|
+
// * `std::hardware_constructive_interference_size`
|
|
67
|
+
// * `std::hardware_destructive_interference_size`
|
|
68
|
+
//
|
|
69
|
+
// See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0154r1.html
|
|
70
|
+
// for more information.
|
|
71
|
+
#if defined(__GNUC__) && !defined(SWIG)
|
|
72
|
+
// Cache line alignment
|
|
73
|
+
#if defined(__i386__) || defined(__x86_64__)
|
|
74
|
+
#define ABSL_CACHELINE_SIZE 64
|
|
75
|
+
#elif defined(__powerpc64__)
|
|
76
|
+
#define ABSL_CACHELINE_SIZE 128
|
|
77
|
+
#elif defined(__aarch64__)
|
|
78
|
+
// We would need to read special register ctr_el0 to find out L1 dcache size.
|
|
79
|
+
// This value is a good estimate based on a real aarch64 machine.
|
|
80
|
+
#define ABSL_CACHELINE_SIZE 64
|
|
81
|
+
#elif defined(__arm__)
|
|
82
|
+
// Cache line sizes for ARM: These values are not strictly correct since
|
|
83
|
+
// cache line sizes depend on implementations, not architectures. There
|
|
84
|
+
// are even implementations with cache line sizes configurable at boot
|
|
85
|
+
// time.
|
|
86
|
+
#if defined(__ARM_ARCH_5T__)
|
|
87
|
+
#define ABSL_CACHELINE_SIZE 32
|
|
88
|
+
#elif defined(__ARM_ARCH_7A__)
|
|
89
|
+
#define ABSL_CACHELINE_SIZE 64
|
|
90
|
+
#endif
|
|
91
|
+
#endif
|
|
92
|
+
|
|
93
|
+
#ifndef ABSL_CACHELINE_SIZE
|
|
94
|
+
// A reasonable default guess. Note that overestimates tend to waste more
|
|
95
|
+
// space, while underestimates tend to waste more time.
|
|
96
|
+
#define ABSL_CACHELINE_SIZE 64
|
|
97
|
+
#endif
|
|
98
|
+
|
|
99
|
+
// ABSL_CACHELINE_ALIGNED
|
|
100
|
+
//
|
|
101
|
+
// Indicates that the declared object be cache aligned using
|
|
102
|
+
// `ABSL_CACHELINE_SIZE` (see above). Cacheline aligning objects allows you to
|
|
103
|
+
// load a set of related objects in the L1 cache for performance improvements.
|
|
104
|
+
// Cacheline aligning objects properly allows constructive memory sharing and
|
|
105
|
+
// prevents destructive (or "false") memory sharing.
|
|
106
|
+
//
|
|
107
|
+
// NOTE: this macro should be replaced with usage of `alignas()` using
|
|
108
|
+
// `std::hardware_constructive_interference_size` and/or
|
|
109
|
+
// `std::hardware_destructive_interference_size` when available within C++17.
|
|
110
|
+
//
|
|
111
|
+
// See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0154r1.html
|
|
112
|
+
// for more information.
|
|
113
|
+
//
|
|
114
|
+
// On some compilers, `ABSL_CACHELINE_ALIGNED` expands to an `__attribute__`
|
|
115
|
+
// or `__declspec` attribute. For compilers where this is not known to work,
|
|
116
|
+
// the macro expands to nothing.
|
|
117
|
+
//
|
|
118
|
+
// No further guarantees are made here. The result of applying the macro
|
|
119
|
+
// to variables and types is always implementation-defined.
|
|
120
|
+
//
|
|
121
|
+
// WARNING: It is easy to use this attribute incorrectly, even to the point
|
|
122
|
+
// of causing bugs that are difficult to diagnose, crash, etc. It does not
|
|
123
|
+
// of itself guarantee that objects are aligned to a cache line.
|
|
124
|
+
//
|
|
125
|
+
// NOTE: Some compilers are picky about the locations of annotations such as
|
|
126
|
+
// this attribute, so prefer to put it at the beginning of your declaration.
|
|
127
|
+
// For example,
|
|
128
|
+
//
|
|
129
|
+
// ABSL_CACHELINE_ALIGNED static Foo* foo = ...
|
|
130
|
+
//
|
|
131
|
+
// class ABSL_CACHELINE_ALIGNED Bar { ...
|
|
132
|
+
//
|
|
133
|
+
// Recommendations:
|
|
134
|
+
//
|
|
135
|
+
// 1) Consult compiler documentation; this comment is not kept in sync as
|
|
136
|
+
// toolchains evolve.
|
|
137
|
+
// 2) Verify your use has the intended effect. This often requires inspecting
|
|
138
|
+
// the generated machine code.
|
|
139
|
+
// 3) Prefer applying this attribute to individual variables. Avoid
|
|
140
|
+
// applying it to types. This tends to localize the effect.
|
|
141
|
+
// 4) See go/cache-line-interference for further guidance.
|
|
142
|
+
#define ABSL_CACHELINE_ALIGNED __attribute__((aligned(ABSL_CACHELINE_SIZE)))
|
|
143
|
+
#elif defined(_MSC_VER)
|
|
144
|
+
#define ABSL_CACHELINE_SIZE 64
|
|
145
|
+
#define ABSL_CACHELINE_ALIGNED __declspec(align(ABSL_CACHELINE_SIZE))
|
|
146
|
+
#else
|
|
147
|
+
#define ABSL_CACHELINE_SIZE 64
|
|
148
|
+
#define ABSL_CACHELINE_ALIGNED
|
|
149
|
+
#endif
|
|
150
|
+
|
|
151
|
+
// ABSL_PREDICT_TRUE, ABSL_PREDICT_FALSE
|
|
152
|
+
//
|
|
153
|
+
// Enables the compiler to prioritize compilation using static analysis for
|
|
154
|
+
// likely paths within a boolean branch.
|
|
155
|
+
//
|
|
156
|
+
// Example:
|
|
157
|
+
//
|
|
158
|
+
// if (ABSL_PREDICT_TRUE(expression)) {
|
|
159
|
+
// return result; // Faster if more likely
|
|
160
|
+
// } else {
|
|
161
|
+
// return 0;
|
|
162
|
+
// }
|
|
163
|
+
//
|
|
164
|
+
// Compilers can use the information that a certain branch is not likely to be
|
|
165
|
+
// taken (for instance, a CHECK failure) to optimize for the common case in
|
|
166
|
+
// the absence of better information (ie. compiling gcc with `-fprofile-arcs`).
|
|
167
|
+
#if (ABSL_HAVE_BUILTIN(__builtin_expect) || \
|
|
168
|
+
(defined(__GNUC__) && !defined(__clang__))) && \
|
|
169
|
+
!defined(SWIG)
|
|
170
|
+
#define ABSL_PREDICT_FALSE(x) (__builtin_expect(x, 0))
|
|
171
|
+
#define ABSL_PREDICT_TRUE(x) (__builtin_expect(!!(x), 1))
|
|
172
|
+
#else
|
|
173
|
+
#define ABSL_PREDICT_FALSE(x) (x)
|
|
174
|
+
#define ABSL_PREDICT_TRUE(x) (x)
|
|
175
|
+
#endif
|
|
176
|
+
|
|
177
|
+
#endif // S2_THIRD_PARTY_ABSL_BASE_OPTIMIZATION_H_
|
|
@@ -0,0 +1,124 @@
|
|
|
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
|
+
// File: policy_checks.h
|
|
17
|
+
// -----------------------------------------------------------------------------
|
|
18
|
+
//
|
|
19
|
+
// This header enforces a minimum set of policies at build time, such as the
|
|
20
|
+
// supported compiler and library versions. Unsupported configurations are
|
|
21
|
+
// reported with `#error`. This enforcement is best effort, so successfully
|
|
22
|
+
// compiling this header does not guarantee a supported configuration.
|
|
23
|
+
|
|
24
|
+
#ifndef S2_THIRD_PARTY_ABSL_BASE_POLICY_CHECKS_H_
|
|
25
|
+
#define S2_THIRD_PARTY_ABSL_BASE_POLICY_CHECKS_H_
|
|
26
|
+
|
|
27
|
+
// Included for the __GLIBC_PREREQ macro used below.
|
|
28
|
+
#include <climits>
|
|
29
|
+
|
|
30
|
+
// Included for the _STLPORT_VERSION macro used below.
|
|
31
|
+
#if defined(__cplusplus)
|
|
32
|
+
#include <cstddef>
|
|
33
|
+
#endif
|
|
34
|
+
|
|
35
|
+
// -----------------------------------------------------------------------------
|
|
36
|
+
// Operating System Check
|
|
37
|
+
// -----------------------------------------------------------------------------
|
|
38
|
+
|
|
39
|
+
#if defined(__CYGWIN__)
|
|
40
|
+
#error "Cygwin is not supported."
|
|
41
|
+
#endif
|
|
42
|
+
|
|
43
|
+
// -----------------------------------------------------------------------------
|
|
44
|
+
// Compiler Check
|
|
45
|
+
// -----------------------------------------------------------------------------
|
|
46
|
+
|
|
47
|
+
// We support MSVC++ 14.0 update 2 and later.
|
|
48
|
+
// This minimum will go up.
|
|
49
|
+
#if defined(_MSC_FULL_VER) && _MSC_FULL_VER < 190023918 && !defined(__clang__)
|
|
50
|
+
#error "This package requires Visual Studio 2015 Update 2 or higher."
|
|
51
|
+
#endif
|
|
52
|
+
|
|
53
|
+
// We support gcc 4.7 and later.
|
|
54
|
+
// This minimum will go up.
|
|
55
|
+
// Do not test clang. As of crosstool v18, clang identifies as gcc 4.2.
|
|
56
|
+
#if defined(__GNUC__) && !defined(__clang__)
|
|
57
|
+
#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7)
|
|
58
|
+
#error "This package requires gcc 4.7 or higher."
|
|
59
|
+
#endif
|
|
60
|
+
#endif
|
|
61
|
+
|
|
62
|
+
// We support Apple Xcode clang 4.2.1 (version 421.11.65) and later.
|
|
63
|
+
// This corresponds to Apple Xcode version 4.5.
|
|
64
|
+
// This minimum will go up.
|
|
65
|
+
#if defined(__apple_build_version__) && __apple_build_version__ < 4211165
|
|
66
|
+
#error "This package requires __apple_build_version__ of 4211165 or higher."
|
|
67
|
+
#endif
|
|
68
|
+
|
|
69
|
+
// -----------------------------------------------------------------------------
|
|
70
|
+
// C++ Version Check
|
|
71
|
+
// -----------------------------------------------------------------------------
|
|
72
|
+
|
|
73
|
+
// Enforce C++11 as the minimum. Note that Visual Studio has not
|
|
74
|
+
// advanced __cplusplus despite being good enough for our purposes, so
|
|
75
|
+
// so we exempt it from the check.
|
|
76
|
+
#if !defined(SWIG)
|
|
77
|
+
#if defined(__cplusplus) && !defined(_MSC_VER)
|
|
78
|
+
#if __cplusplus < 201103L
|
|
79
|
+
#error "C++ versions less than C++11 are not supported."
|
|
80
|
+
#endif
|
|
81
|
+
#endif
|
|
82
|
+
#endif
|
|
83
|
+
|
|
84
|
+
// -----------------------------------------------------------------------------
|
|
85
|
+
// Standard Library Check
|
|
86
|
+
// -----------------------------------------------------------------------------
|
|
87
|
+
|
|
88
|
+
// We have chosen glibc 2.12 as the minimum as it was tagged for release
|
|
89
|
+
// in May, 2010 and includes some functionality used in Google software
|
|
90
|
+
// (for instance pthread_setname_np):
|
|
91
|
+
// https://sourceware.org/ml/libc-alpha/2010-05/msg00000.html
|
|
92
|
+
#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
|
|
93
|
+
#if !__GLIBC_PREREQ(2, 12)
|
|
94
|
+
#error "Minimum required version of glibc is 2.12."
|
|
95
|
+
#endif
|
|
96
|
+
#endif
|
|
97
|
+
|
|
98
|
+
#if defined(_STLPORT_VERSION)
|
|
99
|
+
#error "STLPort is not supported."
|
|
100
|
+
#endif
|
|
101
|
+
|
|
102
|
+
// -----------------------------------------------------------------------------
|
|
103
|
+
// `char` Size Check
|
|
104
|
+
// -----------------------------------------------------------------------------
|
|
105
|
+
|
|
106
|
+
// Abseil currently assumes CHAR_BIT == 8. If you would like to use Abseil on a
|
|
107
|
+
// platform where this is not the case, please provide us with the details about
|
|
108
|
+
// your platform so we can consider relaxing this requirement.
|
|
109
|
+
#if CHAR_BIT != 8
|
|
110
|
+
#error "Abseil assumes CHAR_BIT == 8."
|
|
111
|
+
#endif
|
|
112
|
+
|
|
113
|
+
// -----------------------------------------------------------------------------
|
|
114
|
+
// `int` Size Check
|
|
115
|
+
// -----------------------------------------------------------------------------
|
|
116
|
+
|
|
117
|
+
// Abseil currently assumes that an int is 4 bytes. If you would like to use
|
|
118
|
+
// Abseil on a platform where this is not the case, please provide us with the
|
|
119
|
+
// details about your platform so we can consider relaxing this requirement.
|
|
120
|
+
#if INT_MAX < 2147483647
|
|
121
|
+
#error "Abseil assumes that int is at least 4 bytes. "
|
|
122
|
+
#endif
|
|
123
|
+
|
|
124
|
+
#endif // S2_THIRD_PARTY_ABSL_BASE_POLICY_CHECKS_H_
|
|
@@ -0,0 +1,97 @@
|
|
|
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
|
+
// This files is a forwarding header for other headers containing various
|
|
16
|
+
// portability macros and functions.
|
|
17
|
+
// This file is used for both C and C++!
|
|
18
|
+
// It also contains obsolete things that are pending cleanup but need to stay
|
|
19
|
+
// in Abseil for now.
|
|
20
|
+
|
|
21
|
+
#ifndef S2_THIRD_PARTY_ABSL_BASE_PORT_H_
|
|
22
|
+
#define S2_THIRD_PARTY_ABSL_BASE_PORT_H_
|
|
23
|
+
|
|
24
|
+
#include "s2/third_party/absl/base/attributes.h"
|
|
25
|
+
#include "s2/third_party/absl/base/config.h"
|
|
26
|
+
#include "s2/third_party/absl/base/optimization.h"
|
|
27
|
+
|
|
28
|
+
#ifdef SWIG
|
|
29
|
+
%include "third_party/absl/base/attributes.h"
|
|
30
|
+
#endif
|
|
31
|
+
|
|
32
|
+
// -----------------------------------------------------------------------------
|
|
33
|
+
// Obsolete (to be removed)
|
|
34
|
+
// -----------------------------------------------------------------------------
|
|
35
|
+
|
|
36
|
+
// HAS_GLOBAL_STRING
|
|
37
|
+
// Some platforms have a ::string class that is different from ::std::string
|
|
38
|
+
// (although the interface is the same, of course). On other platforms,
|
|
39
|
+
// ::string is the same as ::std::string.
|
|
40
|
+
#if defined(__cplusplus) && !defined(SWIG)
|
|
41
|
+
#include <string>
|
|
42
|
+
#ifndef HAS_GLOBAL_STRING
|
|
43
|
+
using std::basic_string;
|
|
44
|
+
using std::string;
|
|
45
|
+
// TODO(user): using std::wstring?
|
|
46
|
+
#endif // HAS_GLOBAL_STRING
|
|
47
|
+
#endif // SWIG, __cplusplus
|
|
48
|
+
|
|
49
|
+
// NOTE: These live in Abseil purely as a short-term layering workaround to
|
|
50
|
+
// resolve a dependency chain between util/hash/hash, absl/strings, and //base:
|
|
51
|
+
// in order for //base to depend on absl/strings, the includes of hash need
|
|
52
|
+
// to be in absl, not //base. string_view defines hashes.
|
|
53
|
+
//
|
|
54
|
+
// -----------------------------------------------------------------------------
|
|
55
|
+
// HASH_NAMESPACE, HASH_NAMESPACE_DECLARATION_START/END
|
|
56
|
+
// -----------------------------------------------------------------------------
|
|
57
|
+
|
|
58
|
+
// Define the namespace for pre-C++11 functors for hash_map and hash_set.
|
|
59
|
+
// This is not the namespace for C++11 functors (that namespace is "std").
|
|
60
|
+
//
|
|
61
|
+
// We used to require that the build tool or Makefile provide this definition.
|
|
62
|
+
// Now we usually get it from testing target macros. If the testing target
|
|
63
|
+
// macros are different from an external definition, you will get a build
|
|
64
|
+
// error.
|
|
65
|
+
//
|
|
66
|
+
// TODO(user): always get HASH_NAMESPACE from testing target macros.
|
|
67
|
+
|
|
68
|
+
#if defined(__GNUC__) && defined(GOOGLE_GLIBCXX_VERSION)
|
|
69
|
+
// Crosstool v17 or later.
|
|
70
|
+
#define HASH_NAMESPACE __gnu_cxx
|
|
71
|
+
#elif defined(_MSC_VER)
|
|
72
|
+
// MSVC.
|
|
73
|
+
// http://msdn.microsoft.com/en-us/library/6x7w9f6z(v=vs.100).aspx
|
|
74
|
+
#define HASH_NAMESPACE stdext
|
|
75
|
+
#elif defined(__APPLE__)
|
|
76
|
+
// Xcode.
|
|
77
|
+
#define HASH_NAMESPACE __gnu_cxx
|
|
78
|
+
#elif defined(__GNUC__)
|
|
79
|
+
// Some other version of gcc.
|
|
80
|
+
#define HASH_NAMESPACE __gnu_cxx
|
|
81
|
+
#else
|
|
82
|
+
// HASH_NAMESPACE defined externally.
|
|
83
|
+
// TODO(user): make this an error. Do not use external value of
|
|
84
|
+
// HASH_NAMESPACE.
|
|
85
|
+
#endif
|
|
86
|
+
|
|
87
|
+
#ifndef HASH_NAMESPACE
|
|
88
|
+
// TODO(user): try to delete this.
|
|
89
|
+
// I think gcc 2.95.3 was the last toolchain to use this.
|
|
90
|
+
#define HASH_NAMESPACE_DECLARATION_START
|
|
91
|
+
#define HASH_NAMESPACE_DECLARATION_END
|
|
92
|
+
#else
|
|
93
|
+
#define HASH_NAMESPACE_DECLARATION_START namespace HASH_NAMESPACE {
|
|
94
|
+
#define HASH_NAMESPACE_DECLARATION_END }
|
|
95
|
+
#endif
|
|
96
|
+
|
|
97
|
+
#endif // S2_THIRD_PARTY_ABSL_BASE_PORT_H_
|
|
@@ -0,0 +1,277 @@
|
|
|
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
|
+
// File: thread_annotations.h
|
|
17
|
+
// -----------------------------------------------------------------------------
|
|
18
|
+
//
|
|
19
|
+
// This header file contains macro definitions for thread safety annotations
|
|
20
|
+
// that allow developers to document the locking policies of multi-threaded
|
|
21
|
+
// code. The annotations can also help program analysis tools to identify
|
|
22
|
+
// potential thread safety issues.
|
|
23
|
+
//
|
|
24
|
+
// Note that our annotation names differ substantially from those in the Clang
|
|
25
|
+
// documentation
|
|
26
|
+
//
|
|
27
|
+
// http://clang.llvm.org/docs/ThreadSafetyAnalysis.html
|
|
28
|
+
//
|
|
29
|
+
// E..g. we use EXCLUSIVE_LOCKS_REQUIRED where the external docs use REQUIRES.
|
|
30
|
+
//
|
|
31
|
+
// For detailed discussion on the design of these annotations, please
|
|
32
|
+
// see the design doc at
|
|
33
|
+
//
|
|
34
|
+
// These annotations are implemented using compiler attributes. Using the macros
|
|
35
|
+
// defined here instead of raw attributes allow for portability and future
|
|
36
|
+
// compatibility.
|
|
37
|
+
//
|
|
38
|
+
// When referring to mutexes in the arguments of the attributes, you should
|
|
39
|
+
// use variable names or more complex expressions (e.g. my_object->mutex_)
|
|
40
|
+
// that evaluate to a concrete mutex object whenever possible. If the mutex
|
|
41
|
+
// you want to refer to is not in scope, you may use a member pointer
|
|
42
|
+
// (e.g. &MyClass::mutex_) to refer to a mutex in some (unknown) object.
|
|
43
|
+
|
|
44
|
+
#ifndef S2_THIRD_PARTY_ABSL_BASE_THREAD_ANNOTATIONS_H_
|
|
45
|
+
#define S2_THIRD_PARTY_ABSL_BASE_THREAD_ANNOTATIONS_H_
|
|
46
|
+
|
|
47
|
+
#if defined(__clang__) && (!defined(SWIG))
|
|
48
|
+
#define THREAD_ANNOTATION_ATTRIBUTE__(x) __attribute__((x))
|
|
49
|
+
#else
|
|
50
|
+
#define THREAD_ANNOTATION_ATTRIBUTE__(x) // no-op
|
|
51
|
+
#endif
|
|
52
|
+
|
|
53
|
+
// GUARDED_BY()
|
|
54
|
+
//
|
|
55
|
+
// Documents if a shared field or global variable needs to be protected by a
|
|
56
|
+
// mutex. GUARDED_BY() allows the user to specify a particular mutex that
|
|
57
|
+
// should be held when accessing the annotated variable.
|
|
58
|
+
//
|
|
59
|
+
// Although this annotation (and PT_GUARDED_BY, below) cannot be applied to
|
|
60
|
+
// local variables, a local variable and its associated mutex can often be
|
|
61
|
+
// combined into a small class or struct, thereby allowing the annotation.
|
|
62
|
+
//
|
|
63
|
+
// Example:
|
|
64
|
+
//
|
|
65
|
+
// class Foo {
|
|
66
|
+
// Mutex mu_;
|
|
67
|
+
// int p1_ GUARDED_BY(mu_);
|
|
68
|
+
// ...
|
|
69
|
+
// };
|
|
70
|
+
#define GUARDED_BY(x) THREAD_ANNOTATION_ATTRIBUTE__(guarded_by(x))
|
|
71
|
+
|
|
72
|
+
// PT_GUARDED_BY()
|
|
73
|
+
//
|
|
74
|
+
// Documents if the memory location pointed to by a pointer should be guarded
|
|
75
|
+
// by a mutex when dereferencing the pointer.
|
|
76
|
+
//
|
|
77
|
+
// Example:
|
|
78
|
+
// class Foo {
|
|
79
|
+
// Mutex mu_;
|
|
80
|
+
// int *p1_ PT_GUARDED_BY(mu_);
|
|
81
|
+
// ...
|
|
82
|
+
// };
|
|
83
|
+
//
|
|
84
|
+
// Note that a pointer variable to a shared memory location could itself be a
|
|
85
|
+
// shared variable.
|
|
86
|
+
//
|
|
87
|
+
// Example:
|
|
88
|
+
//
|
|
89
|
+
// // `q_`, guarded by `mu1_`, points to a shared memory location that is
|
|
90
|
+
// // guarded by `mu2_`:
|
|
91
|
+
// int *q_ GUARDED_BY(mu1_) PT_GUARDED_BY(mu2_);
|
|
92
|
+
#define PT_GUARDED_BY(x) THREAD_ANNOTATION_ATTRIBUTE__(pt_guarded_by(x))
|
|
93
|
+
|
|
94
|
+
// ACQUIRED_AFTER() / ACQUIRED_BEFORE()
|
|
95
|
+
//
|
|
96
|
+
// Documents the acquisition order between locks that can be held
|
|
97
|
+
// simultaneously by a thread. For any two locks that need to be annotated
|
|
98
|
+
// to establish an acquisition order, only one of them needs the annotation.
|
|
99
|
+
// (i.e. You don't have to annotate both locks with both ACQUIRED_AFTER
|
|
100
|
+
// and ACQUIRED_BEFORE.)
|
|
101
|
+
//
|
|
102
|
+
// As with GUARDED_BY, this is only applicable to mutexes that are shared
|
|
103
|
+
// fields or global variables.
|
|
104
|
+
//
|
|
105
|
+
// Example:
|
|
106
|
+
//
|
|
107
|
+
// Mutex m1_;
|
|
108
|
+
// Mutex m2_ ACQUIRED_AFTER(m1_);
|
|
109
|
+
#define ACQUIRED_AFTER(...) \
|
|
110
|
+
THREAD_ANNOTATION_ATTRIBUTE__(acquired_after(__VA_ARGS__))
|
|
111
|
+
|
|
112
|
+
#define ACQUIRED_BEFORE(...) \
|
|
113
|
+
THREAD_ANNOTATION_ATTRIBUTE__(acquired_before(__VA_ARGS__))
|
|
114
|
+
|
|
115
|
+
// EXCLUSIVE_LOCKS_REQUIRED() / SHARED_LOCKS_REQUIRED()
|
|
116
|
+
//
|
|
117
|
+
// Documents a function that expects a mutex to be held prior to entry.
|
|
118
|
+
// The mutex is expected to be held both on entry to, and exit from, the
|
|
119
|
+
// function.
|
|
120
|
+
//
|
|
121
|
+
// An exclusive lock allows read-write access to the guarded data member(s), and
|
|
122
|
+
// only one thread can acquire a lock exclusively at any one time. A shared lock
|
|
123
|
+
// allows read-only access, and any number of threads can acquire a shared lock
|
|
124
|
+
// concurrently.
|
|
125
|
+
//
|
|
126
|
+
// Generally, non-const methods should be annotated with
|
|
127
|
+
// EXCLUSIVE_LOCKS_REQUIRED, while const methods should be annotated with
|
|
128
|
+
// SHARED_LOCKS_REQUIRED.
|
|
129
|
+
//
|
|
130
|
+
// Example:
|
|
131
|
+
//
|
|
132
|
+
// Mutex mu1, mu2;
|
|
133
|
+
// int a GUARDED_BY(mu1);
|
|
134
|
+
// int b GUARDED_BY(mu2);
|
|
135
|
+
//
|
|
136
|
+
// void foo() EXCLUSIVE_LOCKS_REQUIRED(mu1, mu2) { ... }
|
|
137
|
+
// void bar() const SHARED_LOCKS_REQUIRED(mu1, mu2) { ... }
|
|
138
|
+
#define EXCLUSIVE_LOCKS_REQUIRED(...) \
|
|
139
|
+
THREAD_ANNOTATION_ATTRIBUTE__(exclusive_locks_required(__VA_ARGS__))
|
|
140
|
+
|
|
141
|
+
#define SHARED_LOCKS_REQUIRED(...) \
|
|
142
|
+
THREAD_ANNOTATION_ATTRIBUTE__(shared_locks_required(__VA_ARGS__))
|
|
143
|
+
|
|
144
|
+
// LOCKS_EXCLUDED()
|
|
145
|
+
//
|
|
146
|
+
// Documents the locks acquired in the body of the function. These locks
|
|
147
|
+
// cannot be held when calling this function (as Abseil's `Mutex` locks are
|
|
148
|
+
// non-reentrant).
|
|
149
|
+
#define LOCKS_EXCLUDED(...) \
|
|
150
|
+
THREAD_ANNOTATION_ATTRIBUTE__(locks_excluded(__VA_ARGS__))
|
|
151
|
+
|
|
152
|
+
// LOCK_RETURNED()
|
|
153
|
+
//
|
|
154
|
+
// Documents a function that returns a mutex without acquiring it. For example,
|
|
155
|
+
// a public getter method that returns a pointer to a private mutex should
|
|
156
|
+
// be annotated with LOCK_RETURNED.
|
|
157
|
+
#define LOCK_RETURNED(x) \
|
|
158
|
+
THREAD_ANNOTATION_ATTRIBUTE__(lock_returned(x))
|
|
159
|
+
|
|
160
|
+
// LOCKABLE
|
|
161
|
+
//
|
|
162
|
+
// Documents if a class/type is a lockable type (such as the `Mutex` class).
|
|
163
|
+
#define LOCKABLE \
|
|
164
|
+
THREAD_ANNOTATION_ATTRIBUTE__(lockable)
|
|
165
|
+
|
|
166
|
+
// SCOPED_LOCKABLE
|
|
167
|
+
//
|
|
168
|
+
// Documents if a class does RAII locking (such as the `MutexLock` class).
|
|
169
|
+
// The constructor should use `LOCK_FUNCTION()` to specify the mutex that is
|
|
170
|
+
// acquired, and the destructor should use `UNLOCK_FUNCTION()` with no
|
|
171
|
+
// arguments; the analysis will assume that the destructor unlocks whatever the
|
|
172
|
+
// constructor locked.
|
|
173
|
+
#define SCOPED_LOCKABLE \
|
|
174
|
+
THREAD_ANNOTATION_ATTRIBUTE__(scoped_lockable)
|
|
175
|
+
|
|
176
|
+
// EXCLUSIVE_LOCK_FUNCTION()
|
|
177
|
+
//
|
|
178
|
+
// Documents functions that acquire a lock in the body of a function, and do
|
|
179
|
+
// not release it.
|
|
180
|
+
#define EXCLUSIVE_LOCK_FUNCTION(...) \
|
|
181
|
+
THREAD_ANNOTATION_ATTRIBUTE__(exclusive_lock_function(__VA_ARGS__))
|
|
182
|
+
|
|
183
|
+
// SHARED_LOCK_FUNCTION()
|
|
184
|
+
//
|
|
185
|
+
// Documents functions that acquire a shared (reader) lock in the body of a
|
|
186
|
+
// function, and do not release it.
|
|
187
|
+
#define SHARED_LOCK_FUNCTION(...) \
|
|
188
|
+
THREAD_ANNOTATION_ATTRIBUTE__(shared_lock_function(__VA_ARGS__))
|
|
189
|
+
|
|
190
|
+
// UNLOCK_FUNCTION()
|
|
191
|
+
//
|
|
192
|
+
// Documents functions that expect a lock to be held on entry to the function,
|
|
193
|
+
// and release it in the body of the function.
|
|
194
|
+
#define UNLOCK_FUNCTION(...) \
|
|
195
|
+
THREAD_ANNOTATION_ATTRIBUTE__(unlock_function(__VA_ARGS__))
|
|
196
|
+
|
|
197
|
+
// EXCLUSIVE_TRYLOCK_FUNCTION() / SHARED_TRYLOCK_FUNCTION()
|
|
198
|
+
//
|
|
199
|
+
// Documents functions that try to acquire a lock, and return success or failure
|
|
200
|
+
// (or a non-boolean value that can be interpreted as a boolean).
|
|
201
|
+
// The first argument should be `true` for functions that return `true` on
|
|
202
|
+
// success, or `false` for functions that return `false` on success. The second
|
|
203
|
+
// argument specifies the mutex that is locked on success. If unspecified, this
|
|
204
|
+
// mutex is assumed to be `this`.
|
|
205
|
+
#define EXCLUSIVE_TRYLOCK_FUNCTION(...) \
|
|
206
|
+
THREAD_ANNOTATION_ATTRIBUTE__(exclusive_trylock_function(__VA_ARGS__))
|
|
207
|
+
|
|
208
|
+
#define SHARED_TRYLOCK_FUNCTION(...) \
|
|
209
|
+
THREAD_ANNOTATION_ATTRIBUTE__(shared_trylock_function(__VA_ARGS__))
|
|
210
|
+
|
|
211
|
+
// ASSERT_EXCLUSIVE_LOCK() / ASSERT_SHARED_LOCK()
|
|
212
|
+
//
|
|
213
|
+
// Documents functions that dynamically check to see if a lock is held, and fail
|
|
214
|
+
// if it is not held.
|
|
215
|
+
#define ASSERT_EXCLUSIVE_LOCK(...) \
|
|
216
|
+
THREAD_ANNOTATION_ATTRIBUTE__(assert_exclusive_lock(__VA_ARGS__))
|
|
217
|
+
|
|
218
|
+
#define ASSERT_SHARED_LOCK(...) \
|
|
219
|
+
THREAD_ANNOTATION_ATTRIBUTE__(assert_shared_lock(__VA_ARGS__))
|
|
220
|
+
|
|
221
|
+
// NO_THREAD_SAFETY_ANALYSIS
|
|
222
|
+
//
|
|
223
|
+
// Turns off thread safety checking within the body of a particular function.
|
|
224
|
+
// This annotation is used to mark functions that are known to be correct, but
|
|
225
|
+
// the locking behavior is more complicated than the analyzer can handle.
|
|
226
|
+
#define NO_THREAD_SAFETY_ANALYSIS \
|
|
227
|
+
THREAD_ANNOTATION_ATTRIBUTE__(no_thread_safety_analysis)
|
|
228
|
+
|
|
229
|
+
//------------------------------------------------------------------------------
|
|
230
|
+
// Tool-Supplied Annotations
|
|
231
|
+
//------------------------------------------------------------------------------
|
|
232
|
+
|
|
233
|
+
// TS_UNCHECKED should be placed around lock expressions that are not valid
|
|
234
|
+
// C++ syntax, but which are present for documentation purposes. These
|
|
235
|
+
// annotations will be ignored by the analysis.
|
|
236
|
+
#define TS_UNCHECKED(x) ""
|
|
237
|
+
|
|
238
|
+
// TS_FIXME is used to mark lock expressions that are not valid C++ syntax.
|
|
239
|
+
// It is used by automated tools to mark and disable invalid expressions.
|
|
240
|
+
// The annotation should either be fixed, or changed to TS_UNCHECKED.
|
|
241
|
+
#define TS_FIXME(x) ""
|
|
242
|
+
|
|
243
|
+
// Like NO_THREAD_SAFETY_ANALYSIS, this turns off checking within the body of
|
|
244
|
+
// a particular function. However, this attribute is used to mark functions
|
|
245
|
+
// that are incorrect and need to be fixed. It is used by automated tools to
|
|
246
|
+
// avoid breaking the build when the analysis is updated.
|
|
247
|
+
// Code owners are expected to eventually fix the routine.
|
|
248
|
+
#define NO_THREAD_SAFETY_ANALYSIS_FIXME NO_THREAD_SAFETY_ANALYSIS
|
|
249
|
+
|
|
250
|
+
// Similar to NO_THREAD_SAFETY_ANALYSIS_FIXME, this macro marks a GUARDED_BY
|
|
251
|
+
// annotation that needs to be fixed, because it is producing thread safety
|
|
252
|
+
// warning. It disables the GUARDED_BY.
|
|
253
|
+
#define GUARDED_BY_FIXME(x)
|
|
254
|
+
|
|
255
|
+
// Disables warnings for a single read operation. This can be used to avoid
|
|
256
|
+
// warnings when it is known that the read is not actually involved in a race,
|
|
257
|
+
// but the compiler cannot confirm that.
|
|
258
|
+
#define TS_UNCHECKED_READ(x) thread_safety_analysis::ts_unchecked_read(x)
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
namespace thread_safety_analysis {
|
|
262
|
+
|
|
263
|
+
// Takes a reference to a guarded data member, and returns an unguarded
|
|
264
|
+
// reference.
|
|
265
|
+
template <typename T>
|
|
266
|
+
inline const T& ts_unchecked_read(const T& v) NO_THREAD_SAFETY_ANALYSIS {
|
|
267
|
+
return v;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
template <typename T>
|
|
271
|
+
inline T& ts_unchecked_read(T& v) NO_THREAD_SAFETY_ANALYSIS {
|
|
272
|
+
return v;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
} // namespace thread_safety_analysis
|
|
276
|
+
|
|
277
|
+
#endif // S2_THIRD_PARTY_ABSL_BASE_THREAD_ANNOTATIONS_H_
|