@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.
Files changed (471) hide show
  1. package/.circleci/config.yml +45 -0
  2. package/.dockerignore +1 -0
  3. package/.gitmodules +3 -0
  4. package/CHANGELOG.md +33 -0
  5. package/LICENSE +201 -0
  6. package/README.md +147 -0
  7. package/binding.gyp +170 -0
  8. package/docker/Dockerfile.node20.test +8 -0
  9. package/docker/Dockerfile.node22.test +8 -0
  10. package/docker/Dockerfile.node24.test +8 -0
  11. package/index.d.ts +117 -0
  12. package/index.js +6 -0
  13. package/jest.config.js +184 -0
  14. package/package.json +43 -0
  15. package/publish-linux.sh +18 -0
  16. package/publish-osx.sh +19 -0
  17. package/src/builder.cc +84 -0
  18. package/src/builder.h +29 -0
  19. package/src/cell.cc +71 -0
  20. package/src/cell.h +26 -0
  21. package/src/cell_id.cc +210 -0
  22. package/src/cell_id.h +44 -0
  23. package/src/cell_union.cc +237 -0
  24. package/src/cell_union.h +34 -0
  25. package/src/earth.cc +185 -0
  26. package/src/earth.h +33 -0
  27. package/src/latlng.cc +132 -0
  28. package/src/latlng.h +28 -0
  29. package/src/loop.cc +51 -0
  30. package/src/loop.h +21 -0
  31. package/src/point.cc +69 -0
  32. package/src/point.h +23 -0
  33. package/src/polygon.cc +36 -0
  34. package/src/polygon.h +20 -0
  35. package/src/polyline.cc +186 -0
  36. package/src/polyline.h +34 -0
  37. package/src/region_coverer.cc +450 -0
  38. package/src/region_coverer.h +56 -0
  39. package/src/s2.cc +27 -0
  40. package/test/Cell.test.js +37 -0
  41. package/test/CellId.test.js +135 -0
  42. package/test/CellUnion.test.js +150 -0
  43. package/test/Earth.test.js +62 -0
  44. package/test/LatLng.test.js +45 -0
  45. package/test/Point.test.js +14 -0
  46. package/test/Polyline.test.js +78 -0
  47. package/test/RegionCoverer.test.js +301 -0
  48. package/test.sh +16 -0
  49. package/third_party/s2geometry/.travis.yml +163 -0
  50. package/third_party/s2geometry/AUTHORS +13 -0
  51. package/third_party/s2geometry/CONTRIBUTING.md +65 -0
  52. package/third_party/s2geometry/CONTRIBUTORS +30 -0
  53. package/third_party/s2geometry/LICENSE +202 -0
  54. package/third_party/s2geometry/NOTICE +5 -0
  55. package/third_party/s2geometry/README.md +127 -0
  56. package/third_party/s2geometry/doc/examples/point_index.cc +44 -0
  57. package/third_party/s2geometry/doc/examples/term_index.cc +99 -0
  58. package/third_party/s2geometry/doc/examples/term_index.py +101 -0
  59. package/third_party/s2geometry/src/python/coder.i +125 -0
  60. package/third_party/s2geometry/src/python/pywraps2_test.py +786 -0
  61. package/third_party/s2geometry/src/python/s2.i +37 -0
  62. package/third_party/s2geometry/src/python/s2_common.i +756 -0
  63. package/third_party/s2geometry/src/s2/_fp_contract_off.h +60 -0
  64. package/third_party/s2geometry/src/s2/base/casts.h +318 -0
  65. package/third_party/s2geometry/src/s2/base/commandlineflags.h +67 -0
  66. package/third_party/s2geometry/src/s2/base/integral_types.h +31 -0
  67. package/third_party/s2geometry/src/s2/base/log_severity.h +40 -0
  68. package/third_party/s2geometry/src/s2/base/logging.h +173 -0
  69. package/third_party/s2geometry/src/s2/base/mutex.h +61 -0
  70. package/third_party/s2geometry/src/s2/base/port.h +999 -0
  71. package/third_party/s2geometry/src/s2/base/spinlock.h +60 -0
  72. package/third_party/s2geometry/src/s2/base/stringprintf.cc +107 -0
  73. package/third_party/s2geometry/src/s2/base/stringprintf.h +53 -0
  74. package/third_party/s2geometry/src/s2/base/strtoint.cc +65 -0
  75. package/third_party/s2geometry/src/s2/base/strtoint.h +106 -0
  76. package/third_party/s2geometry/src/s2/base/timer.h +50 -0
  77. package/third_party/s2geometry/src/s2/encoded_s2cell_id_vector.cc +164 -0
  78. package/third_party/s2geometry/src/s2/encoded_s2cell_id_vector.h +110 -0
  79. package/third_party/s2geometry/src/s2/encoded_s2cell_id_vector_test.cc +232 -0
  80. package/third_party/s2geometry/src/s2/encoded_s2point_vector.cc +838 -0
  81. package/third_party/s2geometry/src/s2/encoded_s2point_vector.h +140 -0
  82. package/third_party/s2geometry/src/s2/encoded_s2point_vector_test.cc +344 -0
  83. package/third_party/s2geometry/src/s2/encoded_s2shape_index.cc +181 -0
  84. package/third_party/s2geometry/src/s2/encoded_s2shape_index.h +276 -0
  85. package/third_party/s2geometry/src/s2/encoded_s2shape_index_test.cc +244 -0
  86. package/third_party/s2geometry/src/s2/encoded_string_vector.cc +66 -0
  87. package/third_party/s2geometry/src/s2/encoded_string_vector.h +164 -0
  88. package/third_party/s2geometry/src/s2/encoded_string_vector_test.cc +69 -0
  89. package/third_party/s2geometry/src/s2/encoded_uint_vector.h +299 -0
  90. package/third_party/s2geometry/src/s2/encoded_uint_vector_test.cc +124 -0
  91. package/third_party/s2geometry/src/s2/id_set_lexicon.cc +81 -0
  92. package/third_party/s2geometry/src/s2/id_set_lexicon.h +199 -0
  93. package/third_party/s2geometry/src/s2/id_set_lexicon_test.cc +70 -0
  94. package/third_party/s2geometry/src/s2/mutable_s2shape_index.cc +1585 -0
  95. package/third_party/s2geometry/src/s2/mutable_s2shape_index.h +600 -0
  96. package/third_party/s2geometry/src/s2/mutable_s2shape_index_test.cc +589 -0
  97. package/third_party/s2geometry/src/s2/r1interval.h +220 -0
  98. package/third_party/s2geometry/src/s2/r1interval_test.cc +185 -0
  99. package/third_party/s2geometry/src/s2/r2.h +26 -0
  100. package/third_party/s2geometry/src/s2/r2rect.cc +93 -0
  101. package/third_party/s2geometry/src/s2/r2rect.h +234 -0
  102. package/third_party/s2geometry/src/s2/r2rect_test.cc +228 -0
  103. package/third_party/s2geometry/src/s2/s1angle.cc +54 -0
  104. package/third_party/s2geometry/src/s2/s1angle.h +336 -0
  105. package/third_party/s2geometry/src/s2/s1angle_test.cc +185 -0
  106. package/third_party/s2geometry/src/s2/s1chord_angle.cc +159 -0
  107. package/third_party/s2geometry/src/s2/s1chord_angle.h +369 -0
  108. package/third_party/s2geometry/src/s2/s1chord_angle_test.cc +207 -0
  109. package/third_party/s2geometry/src/s2/s1interval.cc +296 -0
  110. package/third_party/s2geometry/src/s2/s1interval.h +266 -0
  111. package/third_party/s2geometry/src/s2/s1interval_test.cc +469 -0
  112. package/third_party/s2geometry/src/s2/s2boolean_operation.cc +2391 -0
  113. package/third_party/s2geometry/src/s2/s2boolean_operation.h +501 -0
  114. package/third_party/s2geometry/src/s2/s2boolean_operation_test.cc +1400 -0
  115. package/third_party/s2geometry/src/s2/s2builder.cc +1828 -0
  116. package/third_party/s2geometry/src/s2/s2builder.h +1057 -0
  117. package/third_party/s2geometry/src/s2/s2builder_graph.cc +1084 -0
  118. package/third_party/s2geometry/src/s2/s2builder_graph.h +799 -0
  119. package/third_party/s2geometry/src/s2/s2builder_graph_test.cc +462 -0
  120. package/third_party/s2geometry/src/s2/s2builder_layer.h +50 -0
  121. package/third_party/s2geometry/src/s2/s2builder_test.cc +1329 -0
  122. package/third_party/s2geometry/src/s2/s2builderutil_closed_set_normalizer.cc +313 -0
  123. package/third_party/s2geometry/src/s2/s2builderutil_closed_set_normalizer.h +221 -0
  124. package/third_party/s2geometry/src/s2/s2builderutil_closed_set_normalizer_test.cc +261 -0
  125. package/third_party/s2geometry/src/s2/s2builderutil_find_polygon_degeneracies.cc +392 -0
  126. package/third_party/s2geometry/src/s2/s2builderutil_find_polygon_degeneracies.h +86 -0
  127. package/third_party/s2geometry/src/s2/s2builderutil_find_polygon_degeneracies_test.cc +182 -0
  128. package/third_party/s2geometry/src/s2/s2builderutil_graph_shape.h +57 -0
  129. package/third_party/s2geometry/src/s2/s2builderutil_lax_polygon_layer.cc +212 -0
  130. package/third_party/s2geometry/src/s2/s2builderutil_lax_polygon_layer.h +218 -0
  131. package/third_party/s2geometry/src/s2/s2builderutil_lax_polygon_layer_test.cc +367 -0
  132. package/third_party/s2geometry/src/s2/s2builderutil_s2point_vector_layer.cc +74 -0
  133. package/third_party/s2geometry/src/s2/s2builderutil_s2point_vector_layer.h +122 -0
  134. package/third_party/s2geometry/src/s2/s2builderutil_s2point_vector_layer_test.cc +167 -0
  135. package/third_party/s2geometry/src/s2/s2builderutil_s2polygon_layer.cc +191 -0
  136. package/third_party/s2geometry/src/s2/s2builderutil_s2polygon_layer.h +211 -0
  137. package/third_party/s2geometry/src/s2/s2builderutil_s2polygon_layer_test.cc +312 -0
  138. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_layer.cc +105 -0
  139. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_layer.h +174 -0
  140. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_layer_test.cc +220 -0
  141. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_vector_layer.cc +98 -0
  142. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_vector_layer.h +292 -0
  143. package/third_party/s2geometry/src/s2/s2builderutil_s2polyline_vector_layer_test.cc +233 -0
  144. package/third_party/s2geometry/src/s2/s2builderutil_snap_functions.cc +354 -0
  145. package/third_party/s2geometry/src/s2/s2builderutil_snap_functions.h +239 -0
  146. package/third_party/s2geometry/src/s2/s2builderutil_snap_functions_test.cc +716 -0
  147. package/third_party/s2geometry/src/s2/s2builderutil_testing.cc +37 -0
  148. package/third_party/s2geometry/src/s2/s2builderutil_testing.h +100 -0
  149. package/third_party/s2geometry/src/s2/s2builderutil_testing_test.cc +85 -0
  150. package/third_party/s2geometry/src/s2/s2cap.cc +347 -0
  151. package/third_party/s2geometry/src/s2/s2cap.h +286 -0
  152. package/third_party/s2geometry/src/s2/s2cap_test.cc +379 -0
  153. package/third_party/s2geometry/src/s2/s2cell.cc +552 -0
  154. package/third_party/s2geometry/src/s2/s2cell.h +249 -0
  155. package/third_party/s2geometry/src/s2/s2cell_id.cc +619 -0
  156. package/third_party/s2geometry/src/s2/s2cell_id.h +705 -0
  157. package/third_party/s2geometry/src/s2/s2cell_id_test.cc +633 -0
  158. package/third_party/s2geometry/src/s2/s2cell_index.cc +149 -0
  159. package/third_party/s2geometry/src/s2/s2cell_index.h +660 -0
  160. package/third_party/s2geometry/src/s2/s2cell_index_test.cc +411 -0
  161. package/third_party/s2geometry/src/s2/s2cell_test.cc +687 -0
  162. package/third_party/s2geometry/src/s2/s2cell_union.cc +515 -0
  163. package/third_party/s2geometry/src/s2/s2cell_union.h +399 -0
  164. package/third_party/s2geometry/src/s2/s2cell_union_test.cc +598 -0
  165. package/third_party/s2geometry/src/s2/s2centroids.cc +84 -0
  166. package/third_party/s2geometry/src/s2/s2centroids.h +87 -0
  167. package/third_party/s2geometry/src/s2/s2centroids_test.cc +82 -0
  168. package/third_party/s2geometry/src/s2/s2closest_cell_query.cc +123 -0
  169. package/third_party/s2geometry/src/s2/s2closest_cell_query.h +385 -0
  170. package/third_party/s2geometry/src/s2/s2closest_cell_query_base.h +841 -0
  171. package/third_party/s2geometry/src/s2/s2closest_cell_query_base_test.cc +63 -0
  172. package/third_party/s2geometry/src/s2/s2closest_cell_query_test.cc +412 -0
  173. package/third_party/s2geometry/src/s2/s2closest_edge_query.cc +106 -0
  174. package/third_party/s2geometry/src/s2/s2closest_edge_query.h +421 -0
  175. package/third_party/s2geometry/src/s2/s2closest_edge_query_base.h +946 -0
  176. package/third_party/s2geometry/src/s2/s2closest_edge_query_base_test.cc +59 -0
  177. package/third_party/s2geometry/src/s2/s2closest_edge_query_test.cc +505 -0
  178. package/third_party/s2geometry/src/s2/s2closest_edge_query_testing.h +91 -0
  179. package/third_party/s2geometry/src/s2/s2closest_point_query.cc +66 -0
  180. package/third_party/s2geometry/src/s2/s2closest_point_query.h +465 -0
  181. package/third_party/s2geometry/src/s2/s2closest_point_query_base.h +767 -0
  182. package/third_party/s2geometry/src/s2/s2closest_point_query_base_test.cc +63 -0
  183. package/third_party/s2geometry/src/s2/s2closest_point_query_test.cc +312 -0
  184. package/third_party/s2geometry/src/s2/s2contains_point_query.h +328 -0
  185. package/third_party/s2geometry/src/s2/s2contains_point_query_test.cc +159 -0
  186. package/third_party/s2geometry/src/s2/s2contains_vertex_query.cc +39 -0
  187. package/third_party/s2geometry/src/s2/s2contains_vertex_query.h +66 -0
  188. package/third_party/s2geometry/src/s2/s2contains_vertex_query_test.cc +67 -0
  189. package/third_party/s2geometry/src/s2/s2convex_hull_query.cc +198 -0
  190. package/third_party/s2geometry/src/s2/s2convex_hull_query.h +110 -0
  191. package/third_party/s2geometry/src/s2/s2convex_hull_query_test.cc +208 -0
  192. package/third_party/s2geometry/src/s2/s2coords.cc +146 -0
  193. package/third_party/s2geometry/src/s2/s2coords.h +459 -0
  194. package/third_party/s2geometry/src/s2/s2coords_internal.h +71 -0
  195. package/third_party/s2geometry/src/s2/s2coords_test.cc +218 -0
  196. package/third_party/s2geometry/src/s2/s2crossing_edge_query.cc +380 -0
  197. package/third_party/s2geometry/src/s2/s2crossing_edge_query.h +220 -0
  198. package/third_party/s2geometry/src/s2/s2crossing_edge_query_test.cc +382 -0
  199. package/third_party/s2geometry/src/s2/s2debug.cc +23 -0
  200. package/third_party/s2geometry/src/s2/s2debug.h +69 -0
  201. package/third_party/s2geometry/src/s2/s2distance_target.h +165 -0
  202. package/third_party/s2geometry/src/s2/s2earth.cc +52 -0
  203. package/third_party/s2geometry/src/s2/s2earth.h +268 -0
  204. package/third_party/s2geometry/src/s2/s2earth_test.cc +146 -0
  205. package/third_party/s2geometry/src/s2/s2edge_clipping.cc +462 -0
  206. package/third_party/s2geometry/src/s2/s2edge_clipping.h +183 -0
  207. package/third_party/s2geometry/src/s2/s2edge_clipping_test.cc +335 -0
  208. package/third_party/s2geometry/src/s2/s2edge_crosser.cc +85 -0
  209. package/third_party/s2geometry/src/s2/s2edge_crosser.h +343 -0
  210. package/third_party/s2geometry/src/s2/s2edge_crosser_test.cc +264 -0
  211. package/third_party/s2geometry/src/s2/s2edge_crossings.cc +515 -0
  212. package/third_party/s2geometry/src/s2/s2edge_crossings.h +138 -0
  213. package/third_party/s2geometry/src/s2/s2edge_crossings_internal.h +59 -0
  214. package/third_party/s2geometry/src/s2/s2edge_crossings_test.cc +246 -0
  215. package/third_party/s2geometry/src/s2/s2edge_distances.cc +419 -0
  216. package/third_party/s2geometry/src/s2/s2edge_distances.h +192 -0
  217. package/third_party/s2geometry/src/s2/s2edge_distances_test.cc +539 -0
  218. package/third_party/s2geometry/src/s2/s2edge_tessellator.cc +276 -0
  219. package/third_party/s2geometry/src/s2/s2edge_tessellator.h +101 -0
  220. package/third_party/s2geometry/src/s2/s2edge_tessellator_test.cc +492 -0
  221. package/third_party/s2geometry/src/s2/s2edge_vector_shape.h +85 -0
  222. package/third_party/s2geometry/src/s2/s2edge_vector_shape_test.cc +66 -0
  223. package/third_party/s2geometry/src/s2/s2error.cc +29 -0
  224. package/third_party/s2geometry/src/s2/s2error.h +147 -0
  225. package/third_party/s2geometry/src/s2/s2error_test.cc +31 -0
  226. package/third_party/s2geometry/src/s2/s2furthest_edge_query.cc +117 -0
  227. package/third_party/s2geometry/src/s2/s2furthest_edge_query.h +439 -0
  228. package/third_party/s2geometry/src/s2/s2furthest_edge_query_test.cc +487 -0
  229. package/third_party/s2geometry/src/s2/s2latlng.cc +90 -0
  230. package/third_party/s2geometry/src/s2/s2latlng.h +234 -0
  231. package/third_party/s2geometry/src/s2/s2latlng_rect.cc +727 -0
  232. package/third_party/s2geometry/src/s2/s2latlng_rect.h +434 -0
  233. package/third_party/s2geometry/src/s2/s2latlng_rect_bounder.cc +344 -0
  234. package/third_party/s2geometry/src/s2/s2latlng_rect_bounder.h +89 -0
  235. package/third_party/s2geometry/src/s2/s2latlng_rect_bounder_test.cc +306 -0
  236. package/third_party/s2geometry/src/s2/s2latlng_rect_test.cc +1030 -0
  237. package/third_party/s2geometry/src/s2/s2latlng_test.cc +165 -0
  238. package/third_party/s2geometry/src/s2/s2lax_loop_shape.cc +104 -0
  239. package/third_party/s2geometry/src/s2/s2lax_loop_shape.h +153 -0
  240. package/third_party/s2geometry/src/s2/s2lax_loop_shape_test.cc +101 -0
  241. package/third_party/s2geometry/src/s2/s2lax_polygon_shape.cc +348 -0
  242. package/third_party/s2geometry/src/s2/s2lax_polygon_shape.h +183 -0
  243. package/third_party/s2geometry/src/s2/s2lax_polygon_shape_test.cc +234 -0
  244. package/third_party/s2geometry/src/s2/s2lax_polyline_shape.cc +118 -0
  245. package/third_party/s2geometry/src/s2/s2lax_polyline_shape.h +124 -0
  246. package/third_party/s2geometry/src/s2/s2lax_polyline_shape_test.cc +62 -0
  247. package/third_party/s2geometry/src/s2/s2loop.cc +1509 -0
  248. package/third_party/s2geometry/src/s2/s2loop.h +711 -0
  249. package/third_party/s2geometry/src/s2/s2loop_measures.cc +313 -0
  250. package/third_party/s2geometry/src/s2/s2loop_measures.h +280 -0
  251. package/third_party/s2geometry/src/s2/s2loop_measures_test.cc +367 -0
  252. package/third_party/s2geometry/src/s2/s2loop_test.cc +1371 -0
  253. package/third_party/s2geometry/src/s2/s2max_distance_targets.cc +265 -0
  254. package/third_party/s2geometry/src/s2/s2max_distance_targets.h +241 -0
  255. package/third_party/s2geometry/src/s2/s2max_distance_targets_test.cc +367 -0
  256. package/third_party/s2geometry/src/s2/s2measures.cc +128 -0
  257. package/third_party/s2geometry/src/s2/s2measures.h +78 -0
  258. package/third_party/s2geometry/src/s2/s2measures_test.cc +135 -0
  259. package/third_party/s2geometry/src/s2/s2metrics.cc +122 -0
  260. package/third_party/s2geometry/src/s2/s2metrics.h +199 -0
  261. package/third_party/s2geometry/src/s2/s2metrics_test.cc +127 -0
  262. package/third_party/s2geometry/src/s2/s2min_distance_targets.cc +295 -0
  263. package/third_party/s2geometry/src/s2/s2min_distance_targets.h +273 -0
  264. package/third_party/s2geometry/src/s2/s2min_distance_targets_test.cc +239 -0
  265. package/third_party/s2geometry/src/s2/s2padded_cell.cc +162 -0
  266. package/third_party/s2geometry/src/s2/s2padded_cell.h +108 -0
  267. package/third_party/s2geometry/src/s2/s2padded_cell_test.cc +138 -0
  268. package/third_party/s2geometry/src/s2/s2point.h +38 -0
  269. package/third_party/s2geometry/src/s2/s2point_compression.cc +388 -0
  270. package/third_party/s2geometry/src/s2/s2point_compression.h +78 -0
  271. package/third_party/s2geometry/src/s2/s2point_compression_test.cc +305 -0
  272. package/third_party/s2geometry/src/s2/s2point_index.h +345 -0
  273. package/third_party/s2geometry/src/s2/s2point_index_test.cc +147 -0
  274. package/third_party/s2geometry/src/s2/s2point_region.cc +72 -0
  275. package/third_party/s2geometry/src/s2/s2point_region.h +76 -0
  276. package/third_party/s2geometry/src/s2/s2point_region_test.cc +100 -0
  277. package/third_party/s2geometry/src/s2/s2point_span.h +57 -0
  278. package/third_party/s2geometry/src/s2/s2point_test.cc +47 -0
  279. package/third_party/s2geometry/src/s2/s2point_vector_shape.h +127 -0
  280. package/third_party/s2geometry/src/s2/s2point_vector_shape_test.cc +59 -0
  281. package/third_party/s2geometry/src/s2/s2pointutil.cc +131 -0
  282. package/third_party/s2geometry/src/s2/s2pointutil.h +138 -0
  283. package/third_party/s2geometry/src/s2/s2pointutil_test.cc +157 -0
  284. package/third_party/s2geometry/src/s2/s2polygon.cc +1569 -0
  285. package/third_party/s2geometry/src/s2/s2polygon.h +934 -0
  286. package/third_party/s2geometry/src/s2/s2polygon_test.cc +3025 -0
  287. package/third_party/s2geometry/src/s2/s2polyline.cc +645 -0
  288. package/third_party/s2geometry/src/s2/s2polyline.h +379 -0
  289. package/third_party/s2geometry/src/s2/s2polyline_alignment.cc +414 -0
  290. package/third_party/s2geometry/src/s2/s2polyline_alignment.h +245 -0
  291. package/third_party/s2geometry/src/s2/s2polyline_alignment_internal.h +158 -0
  292. package/third_party/s2geometry/src/s2/s2polyline_alignment_test.cc +610 -0
  293. package/third_party/s2geometry/src/s2/s2polyline_measures.cc +42 -0
  294. package/third_party/s2geometry/src/s2/s2polyline_measures.h +53 -0
  295. package/third_party/s2geometry/src/s2/s2polyline_measures_test.cc +57 -0
  296. package/third_party/s2geometry/src/s2/s2polyline_simplifier.cc +187 -0
  297. package/third_party/s2geometry/src/s2/s2polyline_simplifier.h +109 -0
  298. package/third_party/s2geometry/src/s2/s2polyline_simplifier_test.cc +165 -0
  299. package/third_party/s2geometry/src/s2/s2polyline_test.cc +554 -0
  300. package/third_party/s2geometry/src/s2/s2predicates.cc +1486 -0
  301. package/third_party/s2geometry/src/s2/s2predicates.h +282 -0
  302. package/third_party/s2geometry/src/s2/s2predicates_internal.h +135 -0
  303. package/third_party/s2geometry/src/s2/s2predicates_test.cc +1427 -0
  304. package/third_party/s2geometry/src/s2/s2projections.cc +109 -0
  305. package/third_party/s2geometry/src/s2/s2projections.h +161 -0
  306. package/third_party/s2geometry/src/s2/s2projections_test.cc +78 -0
  307. package/third_party/s2geometry/src/s2/s2r2rect.cc +88 -0
  308. package/third_party/s2geometry/src/s2/s2r2rect.h +292 -0
  309. package/third_party/s2geometry/src/s2/s2r2rect_test.cc +312 -0
  310. package/third_party/s2geometry/src/s2/s2region.cc +26 -0
  311. package/third_party/s2geometry/src/s2/s2region.h +142 -0
  312. package/third_party/s2geometry/src/s2/s2region_coverer.cc +514 -0
  313. package/third_party/s2geometry/src/s2/s2region_coverer.h +356 -0
  314. package/third_party/s2geometry/src/s2/s2region_coverer_test.cc +509 -0
  315. package/third_party/s2geometry/src/s2/s2region_intersection.cc +84 -0
  316. package/third_party/s2geometry/src/s2/s2region_intersection.h +79 -0
  317. package/third_party/s2geometry/src/s2/s2region_term_indexer.cc +270 -0
  318. package/third_party/s2geometry/src/s2/s2region_term_indexer.h +299 -0
  319. package/third_party/s2geometry/src/s2/s2region_term_indexer_test.cc +209 -0
  320. package/third_party/s2geometry/src/s2/s2region_test.cc +370 -0
  321. package/third_party/s2geometry/src/s2/s2region_union.cc +90 -0
  322. package/third_party/s2geometry/src/s2/s2region_union.h +83 -0
  323. package/third_party/s2geometry/src/s2/s2region_union_test.cc +89 -0
  324. package/third_party/s2geometry/src/s2/s2shape.h +283 -0
  325. package/third_party/s2geometry/src/s2/s2shape_index.cc +321 -0
  326. package/third_party/s2geometry/src/s2/s2shape_index.h +781 -0
  327. package/third_party/s2geometry/src/s2/s2shape_index_buffered_region.cc +113 -0
  328. package/third_party/s2geometry/src/s2/s2shape_index_buffered_region.h +135 -0
  329. package/third_party/s2geometry/src/s2/s2shape_index_buffered_region_test.cc +162 -0
  330. package/third_party/s2geometry/src/s2/s2shape_index_measures.cc +92 -0
  331. package/third_party/s2geometry/src/s2/s2shape_index_measures.h +100 -0
  332. package/third_party/s2geometry/src/s2/s2shape_index_measures_test.cc +136 -0
  333. package/third_party/s2geometry/src/s2/s2shape_index_region.h +350 -0
  334. package/third_party/s2geometry/src/s2/s2shape_index_region_test.cc +161 -0
  335. package/third_party/s2geometry/src/s2/s2shape_index_test.cc +24 -0
  336. package/third_party/s2geometry/src/s2/s2shape_measures.cc +138 -0
  337. package/third_party/s2geometry/src/s2/s2shape_measures.h +95 -0
  338. package/third_party/s2geometry/src/s2/s2shape_measures_test.cc +139 -0
  339. package/third_party/s2geometry/src/s2/s2shapeutil_build_polygon_boundaries.cc +120 -0
  340. package/third_party/s2geometry/src/s2/s2shapeutil_build_polygon_boundaries.h +66 -0
  341. package/third_party/s2geometry/src/s2/s2shapeutil_build_polygon_boundaries_test.cc +170 -0
  342. package/third_party/s2geometry/src/s2/s2shapeutil_coding.cc +253 -0
  343. package/third_party/s2geometry/src/s2/s2shapeutil_coding.h +283 -0
  344. package/third_party/s2geometry/src/s2/s2shapeutil_coding_test.cc +54 -0
  345. package/third_party/s2geometry/src/s2/s2shapeutil_contains_brute_force.cc +40 -0
  346. package/third_party/s2geometry/src/s2/s2shapeutil_contains_brute_force.h +41 -0
  347. package/third_party/s2geometry/src/s2/s2shapeutil_contains_brute_force_test.cc +55 -0
  348. package/third_party/s2geometry/src/s2/s2shapeutil_count_edges.h +57 -0
  349. package/third_party/s2geometry/src/s2/s2shapeutil_count_edges_test.cc +43 -0
  350. package/third_party/s2geometry/src/s2/s2shapeutil_edge_iterator.cc +45 -0
  351. package/third_party/s2geometry/src/s2/s2shapeutil_edge_iterator.h +72 -0
  352. package/third_party/s2geometry/src/s2/s2shapeutil_edge_iterator_test.cc +116 -0
  353. package/third_party/s2geometry/src/s2/s2shapeutil_get_reference_point.cc +107 -0
  354. package/third_party/s2geometry/src/s2/s2shapeutil_get_reference_point.h +48 -0
  355. package/third_party/s2geometry/src/s2/s2shapeutil_get_reference_point_test.cc +104 -0
  356. package/third_party/s2geometry/src/s2/s2shapeutil_range_iterator.cc +58 -0
  357. package/third_party/s2geometry/src/s2/s2shapeutil_range_iterator.h +65 -0
  358. package/third_party/s2geometry/src/s2/s2shapeutil_range_iterator_test.cc +61 -0
  359. package/third_party/s2geometry/src/s2/s2shapeutil_shape_edge.h +58 -0
  360. package/third_party/s2geometry/src/s2/s2shapeutil_shape_edge_id.h +97 -0
  361. package/third_party/s2geometry/src/s2/s2shapeutil_testing.cc +104 -0
  362. package/third_party/s2geometry/src/s2/s2shapeutil_testing.h +36 -0
  363. package/third_party/s2geometry/src/s2/s2shapeutil_visit_crossing_edge_pairs.cc +440 -0
  364. package/third_party/s2geometry/src/s2/s2shapeutil_visit_crossing_edge_pairs.h +72 -0
  365. package/third_party/s2geometry/src/s2/s2shapeutil_visit_crossing_edge_pairs_test.cc +184 -0
  366. package/third_party/s2geometry/src/s2/s2testing.cc +464 -0
  367. package/third_party/s2geometry/src/s2/s2testing.h +385 -0
  368. package/third_party/s2geometry/src/s2/s2testing_test.cc +166 -0
  369. package/third_party/s2geometry/src/s2/s2text_format.cc +506 -0
  370. package/third_party/s2geometry/src/s2/s2text_format.h +289 -0
  371. package/third_party/s2geometry/src/s2/s2text_format_test.cc +417 -0
  372. package/third_party/s2geometry/src/s2/s2wedge_relations.cc +80 -0
  373. package/third_party/s2geometry/src/s2/s2wedge_relations.h +64 -0
  374. package/third_party/s2geometry/src/s2/s2wedge_relations_test.cc +89 -0
  375. package/third_party/s2geometry/src/s2/sequence_lexicon.h +296 -0
  376. package/third_party/s2geometry/src/s2/sequence_lexicon_test.cc +113 -0
  377. package/third_party/s2geometry/src/s2/strings/ostringstream.cc +35 -0
  378. package/third_party/s2geometry/src/s2/strings/ostringstream.h +105 -0
  379. package/third_party/s2geometry/src/s2/strings/serialize.cc +46 -0
  380. package/third_party/s2geometry/src/s2/strings/serialize.h +40 -0
  381. package/third_party/s2geometry/src/s2/third_party/absl/algorithm/algorithm.h +187 -0
  382. package/third_party/s2geometry/src/s2/third_party/absl/base/attributes.h +666 -0
  383. package/third_party/s2geometry/src/s2/third_party/absl/base/casts.h +189 -0
  384. package/third_party/s2geometry/src/s2/third_party/absl/base/config.h +462 -0
  385. package/third_party/s2geometry/src/s2/third_party/absl/base/dynamic_annotations.cc +129 -0
  386. package/third_party/s2geometry/src/s2/third_party/absl/base/dynamic_annotations.h +394 -0
  387. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/atomic_hook.h +168 -0
  388. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/identity.h +33 -0
  389. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/inline_variable.h +117 -0
  390. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/invoke.h +188 -0
  391. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/raw_logging.cc +254 -0
  392. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/raw_logging.h +205 -0
  393. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/throw_delegate.cc +106 -0
  394. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/throw_delegate.h +71 -0
  395. package/third_party/s2geometry/src/s2/third_party/absl/base/internal/unaligned_access.h +322 -0
  396. package/third_party/s2geometry/src/s2/third_party/absl/base/log_severity.h +77 -0
  397. package/third_party/s2geometry/src/s2/third_party/absl/base/macros.h +236 -0
  398. package/third_party/s2geometry/src/s2/third_party/absl/base/optimization.h +177 -0
  399. package/third_party/s2geometry/src/s2/third_party/absl/base/policy_checks.h +124 -0
  400. package/third_party/s2geometry/src/s2/third_party/absl/base/port.h +97 -0
  401. package/third_party/s2geometry/src/s2/third_party/absl/base/thread_annotations.h +277 -0
  402. package/third_party/s2geometry/src/s2/third_party/absl/container/fixed_array.h +523 -0
  403. package/third_party/s2geometry/src/s2/third_party/absl/container/inlined_vector.h +1453 -0
  404. package/third_party/s2geometry/src/s2/third_party/absl/container/internal/compressed_tuple.h +191 -0
  405. package/third_party/s2geometry/src/s2/third_party/absl/container/internal/container_memory.h +424 -0
  406. package/third_party/s2geometry/src/s2/third_party/absl/container/internal/layout.h +739 -0
  407. package/third_party/s2geometry/src/s2/third_party/absl/memory/memory.h +755 -0
  408. package/third_party/s2geometry/src/s2/third_party/absl/meta/type_traits.h +436 -0
  409. package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128.cc +232 -0
  410. package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128.h +656 -0
  411. package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128_have_intrinsic.inc +3 -0
  412. package/third_party/s2geometry/src/s2/third_party/absl/numeric/int128_no_intrinsic.inc +3 -0
  413. package/third_party/s2geometry/src/s2/third_party/absl/strings/ascii.cc +198 -0
  414. package/third_party/s2geometry/src/s2/third_party/absl/strings/ascii.h +239 -0
  415. package/third_party/s2geometry/src/s2/third_party/absl/strings/ascii_ctype.h +66 -0
  416. package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/bits.h +53 -0
  417. package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/memutil.cc +110 -0
  418. package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/memutil.h +146 -0
  419. package/third_party/s2geometry/src/s2/third_party/absl/strings/internal/resize_uninitialized.h +72 -0
  420. package/third_party/s2geometry/src/s2/third_party/absl/strings/match.cc +38 -0
  421. package/third_party/s2geometry/src/s2/third_party/absl/strings/match.h +89 -0
  422. package/third_party/s2geometry/src/s2/third_party/absl/strings/numbers.cc +909 -0
  423. package/third_party/s2geometry/src/s2/third_party/absl/strings/numbers.h +187 -0
  424. package/third_party/s2geometry/src/s2/third_party/absl/strings/str_cat.cc +240 -0
  425. package/third_party/s2geometry/src/s2/third_party/absl/strings/str_cat.h +398 -0
  426. package/third_party/s2geometry/src/s2/third_party/absl/strings/str_join.h +22 -0
  427. package/third_party/s2geometry/src/s2/third_party/absl/strings/str_split.cc +47 -0
  428. package/third_party/s2geometry/src/s2/third_party/absl/strings/str_split.h +43 -0
  429. package/third_party/s2geometry/src/s2/third_party/absl/strings/string_view.cc +245 -0
  430. package/third_party/s2geometry/src/s2/third_party/absl/strings/string_view.h +602 -0
  431. package/third_party/s2geometry/src/s2/third_party/absl/strings/strip.cc +42 -0
  432. package/third_party/s2geometry/src/s2/third_party/absl/strings/strip.h +130 -0
  433. package/third_party/s2geometry/src/s2/third_party/absl/types/span.h +793 -0
  434. package/third_party/s2geometry/src/s2/third_party/absl/utility/utility.h +299 -0
  435. package/third_party/s2geometry/src/s2/util/bits/bit-interleave.cc +274 -0
  436. package/third_party/s2geometry/src/s2/util/bits/bit-interleave.h +53 -0
  437. package/third_party/s2geometry/src/s2/util/bits/bits.cc +155 -0
  438. package/third_party/s2geometry/src/s2/util/bits/bits.h +745 -0
  439. package/third_party/s2geometry/src/s2/util/coding/coder.cc +83 -0
  440. package/third_party/s2geometry/src/s2/util/coding/coder.h +553 -0
  441. package/third_party/s2geometry/src/s2/util/coding/nth-derivative.h +134 -0
  442. package/third_party/s2geometry/src/s2/util/coding/transforms.h +62 -0
  443. package/third_party/s2geometry/src/s2/util/coding/varint.cc +289 -0
  444. package/third_party/s2geometry/src/s2/util/coding/varint.h +476 -0
  445. package/third_party/s2geometry/src/s2/util/endian/endian.h +859 -0
  446. package/third_party/s2geometry/src/s2/util/gtl/btree.h +2471 -0
  447. package/third_party/s2geometry/src/s2/util/gtl/btree_container.h +411 -0
  448. package/third_party/s2geometry/src/s2/util/gtl/btree_map.h +79 -0
  449. package/third_party/s2geometry/src/s2/util/gtl/btree_set.h +73 -0
  450. package/third_party/s2geometry/src/s2/util/gtl/compact_array.h +653 -0
  451. package/third_party/s2geometry/src/s2/util/gtl/container_logging.h +291 -0
  452. package/third_party/s2geometry/src/s2/util/gtl/dense_hash_set.h +358 -0
  453. package/third_party/s2geometry/src/s2/util/gtl/densehashtable.h +1493 -0
  454. package/third_party/s2geometry/src/s2/util/gtl/hashtable_common.h +253 -0
  455. package/third_party/s2geometry/src/s2/util/gtl/layout.h +28 -0
  456. package/third_party/s2geometry/src/s2/util/gtl/legacy_random_shuffle.h +77 -0
  457. package/third_party/s2geometry/src/s2/util/hash/mix.h +76 -0
  458. package/third_party/s2geometry/src/s2/util/math/exactfloat/exactfloat.cc +832 -0
  459. package/third_party/s2geometry/src/s2/util/math/exactfloat/exactfloat.h +646 -0
  460. package/third_party/s2geometry/src/s2/util/math/mathutil.cc +75 -0
  461. package/third_party/s2geometry/src/s2/util/math/mathutil.h +189 -0
  462. package/third_party/s2geometry/src/s2/util/math/matrix3x3.h +574 -0
  463. package/third_party/s2geometry/src/s2/util/math/vector.h +569 -0
  464. package/third_party/s2geometry/src/s2/util/math/vector3_hash.h +54 -0
  465. package/third_party/s2geometry/src/s2/util/units/length-units.cc +21 -0
  466. package/third_party/s2geometry/src/s2/util/units/length-units.h +135 -0
  467. package/third_party/s2geometry/src/s2/util/units/physical-units.h +313 -0
  468. package/third_party/s2geometry/src/s2/value_lexicon.h +234 -0
  469. package/third_party/s2geometry/src/s2/value_lexicon_test.cc +121 -0
  470. package/third_party/s2geometry/third_party/cmake/FindGFlags.cmake +48 -0
  471. 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_