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