@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,60 @@
1
+ // Copyright 2015 Google Inc. All Rights Reserved.
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
+ // Author: ericv@google.com (Eric Veach)
17
+
18
+ #ifndef S2__FP_CONTRACT_OFF_H_
19
+ #define S2__FP_CONTRACT_OFF_H_
20
+
21
+ // Turn off the fused multiply-add optimization ("fp-contract"). With
22
+ // fp-contract on, any expression of the form "a * b + c" has two possible
23
+ // results, and the compiler is free to choose either of them. Effectively
24
+ // this makes it impossible to write deterministic functions that involve
25
+ // floating-point math.
26
+ //
27
+ // S2 requires deterministic arithmetic for correctness. We need to turn off
28
+ // fp-contract for the entire compilation unit, because S2 has public inline
29
+ // functions, and the optimization is controlled by the setting in effect when
30
+ // inline functions are instantiated (not when they are defined).
31
+ //
32
+ // Note that there is a standard C pragma to turn off FP contraction:
33
+ // #pragma STDC FP_CONTRACT OFF
34
+ // but it is not implemented in GCC because the standard pragma allows control
35
+ // at the level of compound statements rather than entire functions.
36
+ //
37
+ // This file may be included with other files in any order, as long as it
38
+ // appears before the first non-inline function definition. It is
39
+ // named with an underscore so that it is included first among the S2 headers.
40
+
41
+ // TODO(compiler-team): Figure out how to do this in a portable way.
42
+ #if defined(HAVE_ARMEABI_V7A)
43
+ // Some android builds use a buggy compiler that runs out of memory while
44
+ // parsing the pragma (--cpu=armeabi-v7a).
45
+
46
+ #elif defined(__ANDROID__)
47
+ // Other android builds use a buggy compiler that crashes with an internal
48
+ // error (Android NDK R9).
49
+
50
+ #elif defined(__clang__)
51
+ // Clang supports the standard C++ pragma for turning off this optimization.
52
+ #pragma STDC FP_CONTRACT OFF
53
+
54
+ #elif defined(__GNUC__)
55
+ // GCC defines its own pragma that operates at the function level rather than
56
+ // the statement level.
57
+ #pragma GCC optimize("fp-contract=off")
58
+ #endif
59
+
60
+ #endif // S2__FP_CONTRACT_OFF_H_
@@ -0,0 +1,318 @@
1
+ // Copyright 2009 Google Inc. All Rights Reserved.
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
+
17
+ //
18
+ // Various Google-specific casting templates.
19
+ //
20
+ // This code is compiled directly on many platforms, including client
21
+ // platforms like Windows, Mac, and embedded systems. Before making
22
+ // any changes here, make sure that you're not breaking any platforms.
23
+ //
24
+
25
+ #ifndef S2_BASE_CASTS_H_
26
+ #define S2_BASE_CASTS_H_
27
+
28
+ #include <cassert> // for use with down_cast<>
29
+ #include <climits> // for enumeration casts and tests
30
+ #include <type_traits>
31
+
32
+ #include "s2/third_party/absl/base/casts.h"
33
+ #include "s2/third_party/absl/base/macros.h"
34
+
35
+ // An "upcast", i.e. a conversion from a pointer to an object to a pointer to a
36
+ // base subobject, always succeeds if the base is unambiguous and accessible,
37
+ // and so it's fine to use implicit_cast.
38
+ //
39
+ // A "downcast", i.e. a conversion from a pointer to an object to a pointer
40
+ // to a more-derived object that may contain the original object as a base
41
+ // subobject, cannot safely be done using static_cast, because you do not
42
+ // generally know whether the source object is really the base subobject of
43
+ // a containing, more-derived object of the target type. Thus, when you
44
+ // downcast in a polymorphic type hierarchy, you should use the following
45
+ // function template.
46
+ //
47
+ // In debug mode, we use dynamic_cast to double-check whether the downcast is
48
+ // legal (we die if it's not). In normal mode, we do the efficient static_cast
49
+ // instead. Thus, it's important to test in debug mode to make sure the cast is
50
+ // legal!
51
+ //
52
+ // This is the only place in the codebase we should use dynamic_cast.
53
+ // In particular, you should NOT use dynamic_cast for RTTI, e.g. for
54
+ // code like this:
55
+ // if (auto* p = dynamic_cast<Subclass1*>(foo)) HandleASubclass1Object(p);
56
+ // if (auto* p = dynamic_cast<Subclass2*>(foo)) HandleASubclass2Object(p);
57
+ // You should design the code some other way not to need this.
58
+
59
+ template<typename To, typename From> // use like this: down_cast<T*>(foo);
60
+ inline To down_cast(From* f) { // so we only accept pointers
61
+ static_assert(
62
+ (std::is_base_of<From, typename std::remove_pointer<To>::type>::value),
63
+ "target type not derived from source type");
64
+
65
+ // We skip the assert and hence the dynamic_cast if RTTI is disabled.
66
+ #if !defined(__GNUC__) || defined(__GXX_RTTI)
67
+ // Uses RTTI in dbg and fastbuild. asserts are disabled in opt builds.
68
+ assert(f == nullptr || dynamic_cast<To>(f) != nullptr);
69
+ #endif // !defined(__GNUC__) || defined(__GXX_RTTI)
70
+
71
+ return static_cast<To>(f);
72
+ }
73
+
74
+ // Overload of down_cast for references. Use like this: down_cast<T&>(foo).
75
+ // The code is slightly convoluted because we're still using the pointer
76
+ // form of dynamic cast. (The reference form throws an exception if it
77
+ // fails.)
78
+ //
79
+ // There's no need for a special const overload either for the pointer
80
+ // or the reference form. If you call down_cast with a const T&, the
81
+ // compiler will just bind From to const T.
82
+ template<typename To, typename From>
83
+ inline To down_cast(From& f) {
84
+ static_assert(
85
+ std::is_lvalue_reference<To>::value, "target type not a reference");
86
+ static_assert(
87
+ (std::is_base_of<From, typename std::remove_reference<To>::type>::value),
88
+ "target type not derived from source type");
89
+
90
+ // We skip the assert and hence the dynamic_cast if RTTI is disabled.
91
+ #if !defined(__GNUC__) || defined(__GXX_RTTI)
92
+ // RTTI: debug mode only
93
+ assert(dynamic_cast<typename std::remove_reference<To>::type*>(&f) !=
94
+ nullptr);
95
+ #endif // !defined(__GNUC__) || defined(__GXX_RTTI)
96
+
97
+ return static_cast<To>(f);
98
+ }
99
+
100
+ // **** Enumeration Casts and Tests
101
+ //
102
+ // C++ requires that the value of an integer that is converted to an
103
+ // enumeration be within the value bounds of the enumeration. Modern
104
+ // compilers can and do take advantage of this requirement to optimize
105
+ // programs. So, using a raw static_cast with enums can be bad. See
106
+ //
107
+ // The following templates and macros enable casting from an int to an enum
108
+ // with checking against the appropriate bounds. First, when defining an
109
+ // enumeration, identify the limits of the values of its enumerators.
110
+ //
111
+ // enum A { A_min = -18, A_max = 33 };
112
+ // MAKE_ENUM_LIMITS(A, A_min, A_max)
113
+ //
114
+ // Convert an int to an enum in one of two ways. The prefered way is a
115
+ // tight conversion, which ensures that A_min <= value <= A_max.
116
+ //
117
+ // A var = tight_enum_cast<A>(3);
118
+ //
119
+ // However, the C++ language defines the set of possible values for an
120
+ // enumeration to be essentially the range of a bitfield that can represent
121
+ // all the enumerators, i.e. those within the nearest containing power
122
+ // of two. In the example above, the nearest positive power of two is 64,
123
+ // and so the upper bound is 63. The nearest negative power of two is
124
+ // -32 and so the lower bound is -32 (two's complement), which is upgraded
125
+ // to match the upper bound, becoming -64. The values within this range
126
+ // of -64 to 63 are valid, according to the C++ standard. You can cast
127
+ // values within this range as follows.
128
+ //
129
+ // A var = loose_enum_cast<A>(45);
130
+ //
131
+ // These casts will log a message if the value does not reside within the
132
+ // specified range, and will be fatal when in debug mode.
133
+ //
134
+ // For those times when an assert too strong, there are test functions.
135
+ //
136
+ // bool var = tight_enum_test<A>(3);
137
+ // bool var = loose_enum_test<A>(45);
138
+ //
139
+ // For code that needs to use the enumeration value if and only if
140
+ // it is good, there is a function that both tests and casts.
141
+ //
142
+ // int i = ....;
143
+ // A var;
144
+ // if (tight_enum_test_cast<A>(i, &var))
145
+ // .... // use valid var with value as indicated by i
146
+ // else
147
+ // .... // handle invalid enum cast
148
+ //
149
+ // The enum test/cast facility is currently limited to enumerations that
150
+ // fit within an int. It is also limited to two's complement ints.
151
+
152
+ // ** Implementation Description
153
+ //
154
+ // The enum_limits template class captures the minimum and maximum
155
+ // enumerator. All uses of this template are intended to be of
156
+ // specializations, so the generic has a field to identify itself as
157
+ // not specialized. The test/cast templates assert specialization.
158
+
159
+ template <typename Enum>
160
+ class enum_limits {
161
+ public:
162
+ static const Enum min_enumerator = 0;
163
+ static const Enum max_enumerator = 0;
164
+ static const bool is_specialized = false;
165
+ };
166
+
167
+ // Now we define the macro to define the specialization for enum_limits.
168
+ // The specialization checks that the enumerators fit within an int.
169
+ // This checking relies on integral promotion.
170
+
171
+ #define MAKE_ENUM_LIMITS(ENUM_TYPE, ENUM_MIN, ENUM_MAX) \
172
+ template <> \
173
+ class enum_limits<ENUM_TYPE> { \
174
+ public: \
175
+ static const ENUM_TYPE min_enumerator = ENUM_MIN; \
176
+ static const ENUM_TYPE max_enumerator = ENUM_MAX; \
177
+ static const bool is_specialized = true; \
178
+ static_assert(ENUM_MIN >= INT_MIN, "enumerator too negative for int"); \
179
+ static_assert(ENUM_MAX <= INT_MAX, "enumerator too positive for int"); \
180
+ };
181
+
182
+ // The loose enum test/cast is actually the more complicated one,
183
+ // because of the problem of finding the bounds.
184
+ //
185
+ // The unary upper bound, ub, on a positive number is its positive
186
+ // saturation, i.e. for a value v within pow(2,k-1) <= v < pow(2,k),
187
+ // the upper bound is pow(2,k)-1.
188
+ //
189
+ // The unary lower bound, lb, on a negative number is its negative
190
+ // saturation, i.e. for a value v within -pow(2,k) <= v < -pow(2,k-1),
191
+ // the lower bound is -pow(2,k).
192
+ //
193
+ // The actual bounds are (1) the binary upper bound over the maximum
194
+ // enumerator and the one's complement of a negative minimum enumerator
195
+ // and (2) the binary lower bound over the minimum enumerator and the
196
+ // one's complement of the positive maximum enumerator, except that if no
197
+ // enumerators are negative, the lower bound is zero.
198
+ //
199
+ // The algorithm relies heavily on the observation that
200
+ //
201
+ // a,b>0 then ub(a,b) == ub(a) | ub(b) == ub(a|b)
202
+ // a,b<0 then lb(a,b) == lb(a) & lb(b) == lb(a&b)
203
+ //
204
+ // Note that the compiler will boil most of this code away
205
+ // because of value propagation on the constant enumerator bounds.
206
+
207
+ template <typename Enum>
208
+ inline bool loose_enum_test(int e_val) {
209
+ static_assert(enum_limits<Enum>::is_specialized, "missing MAKE_ENUM_LIMITS");
210
+ const Enum e_min = enum_limits<Enum>::min_enumerator;
211
+ const Enum e_max = enum_limits<Enum>::max_enumerator;
212
+ static_assert(sizeof(e_val) == 4 || sizeof(e_val) == 8,
213
+ "unexpected int size");
214
+
215
+ // Find the unary bounding negative number of e_min and e_max.
216
+
217
+ // Find the unary bounding negative number of e_max.
218
+ // This would be b_min = e_max < 0 ? e_max : ~e_max,
219
+ // but we want to avoid branches to help the compiler.
220
+ int e_max_sign = e_max >> (sizeof(e_val)*8 - 1);
221
+ int b_min = ~e_max_sign ^ e_max;
222
+
223
+ // Find the binary bounding negative of both e_min and e_max.
224
+ b_min &= e_min;
225
+
226
+ // However, if e_min is positive, the result will be positive.
227
+ // Now clear all bits right of the most significant clear bit,
228
+ // which is a negative saturation for negative numbers.
229
+ // In the case of positive numbers, this is flush to zero.
230
+ b_min &= b_min >> 1;
231
+ b_min &= b_min >> 2;
232
+ b_min &= b_min >> 4;
233
+ b_min &= b_min >> 8;
234
+ b_min &= b_min >> 16;
235
+ #if INT_MAX > 2147483647
236
+ b_min &= b_min >> 32;
237
+ #endif
238
+
239
+ // Find the unary bounding positive number of e_max.
240
+ int b_max = e_max_sign ^ e_max;
241
+
242
+ // Find the binary bounding positive number of that
243
+ // and the unary bounding positive number of e_min.
244
+ int e_min_sign = e_min >> (sizeof(e_val)*8 - 1);
245
+ b_max |= e_min_sign ^ e_min;
246
+
247
+ // Now set all bits right of the most significant set bit,
248
+ // which is a positive saturation for positive numbers.
249
+ b_max |= b_max >> 1;
250
+ b_max |= b_max >> 2;
251
+ b_max |= b_max >> 4;
252
+ b_max |= b_max >> 8;
253
+ b_max |= b_max >> 16;
254
+ #if INT_MAX > 2147483647
255
+ b_max |= b_max >> 32;
256
+ #endif
257
+
258
+ // Finally test the bounds.
259
+ return b_min <= e_val && e_val <= b_max;
260
+ }
261
+
262
+ template <typename Enum>
263
+ inline bool tight_enum_test(int e_val) {
264
+ static_assert(enum_limits<Enum>::is_specialized, "missing MAKE_ENUM_LIMITS");
265
+ const Enum e_min = enum_limits<Enum>::min_enumerator;
266
+ const Enum e_max = enum_limits<Enum>::max_enumerator;
267
+ return e_min <= e_val && e_val <= e_max;
268
+ }
269
+
270
+ template <typename Enum>
271
+ inline bool loose_enum_test_cast(int e_val, Enum* e_var) {
272
+ if (loose_enum_test<Enum>(e_val)) {
273
+ *e_var = static_cast<Enum>(e_val);
274
+ return true;
275
+ } else {
276
+ return false;
277
+ }
278
+ }
279
+
280
+ template <typename Enum>
281
+ inline bool tight_enum_test_cast(int e_val, Enum* e_var) {
282
+ if (tight_enum_test<Enum>(e_val)) {
283
+ *e_var = static_cast<Enum>(e_val);
284
+ return true;
285
+ } else {
286
+ return false;
287
+ }
288
+ }
289
+
290
+ // The plain casts require logging, and we get header recursion if
291
+ // it is done directly. So, we do it indirectly.
292
+ // The following function is defined in logging.cc.
293
+
294
+ namespace base {
295
+ namespace internal {
296
+
297
+ void WarnEnumCastError(int value_of_int);
298
+
299
+ } // namespace internal
300
+ } // namespace base
301
+
302
+ template <typename Enum>
303
+ inline Enum loose_enum_cast(int e_val) {
304
+ if (!loose_enum_test<Enum>(e_val)) {
305
+ base::internal::WarnEnumCastError(e_val);
306
+ }
307
+ return static_cast<Enum>(e_val);
308
+ }
309
+
310
+ template <typename Enum>
311
+ inline Enum tight_enum_cast(int e_val) {
312
+ if (!tight_enum_test<Enum>(e_val)) {
313
+ base::internal::WarnEnumCastError(e_val);
314
+ }
315
+ return static_cast<Enum>(e_val);
316
+ }
317
+
318
+ #endif // S2_BASE_CASTS_H_
@@ -0,0 +1,67 @@
1
+ // Copyright Google Inc. All Rights Reserved.
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
+ #ifndef S2_BASE_COMMANDLINEFLAGS_H_
17
+ #define S2_BASE_COMMANDLINEFLAGS_H_
18
+
19
+ #ifdef S2_USE_GFLAGS
20
+
21
+ #include <gflags/gflags.h>
22
+
23
+ // If the GFlags library is available, map the local macro names to
24
+ // GFlags macros.
25
+ #define S2_DEFINE_bool DEFINE_bool
26
+ #define S2_DECLARE_bool DECLARE_bool
27
+
28
+ #define S2_DEFINE_double DEFINE_double
29
+ #define S2_DECLARE_double DECLARE_double
30
+
31
+ #define S2_DEFINE_int32 DEFINE_int32
32
+ #define S2_DECLARE_int32 DECLARE_int32
33
+
34
+ #define S2_DEFINE_string DEFINE_string
35
+ #define S2_DECLARE_string DECLARE_string
36
+
37
+ #else // !defined(S2_USE_GFLAGS)
38
+
39
+ #include <string>
40
+
41
+ #include "s2/base/integral_types.h"
42
+
43
+ // Create a set of gflags-like macros for declaring/defining flags. Use
44
+ // a library-specific name to potential minimize clashes with GFlags.
45
+
46
+ #define S2_DEFINE_bool(name, default_value, description) \
47
+ bool FLAGS_##name = default_value
48
+ #define S2_DECLARE_bool(name) \
49
+ extern bool FLAGS_##name
50
+ #define S2_DEFINE_double(name, default_value, description) \
51
+ double FLAGS_##name = default_value
52
+ #define S2_DECLARE_double(name) \
53
+ extern double FLAGS_##name
54
+
55
+ #define S2_DEFINE_int32(name, default_value, description) \
56
+ int32 FLAGS_##name = default_value
57
+ #define S2_DECLARE_int32(name) \
58
+ extern int32 FLAGS_##name
59
+
60
+ #define S2_DEFINE_string(name, default_value, description) \
61
+ std::string FLAGS_##name = default_value
62
+ #define S2_DECLARE_string(name) \
63
+ extern std::string FLAGS_##name
64
+
65
+ #endif // !defined(S2_USE_GFLAGS)
66
+
67
+ #endif // S2_BASE_COMMANDLINEFLAGS_H_
@@ -0,0 +1,31 @@
1
+ // Copyright 2018 Google Inc. All Rights Reserved.
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
+ #ifndef S2_BASE_INTEGRAL_TYPES_H_
17
+ #define S2_BASE_INTEGRAL_TYPES_H_
18
+
19
+ using int8 = signed char;
20
+ using int16 = short;
21
+ using int32 = int;
22
+ using int64 = long long;
23
+
24
+ using uint8 = unsigned char;
25
+ using uint16 = unsigned short;
26
+ using uint32 = unsigned int;
27
+ using uint64 = unsigned long long;
28
+
29
+ using uword_t = unsigned long;
30
+
31
+ #endif // S2_BASE_INTEGRAL_TYPES_H_
@@ -0,0 +1,40 @@
1
+ // Copyright Google Inc. All Rights Reserved.
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
+ #ifndef S2_BASE_LOG_SEVERITY_H_
17
+ #define S2_BASE_LOG_SEVERITY_H_
18
+
19
+ #ifdef S2_USE_GLOG
20
+
21
+ #include <glog/log_severity.h>
22
+
23
+ #else // !defined(S2_USE_GLOG)
24
+
25
+ #include "s2/third_party/absl/base/log_severity.h"
26
+
27
+ // Stay compatible with glog.
28
+ namespace google {
29
+
30
+ #ifdef NDEBUG
31
+ constexpr bool DEBUG_MODE = false;
32
+ #else
33
+ constexpr bool DEBUG_MODE = true;
34
+ #endif
35
+
36
+ } // namespace google
37
+
38
+ #endif // !defined(S2_USE_GLOG)
39
+
40
+ #endif // S2_BASE_LOG_SEVERITY_H_
@@ -0,0 +1,173 @@
1
+ // Copyright Google Inc. All Rights Reserved.
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
+ #ifndef S2_BASE_LOGGING_H_
17
+ #define S2_BASE_LOGGING_H_
18
+
19
+ #ifdef S2_USE_GLOG
20
+
21
+ #include <glog/logging.h>
22
+
23
+ // The names CHECK, etc. are too common and may conflict with other
24
+ // packages. We use S2_CHECK to make it easier to switch to
25
+ // something other than GLOG for logging.
26
+
27
+ #define S2_LOG LOG
28
+ #define S2_LOG_IF LOG_IF
29
+ #define S2_DLOG_IF DLOG_IF
30
+
31
+ #define S2_CHECK CHECK
32
+ #define S2_CHECK_EQ CHECK_EQ
33
+ #define S2_CHECK_NE CHECK_NE
34
+ #define S2_CHECK_LT CHECK_LT
35
+ #define S2_CHECK_LE CHECK_LE
36
+ #define S2_CHECK_GT CHECK_GT
37
+ #define S2_CHECK_GE CHECK_GE
38
+
39
+ #define S2_DCHECK DCHECK
40
+ #define S2_DCHECK_EQ DCHECK_EQ
41
+ #define S2_DCHECK_NE DCHECK_NE
42
+ #define S2_DCHECK_LT DCHECK_LT
43
+ #define S2_DCHECK_LE DCHECK_LE
44
+ #define S2_DCHECK_GT DCHECK_GT
45
+ #define S2_DCHECK_GE DCHECK_GE
46
+
47
+ #define S2_VLOG VLOG
48
+ #define S2_VLOG_IS_ON VLOG_IS_ON
49
+
50
+ #else // !defined(S2_USE_GLOG)
51
+
52
+ #include <iostream>
53
+
54
+ #include "s2/base/log_severity.h"
55
+ #include "s2/third_party/absl/base/attributes.h"
56
+ #include "s2/third_party/absl/base/log_severity.h"
57
+
58
+ class S2LogMessage {
59
+ public:
60
+ S2LogMessage(const char* file, int line,
61
+ absl::LogSeverity severity, std::ostream& stream)
62
+ : severity_(severity), stream_(stream) {
63
+ if (enabled()) {
64
+ stream_ << file << ":" << line << " "
65
+ << absl::LogSeverityName(severity) << " ";
66
+ }
67
+ }
68
+ ~S2LogMessage() { if (enabled()) stream_ << std::endl; }
69
+
70
+ std::ostream& stream() { return stream_; }
71
+
72
+ private:
73
+ bool enabled() const {
74
+ #ifdef ABSL_MIN_LOG_LEVEL
75
+ return (static_cast<int>(severity_) >= ABSL_MIN_LOG_LEVEL ||
76
+ severity_ >= absl::LogSeverity::kFatal);
77
+ #else
78
+ return true;
79
+ #endif
80
+ }
81
+
82
+ absl::LogSeverity severity_;
83
+ std::ostream& stream_;
84
+ };
85
+
86
+ // Same as S2LogMessage, but destructor is marked no-return to avoid
87
+ // "no return value warnings" in functions that return non-void.
88
+ class S2FatalLogMessage : public S2LogMessage {
89
+ public:
90
+ S2FatalLogMessage(const char* file, int line,
91
+ absl::LogSeverity severity, std::ostream& stream)
92
+ ABSL_ATTRIBUTE_COLD
93
+ : S2LogMessage(file, line, severity, stream) {}
94
+ ABSL_ATTRIBUTE_NORETURN ~S2FatalLogMessage() { abort(); }
95
+ };
96
+
97
+ // Logging stream that does nothing.
98
+ struct S2NullStream {
99
+ template <typename T>
100
+ S2NullStream& operator<<(const T& v) { return *this; }
101
+ };
102
+
103
+ // Used to suppress "unused value" warnings.
104
+ struct S2LogMessageVoidify {
105
+ // Must have precedence lower than << but higher than ?:.
106
+ void operator&(std::ostream&) {}
107
+ };
108
+
109
+ #define S2_LOG_MESSAGE_(LogMessageClass, log_severity) \
110
+ LogMessageClass(__FILE__, __LINE__, log_severity, std::cerr)
111
+ #define S2_LOG_INFO \
112
+ S2_LOG_MESSAGE_(S2LogMessage, absl::LogSeverity::kInfo)
113
+ #define S2_LOG_WARNING \
114
+ S2_LOG_MESSAGE_(S2LogMessage, absl::LogSeverity::kWarning)
115
+ #define S2_LOG_ERROR \
116
+ S2_LOG_MESSAGE_(S2LogMessage, absl::LogSeverity::kError)
117
+ #define S2_LOG_FATAL \
118
+ S2_LOG_MESSAGE_(S2FatalLogMessage, absl::LogSeverity::kFatal)
119
+ #ifndef NDEBUG
120
+ #define S2_LOG_DFATAL S2_LOG_FATAL
121
+ #else
122
+ #define S2_LOG_DFATAL S2_LOG_ERROR
123
+ #endif
124
+
125
+ #define S2_LOG(severity) S2_LOG_##severity.stream()
126
+
127
+ // Implementing this as if (...) {} else S2_LOG(...) will cause dangling else
128
+ // warnings when someone does if (...) S2_LOG_IF(...), so do this tricky
129
+ // thing instead.
130
+ #define S2_LOG_IF(severity, condition) \
131
+ !(condition) ? (void)0 : S2LogMessageVoidify() & S2_LOG(severity)
132
+
133
+ #define S2_CHECK(condition) \
134
+ S2_LOG_IF(FATAL, ABSL_PREDICT_FALSE(!(condition))) \
135
+ << ("Check failed: " #condition " ")
136
+
137
+ #ifndef NDEBUG
138
+
139
+ #define S2_DLOG_IF S2_LOG_IF
140
+ #define S2_DCHECK S2_CHECK
141
+
142
+ #else // defined(NDEBUG)
143
+
144
+ #define S2_DLOG_IF(severity, condition) \
145
+ while (false && (condition)) S2NullStream()
146
+ #define S2_DCHECK(condition) \
147
+ while (false && (condition)) S2NullStream()
148
+
149
+ #endif // defined(NDEBUG)
150
+
151
+ #define S2_CHECK_OP(op, val1, val2) S2_CHECK((val1) op (val2))
152
+ #define S2_CHECK_EQ(val1, val2) S2_CHECK_OP(==, val1, val2)
153
+ #define S2_CHECK_NE(val1, val2) S2_CHECK_OP(!=, val1, val2)
154
+ #define S2_CHECK_LT(val1, val2) S2_CHECK_OP(<, val1, val2)
155
+ #define S2_CHECK_LE(val1, val2) S2_CHECK_OP(<=, val1, val2)
156
+ #define S2_CHECK_GT(val1, val2) S2_CHECK_OP(>, val1, val2)
157
+ #define S2_CHECK_GE(val1, val2) S2_CHECK_OP(>=, val1, val2)
158
+
159
+ #define S2_DCHECK_OP(op, val1, val2) S2_DCHECK((val1) op (val2))
160
+ #define S2_DCHECK_EQ(val1, val2) S2_DCHECK_OP(==, val1, val2)
161
+ #define S2_DCHECK_NE(val1, val2) S2_DCHECK_OP(!=, val1, val2)
162
+ #define S2_DCHECK_LT(val1, val2) S2_DCHECK_OP(<, val1, val2)
163
+ #define S2_DCHECK_LE(val1, val2) S2_DCHECK_OP(<=, val1, val2)
164
+ #define S2_DCHECK_GT(val1, val2) S2_DCHECK_OP(>, val1, val2)
165
+ #define S2_DCHECK_GE(val1, val2) S2_DCHECK_OP(>=, val1, val2)
166
+
167
+ // We don't support VLOG.
168
+ #define S2_VLOG(verbose_level) S2NullStream()
169
+ #define S2_VLOG_IS_ON(verbose_level) (false)
170
+
171
+ #endif // !defined(S2_USE_GLOG)
172
+
173
+ #endif // S2_BASE_LOGGING_H_