@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,666 @@
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 header file defines macros for declaring attributes for functions,
16
+ // types, and variables.
17
+ //
18
+ // These macros are used within Abseil and allow the compiler to optimize, where
19
+ // applicable, certain function calls.
20
+ //
21
+ // This file is used for both C and C++!
22
+ //
23
+ // Most macros here are exposing GCC or Clang features, and are stubbed out for
24
+ // other compilers.
25
+ //
26
+ // GCC attributes documentation:
27
+ // https://gcc.gnu.org/onlinedocs/gcc-4.7.0/gcc/Function-Attributes.html
28
+ // https://gcc.gnu.org/onlinedocs/gcc-4.7.0/gcc/Variable-Attributes.html
29
+ // https://gcc.gnu.org/onlinedocs/gcc-4.7.0/gcc/Type-Attributes.html
30
+ //
31
+ // Most attributes in this file are already supported by GCC 4.7. However, some
32
+ // of them are not supported in older version of Clang. Thus, we check
33
+ // `__has_attribute()` first. If the check fails, we check if we are on GCC and
34
+ // assume the attribute exists on GCC (which is verified on GCC 4.7).
35
+ //
36
+ // -----------------------------------------------------------------------------
37
+ // Sanitizer Attributes
38
+ // -----------------------------------------------------------------------------
39
+ //
40
+ // Sanitizer-related attributes are not "defined" in this file (and indeed
41
+ // are not defined as such in any file). To utilize the following
42
+ // sanitizer-related attributes within your builds, define the following macros
43
+ // within your build using a `-D` flag, along with the given value for
44
+ // `-fsanitize`:
45
+ //
46
+ // * `ADDRESS_SANITIZER` + `-fsanitize=address` (Clang, GCC 4.8)
47
+ // * `MEMORY_SANITIZER` + `-fsanitize=memory` (Clang-only)
48
+ // * `THREAD_SANITIZER + `-fsanitize=thread` (Clang, GCC 4.8+)
49
+ // * `UNDEFINED_BEHAVIOR_SANITIZER` + `-fsanitize=undefined` (Clang, GCC 4.9+)
50
+ // * `CONTROL_FLOW_INTEGRITY` + -fsanitize=cfi (Clang-only)
51
+ //
52
+ // Example:
53
+ //
54
+ // // Enable branches in the Abseil code that are tagged for ASan:
55
+ // $ bazel build --copt=-DADDRESS_SANITIZER --copt=-fsanitize=address
56
+ // --linkopt=-fsanitize=address *target*
57
+ //
58
+ // Since these macro names are only supported by GCC and Clang, we only check
59
+ // for `__GNUC__` (GCC or Clang) and the above macros.
60
+ #ifndef S2_THIRD_PARTY_ABSL_BASE_ATTRIBUTES_H_
61
+ #define S2_THIRD_PARTY_ABSL_BASE_ATTRIBUTES_H_
62
+
63
+ #if defined(SWIG)
64
+
65
+ #define ABSL_PRINTF_ATTRIBUTE(string_index, first_to_check)
66
+ #define ABSL_SCANF_ATTRIBUTE(string_index, first_to_check)
67
+ #define ABSL_ATTRIBUTE_ALWAYS_INLINE
68
+ #define ABSL_ATTRIBUTE_NOINLINE
69
+ #define ABSL_ATTRIBUTE_NO_TAIL_CALL
70
+ #define ABSL_HAVE_ATTRIBUTE_NO_TAIL_CALL 0
71
+ #define ABSL_ATTRIBUTE_WEAK
72
+ #define ABSL_HAVE_ATTRIBUTE_WEAK 0
73
+ #define ABSL_ATTRIBUTE_NONNULL(...)
74
+ #define ABSL_ATTRIBUTE_NORETURN
75
+ #define ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS
76
+ #define ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY
77
+ #define ABSL_ATTRIBUTE_NO_SANITIZE_THREAD
78
+ #define ABSL_ATTRIBUTE_NO_SANITIZE_UNDEFINED
79
+ #define ABSL_ATTRIBUTE_NO_SANITIZE_CFI
80
+ #define ABSL_ATTRIBUTE_NO_SANITIZE_SAFESTACK
81
+ #define ABSL_ATTRIBUTE_RETURNS_NONNULL
82
+ #if SWIG_VERSION >= 0x020000
83
+ #define ABSL_HAVE_ATTRIBUTE_SECTION 0
84
+ #endif
85
+ #define ABSL_ATTRIBUTE_SECTION(name)
86
+ #define ABSL_ATTRIBUTE_SECTION_VARIABLE(name)
87
+ #define ABSL_INIT_ATTRIBUTE_SECTION_VARS(name)
88
+ #define ABSL_DEFINE_ATTRIBUTE_SECTION_VARS(name)
89
+ #define ABSL_DECLARE_ATTRIBUTE_SECTION_VARS(name)
90
+ #define ABSL_ATTRIBUTE_SECTION_START(name) (reinterpret_cast<void *>(0))
91
+ #define ABSL_ATTRIBUTE_SECTION_STOP(name) (reinterpret_cast<void *>(0))
92
+ #define ABSL_ATTRIBUTE_STACK_ALIGN_FOR_OLD_LIBC
93
+ #define ABSL_REQUIRE_STACK_ALIGN_TRAMPOLINE (0)
94
+ #define ABSL_MUST_USE_RESULT
95
+ #define ABSL_ATTRIBUTE_HOT
96
+ #define ABSL_ATTRIBUTE_COLD
97
+ #define ABSL_ATTRIBUTE_REINITIALIZES
98
+ #define ABSL_ATTRIBUTE_UNUSED
99
+ #define ABSL_ATTRIBUTE_INITIAL_EXEC
100
+ #define ABSL_ATTRIBUTE_PACKED
101
+ #define ABSL_ATTRIBUTE_FUNC_ALIGN(bytes)
102
+
103
+ // To be deleted macros. All macros are going te be renamed with ABSL_ prefix.
104
+ // TODO(user): delete macros
105
+ #define MUST_USE_RESULT
106
+
107
+ #else // SWIG
108
+
109
+ // ABSL_HAVE_ATTRIBUTE
110
+ //
111
+ // A function-like feature checking macro that is a wrapper around
112
+ // `__has_attribute`, which is defined by GCC 5+ and Clang and evaluates to a
113
+ // nonzero constant integer if the attribute is supported or 0 if not.
114
+ //
115
+ // It evaluates to zero if `__has_attribute` is not defined by the compiler.
116
+ //
117
+ // GCC: https://gcc.gnu.org/gcc-5/changes.html
118
+ // Clang: https://clang.llvm.org/docs/LanguageExtensions.html
119
+ #ifdef __has_attribute
120
+ #define ABSL_HAVE_ATTRIBUTE(x) __has_attribute(x)
121
+ #else
122
+ #define ABSL_HAVE_ATTRIBUTE(x) 0
123
+ #endif
124
+
125
+ // ABSL_HAVE_CPP_ATTRIBUTE
126
+ //
127
+ // A function-like feature checking macro that accepts C++11 style attributes.
128
+ // It's a wrapper around `__has_cpp_attribute`, defined by ISO C++ SD-6
129
+ // (http://en.cppreference.com/w/cpp/experimental/feature_test). If we don't
130
+ // find `__has_cpp_attribute`, will evaluate to 0.
131
+ #if defined(__cplusplus) && defined(__has_cpp_attribute)
132
+ // NOTE: requiring __cplusplus above should not be necessary, but
133
+ // works around https://bugs.llvm.org/show_bug.cgi?id=23435.
134
+ #define ABSL_HAVE_CPP_ATTRIBUTE(x) __has_cpp_attribute(x)
135
+ #else
136
+ #define ABSL_HAVE_CPP_ATTRIBUTE(x) 0
137
+ #endif
138
+
139
+ // -----------------------------------------------------------------------------
140
+ // Function Attributes
141
+ // -----------------------------------------------------------------------------
142
+ //
143
+ // GCC: https://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html
144
+ // Clang: https://clang.llvm.org/docs/AttributeReference.html
145
+
146
+ // ABSL_PRINTF_ATTRIBUTE
147
+ // ABSL_SCANF_ATTRIBUTE
148
+ //
149
+ // Tells the compiler to perform `printf` format string checking if the
150
+ // compiler supports it; see the 'format' attribute in
151
+ // <http://gcc.gnu.org/onlinedocs/gcc-4.7.0/gcc/Function-Attributes.html>.
152
+ //
153
+ // Note: As the GCC manual states, "[s]ince non-static C++ methods
154
+ // have an implicit 'this' argument, the arguments of such methods
155
+ // should be counted from two, not one."
156
+ #if ABSL_HAVE_ATTRIBUTE(format) || (defined(__GNUC__) && !defined(__clang__))
157
+ #define ABSL_PRINTF_ATTRIBUTE(string_index, first_to_check) \
158
+ __attribute__((__format__(__printf__, string_index, first_to_check)))
159
+ #define ABSL_SCANF_ATTRIBUTE(string_index, first_to_check) \
160
+ __attribute__((__format__(__scanf__, string_index, first_to_check)))
161
+ #else
162
+ #define ABSL_PRINTF_ATTRIBUTE(string_index, first_to_check)
163
+ #define ABSL_SCANF_ATTRIBUTE(string_index, first_to_check)
164
+ #endif
165
+
166
+ // ABSL_ATTRIBUTE_ALWAYS_INLINE
167
+ // ABSL_ATTRIBUTE_NOINLINE
168
+ //
169
+ // Forces functions to either inline or not inline. Introduced in gcc 3.1.
170
+ #if ABSL_HAVE_ATTRIBUTE(always_inline) || \
171
+ (defined(__GNUC__) && !defined(__clang__))
172
+ #define ABSL_ATTRIBUTE_ALWAYS_INLINE __attribute__((always_inline))
173
+ #define ABSL_HAVE_ATTRIBUTE_ALWAYS_INLINE 1
174
+ #else
175
+ #define ABSL_ATTRIBUTE_ALWAYS_INLINE
176
+ #endif
177
+
178
+ #if ABSL_HAVE_ATTRIBUTE(noinline) || (defined(__GNUC__) && !defined(__clang__))
179
+ #define ABSL_ATTRIBUTE_NOINLINE __attribute__((noinline))
180
+ #define ABSL_HAVE_ATTRIBUTE_NOINLINE 1
181
+ #else
182
+ #define ABSL_ATTRIBUTE_NOINLINE
183
+ #endif
184
+
185
+ // ABSL_ATTRIBUTE_NO_TAIL_CALL
186
+ //
187
+ // Prevents the compiler from optimizing away stack frames for functions which
188
+ // end in a call to another function.
189
+ #if ABSL_HAVE_ATTRIBUTE(disable_tail_calls)
190
+ #define ABSL_HAVE_ATTRIBUTE_NO_TAIL_CALL 1
191
+ #define ABSL_ATTRIBUTE_NO_TAIL_CALL __attribute__((disable_tail_calls))
192
+ #elif defined(__GNUC__) && !defined(__clang__)
193
+ #define ABSL_HAVE_ATTRIBUTE_NO_TAIL_CALL 1
194
+ #define ABSL_ATTRIBUTE_NO_TAIL_CALL \
195
+ __attribute__((optimize("no-optimize-sibling-calls")))
196
+ #else
197
+ #define ABSL_ATTRIBUTE_NO_TAIL_CALL
198
+ #define ABSL_HAVE_ATTRIBUTE_NO_TAIL_CALL 0
199
+ #endif
200
+
201
+ // ABSL_ATTRIBUTE_WEAK
202
+ //
203
+ // Tags a function as weak for the purposes of compilation and linking.
204
+ // Weak attributes currently do not work properly in LLVM's Windows backend,
205
+ // so disable them there. See https://bugs.llvm.org/show_bug.cgi?id=37598
206
+ // for futher information.
207
+ #if (ABSL_HAVE_ATTRIBUTE(weak) || \
208
+ (defined(__GNUC__) && !defined(__clang__))) && \
209
+ !(defined(__llvm__) && defined(_WIN32))
210
+ #undef ABSL_ATTRIBUTE_WEAK
211
+ #define ABSL_ATTRIBUTE_WEAK __attribute__((weak))
212
+ #define ABSL_HAVE_ATTRIBUTE_WEAK 1
213
+ #else
214
+ #define ABSL_ATTRIBUTE_WEAK
215
+ #define ABSL_HAVE_ATTRIBUTE_WEAK 0
216
+ #endif
217
+
218
+ // ABSL_ATTRIBUTE_NONNULL
219
+ //
220
+ // Tells the compiler either (a) that a particular function parameter
221
+ // should be a non-null pointer, or (b) that all pointer arguments should
222
+ // be non-null.
223
+ //
224
+ // Note: As the GCC manual states, "[s]ince non-static C++ methods
225
+ // have an implicit 'this' argument, the arguments of such methods
226
+ // should be counted from two, not one."
227
+ //
228
+ // Args are indexed starting at 1.
229
+ //
230
+ // For non-static class member functions, the implicit `this` argument
231
+ // is arg 1, and the first explicit argument is arg 2. For static class member
232
+ // functions, there is no implicit `this`, and the first explicit argument is
233
+ // arg 1.
234
+ //
235
+ // Example:
236
+ //
237
+ // /* arg_a cannot be null, but arg_b can */
238
+ // void Function(void* arg_a, void* arg_b) ABSL_ATTRIBUTE_NONNULL(1);
239
+ //
240
+ // class C {
241
+ // /* arg_a cannot be null, but arg_b can */
242
+ // void Method(void* arg_a, void* arg_b) ABSL_ATTRIBUTE_NONNULL(2);
243
+ //
244
+ // /* arg_a cannot be null, but arg_b can */
245
+ // static void StaticMethod(void* arg_a, void* arg_b)
246
+ // ABSL_ATTRIBUTE_NONNULL(1);
247
+ // };
248
+ //
249
+ // If no arguments are provided, then all pointer arguments should be non-null.
250
+ //
251
+ // /* No pointer arguments may be null. */
252
+ // void Function(void* arg_a, void* arg_b, int arg_c) ABSL_ATTRIBUTE_NONNULL();
253
+ //
254
+ // NOTE: The GCC nonnull attribute actually accepts a list of arguments, but
255
+ // ABSL_ATTRIBUTE_NONNULL does not.
256
+ #if ABSL_HAVE_ATTRIBUTE(nonnull) || (defined(__GNUC__) && !defined(__clang__))
257
+ #define ABSL_ATTRIBUTE_NONNULL(arg_index) __attribute__((nonnull(arg_index)))
258
+ #else
259
+ #define ABSL_ATTRIBUTE_NONNULL(...)
260
+ #endif
261
+
262
+ // ABSL_ATTRIBUTE_NORETURN
263
+ //
264
+ // Tells the compiler that a given function never returns.
265
+ #if ABSL_HAVE_ATTRIBUTE(noreturn) || (defined(__GNUC__) && !defined(__clang__))
266
+ #define ABSL_ATTRIBUTE_NORETURN __attribute__((noreturn))
267
+ #elif defined(_MSC_VER)
268
+ #define ABSL_ATTRIBUTE_NORETURN __declspec(noreturn)
269
+ #else
270
+ #define ABSL_ATTRIBUTE_NORETURN
271
+ #endif
272
+
273
+ // ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS
274
+ //
275
+ // Tells the AddressSanitizer (or other memory testing tools) to ignore a given
276
+ // function. Useful for cases when a function reads random locations on stack,
277
+ // calls _exit from a cloned subprocess, deliberately accesses buffer
278
+ // out of bounds or does other scary things with memory.
279
+ // NOTE: GCC supports AddressSanitizer(asan) since 4.8.
280
+ // https://gcc.gnu.org/gcc-4.8/changes.html
281
+ #if defined(__GNUC__) && defined(ADDRESS_SANITIZER)
282
+ #define ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address))
283
+ #else
284
+ #define ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS
285
+ #endif
286
+
287
+ // ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY
288
+ //
289
+ // Tells the MemorySanitizer to relax the handling of a given function. All
290
+ // "Use of uninitialized value" warnings from such functions will be suppressed,
291
+ // and all values loaded from memory will be considered fully initialized.
292
+ // This attribute is similar to the ADDRESS_SANITIZER attribute above, but deals
293
+ // with initialized-ness rather than addressability issues.
294
+ // NOTE: MemorySanitizer(msan) is supported by Clang but not GCC.
295
+ #if defined(__GNUC__) && defined(MEMORY_SANITIZER)
296
+ #define ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY __attribute__((no_sanitize_memory))
297
+ #else
298
+ #define ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY
299
+ #endif
300
+
301
+ // ABSL_ATTRIBUTE_NO_SANITIZE_THREAD
302
+ //
303
+ // Tells the ThreadSanitizer to not instrument a given function.
304
+ // If you are adding this attribute, please cc dynamic-tools@ on the cl.
305
+ // NOTE: GCC supports ThreadSanitizer(tsan) since 4.8.
306
+ // https://gcc.gnu.org/gcc-4.8/changes.html
307
+ #if defined(__GNUC__) && defined(THREAD_SANITIZER)
308
+ #define ABSL_ATTRIBUTE_NO_SANITIZE_THREAD __attribute__((no_sanitize_thread))
309
+ #else
310
+ #define ABSL_ATTRIBUTE_NO_SANITIZE_THREAD
311
+ #endif
312
+
313
+ // ABSL_ATTRIBUTE_NO_SANITIZE_UNDEFINED
314
+ //
315
+ // Tells the UndefinedSanitizer to ignore a given function. Useful for cases
316
+ // where certain behavior (eg. division by zero) is being used intentionally.
317
+ // NOTE: GCC supports UndefinedBehaviorSanitizer(ubsan) since 4.9.
318
+ // https://gcc.gnu.org/gcc-4.9/changes.html
319
+ #if defined(__GNUC__) && \
320
+ (defined(UNDEFINED_BEHAVIOR_SANITIZER) || defined(ADDRESS_SANITIZER))
321
+ #define ABSL_ATTRIBUTE_NO_SANITIZE_UNDEFINED \
322
+ __attribute__((no_sanitize("undefined")))
323
+ #else
324
+ #define ABSL_ATTRIBUTE_NO_SANITIZE_UNDEFINED
325
+ #endif
326
+
327
+ // ABSL_ATTRIBUTE_NO_SANITIZE_CFI
328
+ //
329
+ // Tells the ControlFlowIntegrity sanitizer to not instrument a given function.
330
+ // See https://clang.llvm.org/docs/ControlFlowIntegrity.html for details.
331
+ #if defined(__GNUC__) && defined(CONTROL_FLOW_INTEGRITY)
332
+ #define ABSL_ATTRIBUTE_NO_SANITIZE_CFI __attribute__((no_sanitize("cfi")))
333
+ #else
334
+ #define ABSL_ATTRIBUTE_NO_SANITIZE_CFI
335
+ #endif
336
+
337
+ // ABSL_ATTRIBUTE_NO_SANITIZE_SAFESTACK
338
+ //
339
+ // Tells the SafeStack to not instrument a given function.
340
+ // See https://clang.llvm.org/docs/SafeStack.html for details.
341
+ #if defined(__GNUC__) && defined(SAFESTACK_SANITIZER)
342
+ #define ABSL_ATTRIBUTE_NO_SANITIZE_SAFESTACK \
343
+ __attribute__((no_sanitize("safe-stack")))
344
+ #else
345
+ #define ABSL_ATTRIBUTE_NO_SANITIZE_SAFESTACK
346
+ #endif
347
+
348
+ // ABSL_ATTRIBUTE_RETURNS_NONNULL
349
+ //
350
+ // Tells the compiler that a particular function never returns a null pointer.
351
+ #if ABSL_HAVE_ATTRIBUTE(returns_nonnull) || \
352
+ (defined(__GNUC__) && \
353
+ (__GNUC__ > 5 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 9)) && \
354
+ !defined(__clang__))
355
+ #define ABSL_ATTRIBUTE_RETURNS_NONNULL __attribute__((returns_nonnull))
356
+ #else
357
+ #define ABSL_ATTRIBUTE_RETURNS_NONNULL
358
+ #endif
359
+
360
+ // ABSL_HAVE_ATTRIBUTE_SECTION
361
+ //
362
+ // Indicates whether labeled sections are supported. Weak symbol support is
363
+ // a prerequisite. Labeled sections are not supported on Darwin/iOS.
364
+ #ifdef ABSL_HAVE_ATTRIBUTE_SECTION
365
+ #error ABSL_HAVE_ATTRIBUTE_SECTION cannot be directly set
366
+ #elif (ABSL_HAVE_ATTRIBUTE(section) || \
367
+ (defined(__GNUC__) && !defined(__clang__))) && \
368
+ !defined(__APPLE__) && ABSL_HAVE_ATTRIBUTE_WEAK
369
+ #define ABSL_HAVE_ATTRIBUTE_SECTION 1
370
+
371
+ // ABSL_ATTRIBUTE_SECTION
372
+ //
373
+ // Tells the compiler/linker to put a given function into a section and define
374
+ // `__start_ ## name` and `__stop_ ## name` symbols to bracket the section.
375
+ // This functionality is supported by GNU linker. Any function annotated with
376
+ // `ABSL_ATTRIBUTE_SECTION` must not be inlined, or it will be placed into
377
+ // whatever section its caller is placed into.
378
+ //
379
+ #ifndef ABSL_ATTRIBUTE_SECTION
380
+ #define ABSL_ATTRIBUTE_SECTION(name) \
381
+ __attribute__((section(#name))) __attribute__((noinline))
382
+ #endif
383
+
384
+
385
+ // ABSL_ATTRIBUTE_SECTION_VARIABLE
386
+ //
387
+ // Tells the compiler/linker to put a given variable into a section and define
388
+ // `__start_ ## name` and `__stop_ ## name` symbols to bracket the section.
389
+ // This functionality is supported by GNU linker.
390
+ #ifndef ABSL_ATTRIBUTE_SECTION_VARIABLE
391
+ #define ABSL_ATTRIBUTE_SECTION_VARIABLE(name) __attribute__((section(#name)))
392
+ #endif
393
+
394
+ // ABSL_DECLARE_ATTRIBUTE_SECTION_VARS
395
+ //
396
+ // A weak section declaration to be used as a global declaration
397
+ // for ABSL_ATTRIBUTE_SECTION_START|STOP(name) to compile and link
398
+ // even without functions with ABSL_ATTRIBUTE_SECTION(name).
399
+ // ABSL_DEFINE_ATTRIBUTE_SECTION should be in the exactly one file; it's
400
+ // a no-op on ELF but not on Mach-O.
401
+ //
402
+ #ifndef ABSL_DECLARE_ATTRIBUTE_SECTION_VARS
403
+ #define ABSL_DECLARE_ATTRIBUTE_SECTION_VARS(name) \
404
+ extern char __start_##name[] ABSL_ATTRIBUTE_WEAK; \
405
+ extern char __stop_##name[] ABSL_ATTRIBUTE_WEAK
406
+ #endif
407
+ #ifndef ABSL_DEFINE_ATTRIBUTE_SECTION_VARS
408
+ #define ABSL_INIT_ATTRIBUTE_SECTION_VARS(name)
409
+ #define ABSL_DEFINE_ATTRIBUTE_SECTION_VARS(name)
410
+ #endif
411
+
412
+ // ABSL_ATTRIBUTE_SECTION_START
413
+ //
414
+ // Returns `void*` pointers to start/end of a section of code with
415
+ // functions having ABSL_ATTRIBUTE_SECTION(name).
416
+ // Returns 0 if no such functions exist.
417
+ // One must ABSL_DECLARE_ATTRIBUTE_SECTION_VARS(name) for this to compile and
418
+ // link.
419
+ //
420
+ #define ABSL_ATTRIBUTE_SECTION_START(name) \
421
+ (reinterpret_cast<void *>(__start_##name))
422
+ #define ABSL_ATTRIBUTE_SECTION_STOP(name) \
423
+ (reinterpret_cast<void *>(__stop_##name))
424
+
425
+ #else // !ABSL_HAVE_ATTRIBUTE_SECTION
426
+
427
+ #define ABSL_HAVE_ATTRIBUTE_SECTION 0
428
+
429
+ // provide dummy definitions
430
+ #define ABSL_ATTRIBUTE_SECTION(name)
431
+ #define ABSL_ATTRIBUTE_SECTION_VARIABLE(name)
432
+ #define ABSL_INIT_ATTRIBUTE_SECTION_VARS(name)
433
+ #define ABSL_DEFINE_ATTRIBUTE_SECTION_VARS(name)
434
+ #define ABSL_DECLARE_ATTRIBUTE_SECTION_VARS(name)
435
+ #define ABSL_ATTRIBUTE_SECTION_START(name) (reinterpret_cast<void *>(0))
436
+ #define ABSL_ATTRIBUTE_SECTION_STOP(name) (reinterpret_cast<void *>(0))
437
+
438
+ #endif // ABSL_ATTRIBUTE_SECTION
439
+
440
+ // ABSL_ATTRIBUTE_STACK_ALIGN_FOR_OLD_LIBC
441
+ //
442
+ // Support for aligning the stack on 32-bit x86.
443
+ #if ABSL_HAVE_ATTRIBUTE(force_align_arg_pointer) || \
444
+ (defined(__GNUC__) && !defined(__clang__))
445
+ #if defined(__i386__)
446
+ #define ABSL_ATTRIBUTE_STACK_ALIGN_FOR_OLD_LIBC \
447
+ __attribute__((force_align_arg_pointer))
448
+ #define ABSL_REQUIRE_STACK_ALIGN_TRAMPOLINE (0)
449
+ #elif defined(__x86_64__)
450
+ #define ABSL_REQUIRE_STACK_ALIGN_TRAMPOLINE (1)
451
+ #define ABSL_ATTRIBUTE_STACK_ALIGN_FOR_OLD_LIBC
452
+ #else // !__i386__ && !__x86_64
453
+ #define ABSL_REQUIRE_STACK_ALIGN_TRAMPOLINE (0)
454
+ #define ABSL_ATTRIBUTE_STACK_ALIGN_FOR_OLD_LIBC
455
+ #endif // __i386__
456
+ #else
457
+ #define ABSL_ATTRIBUTE_STACK_ALIGN_FOR_OLD_LIBC
458
+ #define ABSL_REQUIRE_STACK_ALIGN_TRAMPOLINE (0)
459
+ #endif
460
+
461
+ // ABSL_MUST_USE_RESULT
462
+ //
463
+ // Tells the compiler to warn about unused results.
464
+ //
465
+ // When annotating a function, it must appear as the first part of the
466
+ // declaration or definition. The compiler will warn if the return value from
467
+ // such a function is unused:
468
+ //
469
+ // ABSL_MUST_USE_RESULT Sprocket* AllocateSprocket();
470
+ // AllocateSprocket(); // Triggers a warning.
471
+ //
472
+ // When annotating a class, it is equivalent to annotating every function which
473
+ // returns an instance.
474
+ //
475
+ // class ABSL_MUST_USE_RESULT Sprocket {};
476
+ // Sprocket(); // Triggers a warning.
477
+ //
478
+ // Sprocket MakeSprocket();
479
+ // MakeSprocket(); // Triggers a warning.
480
+ //
481
+ // Note that references and pointers are not instances:
482
+ //
483
+ // Sprocket* SprocketPointer();
484
+ // SprocketPointer(); // Does *not* trigger a warning.
485
+ //
486
+ // ABSL_MUST_USE_RESULT allows using cast-to-void to suppress the unused result
487
+ // warning. For that, warn_unused_result is used only for clang but not for gcc.
488
+ // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66425
489
+ //
490
+ // Note: past advice was to place the macro after the argument list.
491
+ #if ABSL_HAVE_ATTRIBUTE(nodiscard)
492
+ #define ABSL_MUST_USE_RESULT [[nodiscard]]
493
+ #elif defined(__clang__) && ABSL_HAVE_ATTRIBUTE(warn_unused_result)
494
+ #define ABSL_MUST_USE_RESULT __attribute__((warn_unused_result))
495
+ #else
496
+ #define ABSL_MUST_USE_RESULT
497
+ #endif
498
+
499
+ // To be deleted macros. All macros are going te be renamed with ABSL_ prefix.
500
+ // TODO(user): delete macros
501
+ #if ABSL_HAVE_ATTRIBUTE(warn_unused_result) || \
502
+ (defined(__GNUC__) && !defined(__clang__))
503
+ #define MUST_USE_RESULT __attribute__ ((warn_unused_result))
504
+ #else
505
+ #define MUST_USE_RESULT
506
+ #endif
507
+
508
+ // ABSL_ATTRIBUTE_HOT, ABSL_ATTRIBUTE_COLD
509
+ //
510
+ // Tells GCC that a function is hot or cold. GCC can use this information to
511
+ // improve static analysis, i.e. a conditional branch to a cold function
512
+ // is likely to be not-taken.
513
+ // This annotation is used for function declarations.
514
+ //
515
+ // Example:
516
+ //
517
+ // int foo() ABSL_ATTRIBUTE_HOT;
518
+ #if ABSL_HAVE_ATTRIBUTE(hot) || (defined(__GNUC__) && !defined(__clang__))
519
+ #define ABSL_ATTRIBUTE_HOT __attribute__((hot))
520
+ #else
521
+ #define ABSL_ATTRIBUTE_HOT
522
+ #endif
523
+
524
+ #if ABSL_HAVE_ATTRIBUTE(cold) || (defined(__GNUC__) && !defined(__clang__))
525
+ #define ABSL_ATTRIBUTE_COLD __attribute__((cold))
526
+ #else
527
+ #define ABSL_ATTRIBUTE_COLD
528
+ #endif
529
+
530
+ // ABSL_XRAY_ALWAYS_INSTRUMENT, ABSL_XRAY_NEVER_INSTRUMENT, ABSL_XRAY_LOG_ARGS
531
+ //
532
+ // We define the ABSL_XRAY_ALWAYS_INSTRUMENT and ABSL_XRAY_NEVER_INSTRUMENT
533
+ // macro used as an attribute to mark functions that must always or never be
534
+ // instrumented by XRay. Currently, this is only supported in Clang/LLVM.
535
+ //
536
+ // For reference on the LLVM XRay instrumentation, see
537
+ // http://llvm.org/docs/XRay.html.
538
+ //
539
+ // A function with the XRAY_ALWAYS_INSTRUMENT macro attribute in its declaration
540
+ // will always get the XRay instrumentation sleds. These sleds may introduce
541
+ // some binary size and runtime overhead and must be used sparingly.
542
+ //
543
+ // These attributes only take effect when the following conditions are met:
544
+ //
545
+ // * The file/target is built in at least C++11 mode, with a Clang compiler
546
+ // that supports XRay attributes.
547
+ // * The file/target is built with the -fxray-instrument flag set for the
548
+ // Clang/LLVM compiler.
549
+ // * The function is defined in the translation unit (the compiler honors the
550
+ // attribute in either the definition or the declaration, and must match).
551
+ //
552
+ // There are cases when, even when building with XRay instrumentation, users
553
+ // might want to control specifically which functions are instrumented for a
554
+ // particular build using special-case lists provided to the compiler. These
555
+ // special case lists are provided to Clang via the
556
+ // -fxray-always-instrument=... and -fxray-never-instrument=... flags. The
557
+ // attributes in source take precedence over these special-case lists.
558
+ //
559
+ // To disable the XRay attributes at build-time, users may define
560
+ // ABSL_NO_XRAY_ATTRIBUTES. Do NOT define ABSL_NO_XRAY_ATTRIBUTES on specific
561
+ // packages/targets, as this may lead to conflicting definitions of functions at
562
+ // link-time.
563
+ //
564
+ #if ABSL_HAVE_CPP_ATTRIBUTE(clang::xray_always_instrument) && \
565
+ !defined(ABSL_NO_XRAY_ATTRIBUTES)
566
+ #define ABSL_XRAY_ALWAYS_INSTRUMENT [[clang::xray_always_instrument]]
567
+ #define ABSL_XRAY_NEVER_INSTRUMENT [[clang::xray_never_instrument]]
568
+ #if ABSL_HAVE_CPP_ATTRIBUTE(clang::xray_log_args)
569
+ #define ABSL_XRAY_LOG_ARGS(N) \
570
+ [[clang::xray_always_instrument, clang::xray_log_args(N)]]
571
+ #else
572
+ #define ABSL_XRAY_LOG_ARGS(N) [[clang::xray_always_instrument]]
573
+ #endif
574
+ #else
575
+ #define ABSL_XRAY_ALWAYS_INSTRUMENT
576
+ #define ABSL_XRAY_NEVER_INSTRUMENT
577
+ #define ABSL_XRAY_LOG_ARGS(N)
578
+ #endif
579
+
580
+ // ABSL_ATTRIBUTE_REINITIALIZES
581
+ //
582
+ // Indicates that a member function reinitializes the entire object to a known
583
+ // state, independent of the previous state of the object.
584
+ //
585
+ // The clang-tidy check bugprone-use-after-move allows member functions marked
586
+ // with this attribute to be called on objects that have been moved from;
587
+ // without the attribute, this would result in a use-after-move warning.
588
+ #if ABSL_HAVE_CPP_ATTRIBUTE(clang::reinitializes)
589
+ #define ABSL_ATTRIBUTE_REINITIALIZES [[clang::reinitializes]]
590
+ #else
591
+ #define ABSL_ATTRIBUTE_REINITIALIZES
592
+ #endif
593
+
594
+ // -----------------------------------------------------------------------------
595
+ // Variable Attributes
596
+ // -----------------------------------------------------------------------------
597
+
598
+ // ABSL_ATTRIBUTE_UNUSED
599
+ //
600
+ // Prevents the compiler from complaining about variables that appear unused.
601
+ #if ABSL_HAVE_ATTRIBUTE(unused) || (defined(__GNUC__) && !defined(__clang__))
602
+ #undef ABSL_ATTRIBUTE_UNUSED
603
+ #define ABSL_ATTRIBUTE_UNUSED __attribute__((__unused__))
604
+ #else
605
+ #define ABSL_ATTRIBUTE_UNUSED
606
+ #endif
607
+
608
+ // ABSL_ATTRIBUTE_INITIAL_EXEC
609
+ //
610
+ // Tells the compiler to use "initial-exec" mode for a thread-local variable.
611
+ // See http://people.redhat.com/drepper/tls.pdf for the gory details.
612
+ #if ABSL_HAVE_ATTRIBUTE(tls_model) || (defined(__GNUC__) && !defined(__clang__))
613
+ #define ABSL_ATTRIBUTE_INITIAL_EXEC __attribute__((tls_model("initial-exec")))
614
+ #else
615
+ #define ABSL_ATTRIBUTE_INITIAL_EXEC
616
+ #endif
617
+
618
+ // ABSL_ATTRIBUTE_PACKED
619
+ //
620
+ // Prevents the compiler from padding a structure to natural alignment
621
+ #if ABSL_HAVE_ATTRIBUTE(packed) || (defined(__GNUC__) && !defined(__clang__))
622
+ #define ABSL_ATTRIBUTE_PACKED __attribute__((__packed__))
623
+ #else
624
+ #define ABSL_ATTRIBUTE_PACKED
625
+ #endif
626
+
627
+ // ABSL_ATTRIBUTE_FUNC_ALIGN
628
+ //
629
+ // Tells the compiler to align the function start at least to certain
630
+ // alignment boundary
631
+ #if ABSL_HAVE_ATTRIBUTE(aligned) || (defined(__GNUC__) && !defined(__clang__))
632
+ #define ABSL_ATTRIBUTE_FUNC_ALIGN(bytes) __attribute__((aligned(bytes)))
633
+ #else
634
+ #define ABSL_ATTRIBUTE_FUNC_ALIGN(bytes)
635
+ #endif
636
+
637
+ #endif // SWIG
638
+
639
+ // ABSL_CONST_INIT
640
+ //
641
+ // A variable declaration annotated with the `ABSL_CONST_INIT` attribute will
642
+ // not compile (on supported platforms) unless the variable has a constant
643
+ // initializer. This is useful for variables with static and thread storage
644
+ // duration, because it guarantees that they will not suffer from the so-called
645
+ // "static init order fiasco". Prefer to put this attribute on the most visible
646
+ // declaration of the variable, if there's more than one, because code that
647
+ // accesses the variable can then use the attribute for optimization.
648
+ //
649
+ // Example:
650
+ //
651
+ // class MyClass {
652
+ // public:
653
+ // ABSL_CONST_INIT static MyType my_var;
654
+ // };
655
+ //
656
+ // MyType MyClass::my_var = MakeMyType(...);
657
+ //
658
+ // Note that this attribute is redundant if the variable is declared constexpr.
659
+ #if ABSL_HAVE_CPP_ATTRIBUTE(clang::require_constant_initialization)
660
+ // NOLINTNEXTLINE(whitespace/braces)
661
+ #define ABSL_CONST_INIT [[clang::require_constant_initialization]]
662
+ #else
663
+ #define ABSL_CONST_INIT
664
+ #endif // ABSL_HAVE_CPP_ATTRIBUTE(clang::require_constant_initialization)
665
+
666
+ #endif // S2_THIRD_PARTY_ABSL_BASE_ATTRIBUTES_H_