@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,476 @@
1
+ // Copyright 2001 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
+ // Raw support for varint encoding. Higher level interfaces are
18
+ // provided by Encoder/Decoder/IOBuffer. Clients should typically use
19
+ // those interfaces, unless speed is paramount.
20
+ //
21
+ // If decoding speed is very important, consider using PrefixVarint instead.
22
+ // It has the same compression ratio, but generally faster decoding.
23
+ //
24
+ // Provided routines:
25
+ // vi_parse32_unchecked
26
+ // vi_parse64_unchecked
27
+ // vi_encode32_unchecked
28
+ // vi_encode64_unchecked
29
+
30
+ #ifndef S2_UTIL_CODING_VARINT_H_
31
+ #define S2_UTIL_CODING_VARINT_H_
32
+
33
+ // Avoid adding expensive includes here.
34
+ #include <cassert>
35
+ #include <cstddef>
36
+ #include <string>
37
+
38
+ #include "s2/base/integral_types.h"
39
+ #include "s2/base/port.h"
40
+ #include "s2/third_party/absl/base/macros.h"
41
+ #include "s2/util/bits/bits.h"
42
+
43
+ // Just a namespace, not a real class
44
+ class Varint {
45
+ public:
46
+ // Maximum lengths of varint encoding of uint32 and uint64
47
+ static const int kMax32 = 5;
48
+ static const int kMax64 = 10;
49
+
50
+ // The decoder does not read past the end of the encoded data.
51
+ static const int kSlopBytes = 0;
52
+
53
+ // REQUIRES "ptr" points to a buffer of length at least kMaxXX
54
+ // EFFECTS Scan next varint from "ptr" and store in OUTPUT.
55
+ // Returns pointer just past last read byte. Returns
56
+ // nullptr if a valid varint value was not found.
57
+ static const char* Parse32(const char* ptr, uint32* OUTPUT);
58
+ static const char* Parse64(const char* ptr, uint64* OUTPUT);
59
+
60
+ // A fully inlined version of Parse32: useful in the most time critical
61
+ // routines, but its code size is large
62
+ static const char* Parse32Inline(const char* ptr, uint32* OUTPUT);
63
+
64
+ // REQUIRES "ptr" points just past the last byte of a varint-encoded value.
65
+ // REQUIRES A second varint must be encoded just before the one we parse,
66
+ // OR "base" must point to the first byte of the one we parse.
67
+ // REQUIRES Bytes [base, ptr-1] are readable
68
+ //
69
+ // EFFECTS Scan backwards from "ptr" and store in OUTPUT. Stop at the last
70
+ // byte of the previous varint, OR at "base", whichever one comes
71
+ // first. Returns pointer to the first byte of the decoded varint
72
+ // nullptr if a valid varint value was not found.
73
+ static const char* Parse32Backward(const char* ptr, const char* base,
74
+ uint32* OUTPUT);
75
+ static const char* Parse64Backward(const char* ptr, const char* base,
76
+ uint64* OUTPUT);
77
+
78
+ // Attempts to parse a varint32 from a prefix of the bytes in [ptr,limit-1].
79
+ // Never reads a character at or beyond limit. If a valid/terminated varint32
80
+ // was found in the range, stores it in *OUTPUT and returns a pointer just
81
+ // past the last byte of the varint32. Else returns nullptr. On success,
82
+ // "result <= limit".
83
+ static const char* Parse32WithLimit(const char* ptr, const char* limit,
84
+ uint32* OUTPUT);
85
+ static const char* Parse64WithLimit(const char* ptr, const char* limit,
86
+ uint64* OUTPUT);
87
+
88
+ // REQUIRES "ptr" points to the first byte of a varint-encoded value.
89
+ // EFFECTS Scans until the end of the varint and returns a pointer just
90
+ // past the last byte. Returns nullptr if "ptr" does not point to
91
+ // a valid varint value.
92
+ static const char* Skip32(const char* ptr);
93
+ static const char* Skip64(const char* ptr);
94
+
95
+ // REQUIRES "ptr" points just past the last byte of a varint-encoded value.
96
+ // REQUIRES A second varint must be encoded just before the one we parse,
97
+ // OR "base" must point to the first byte of the one we parse.
98
+ // REQUIRES Bytes [base, ptr-1] are readable
99
+ //
100
+ // EFFECTS Scan backwards from "ptr" and stop at the last byte of the
101
+ // previous varint, OR at "base", whichever one comes first.
102
+ // Returns pointer to the first byte of the skipped varint or
103
+ // nullptr if a valid varint value was not found.
104
+ static const char* Skip32Backward(const char* ptr, const char* base);
105
+ static const char* Skip64Backward(const char* ptr, const char* base);
106
+
107
+ // REQUIRES "ptr" points to a buffer of length sufficient to hold "v".
108
+ // EFFECTS Encodes "v" into "ptr" and returns a pointer to the
109
+ // byte just past the last encoded byte.
110
+ static char* Encode32(char* ptr, uint32 v);
111
+ static char* Encode64(char* ptr, uint64 v);
112
+
113
+ // A fully inlined version of Encode32: useful in the most time critical
114
+ // routines, but its code size is large
115
+ static char* Encode32Inline(char* ptr, uint32 v);
116
+
117
+ // EFFECTS Returns the encoding length of the specified value.
118
+ static int Length32(uint32 v);
119
+ static int Length64(uint64 v);
120
+
121
+ // EFFECTS Appends the varint representation of "value" to "*s".
122
+ static void Append32(string* s, uint32 value);
123
+ static void Append64(string* s, uint64 value);
124
+
125
+ // EFFECTS Encodes a pair of values to "*s". The encoding
126
+ // is done by weaving together 4 bit groups of
127
+ // each number into a single 64 bit value, and then
128
+ // encoding this value as a Varint64 value. This means
129
+ // that if both a and b are small, both values can be
130
+ // encoded in a single byte.
131
+ ABSL_DEPRECATED("Use TwoValuesVarint::Encode32.")
132
+ static void EncodeTwo32Values(string* s, uint32 a, uint32 b);
133
+ ABSL_DEPRECATED("Use TwoValuesVarint::Decode32.")
134
+ static const char* DecodeTwo32Values(const char* ptr, uint32* a, uint32* b);
135
+ ABSL_DEPRECATED("Use TwoValuesVarint::Decode32WithLimit.")
136
+ static const char* DecodeTwo32ValuesWithLimit(const char* ptr,
137
+ const char* limit, uint32* a,
138
+ uint32* b);
139
+
140
+ // Decode and sum up a sequence of deltas until the sum >= goal.
141
+ // It is significantly faster than calling ParseXXInline in a loop.
142
+ // NOTE(user): The code does NO error checking, it assumes all the
143
+ // deltas are valid and the sum of deltas will never exceed
144
+ // numeric_limits<int64>::max(). The code works for both 32bits and
145
+ // 64bits varint, and on 64 bits machines, the 64 bits version is
146
+ // almost always faster. Thus we only have a 64 bits interface here.
147
+ // The interface is slightly different from the other functions in that
148
+ // it requires *signed* integers.
149
+ // REQUIRES "ptr" points to the first byte of a varint-encoded delta.
150
+ // The sum of deltas >= goal (the code does NO boundary check).
151
+ // goal is positive and fit into a signed int64.
152
+ // EFFECTS Returns a pointer just past last read byte.
153
+ // "out" stores the actual sum.
154
+ static const char* FastDecodeDeltas(const char* ptr, int64 goal, int64* out);
155
+
156
+ private:
157
+ static const char* Parse32FallbackInline(const char* p, uint32* val);
158
+ static const char* Parse32Fallback(const char* p, uint32* val);
159
+ static const char* Parse64Fallback(const char* p, uint64* val);
160
+
161
+ static char* Encode32Fallback(char* ptr, uint32 v);
162
+
163
+ static const char* Parse32BackwardSlow(const char* ptr, const char* base,
164
+ uint32* OUTPUT);
165
+ static const char* Parse64BackwardSlow(const char* ptr, const char* base,
166
+ uint64* OUTPUT);
167
+ static const char* Skip32BackwardSlow(const char* ptr, const char* base);
168
+ static const char* Skip64BackwardSlow(const char* ptr, const char* base);
169
+
170
+ static void Append32Slow(string* s, uint32 value);
171
+ static void Append64Slow(string* s, uint64 value);
172
+
173
+ };
174
+
175
+ /***** Implementation details; clients should ignore *****/
176
+
177
+ inline const char* Varint::Parse32FallbackInline(const char* p,
178
+ uint32* OUTPUT) {
179
+ // Fast path
180
+ const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
181
+ uint32 byte, result;
182
+ byte = *(ptr++); result = byte & 127;
183
+ assert(byte >= 128); // Already checked in inlined prelude
184
+ byte = *(ptr++); result |= (byte & 127) << 7; if (byte < 128) goto done;
185
+ byte = *(ptr++); result |= (byte & 127) << 14; if (byte < 128) goto done;
186
+ byte = *(ptr++); result |= (byte & 127) << 21; if (byte < 128) goto done;
187
+ byte = *(ptr++); result |= (byte & 127) << 28; if (byte < 16) goto done;
188
+ return nullptr; // Value is too long to be a varint32
189
+ done:
190
+ *OUTPUT = result;
191
+ return reinterpret_cast<const char*>(ptr);
192
+ }
193
+
194
+ inline const char* Varint::Parse32(const char* p, uint32* OUTPUT) {
195
+ // Fast path for inlining
196
+ const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
197
+ uint32 byte = *ptr;
198
+ if (byte < 128) {
199
+ *OUTPUT = byte;
200
+ return reinterpret_cast<const char*>(ptr) + 1;
201
+ } else {
202
+ return Parse32Fallback(p, OUTPUT);
203
+ }
204
+ }
205
+
206
+ inline const char* Varint::Parse32Inline(const char* p, uint32* OUTPUT) {
207
+ // Fast path for inlining
208
+ const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
209
+ uint32 byte = *ptr;
210
+ if (byte < 128) {
211
+ *OUTPUT = byte;
212
+ return reinterpret_cast<const char*>(ptr) + 1;
213
+ } else {
214
+ return Parse32FallbackInline(p, OUTPUT);
215
+ }
216
+ }
217
+
218
+ inline const char* Varint::Skip32(const char* p) {
219
+ const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
220
+ if (*ptr++ < 128) return reinterpret_cast<const char*>(ptr);
221
+ if (*ptr++ < 128) return reinterpret_cast<const char*>(ptr);
222
+ if (*ptr++ < 128) return reinterpret_cast<const char*>(ptr);
223
+ if (*ptr++ < 128) return reinterpret_cast<const char*>(ptr);
224
+ if (*ptr++ < 16) return reinterpret_cast<const char*>(ptr);
225
+ return nullptr; // value is too long to be a varint32
226
+ }
227
+
228
+ inline const char* Varint::Parse32Backward(const char* p, const char* base,
229
+ uint32* OUTPUT) {
230
+ if (p > base + kMax32) {
231
+ // Fast path
232
+ const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
233
+ uint32 byte, result;
234
+ byte = *(--ptr); if (byte > 127) return nullptr;
235
+ result = byte;
236
+ byte = *(--ptr); if (byte < 128) goto done;
237
+ result <<= 7; result |= (byte & 127);
238
+ byte = *(--ptr); if (byte < 128) goto done;
239
+ result <<= 7; result |= (byte & 127);
240
+ byte = *(--ptr); if (byte < 128) goto done;
241
+ result <<= 7; result |= (byte & 127);
242
+ byte = *(--ptr); if (byte < 128) goto done;
243
+ result <<= 7; result |= (byte & 127);
244
+ byte = *(--ptr); if (byte < 128) goto done;
245
+ return nullptr; // Value is too long to be a varint32
246
+ done:
247
+ *OUTPUT = result;
248
+ return reinterpret_cast<const char*>(ptr+1);
249
+ } else {
250
+ return Parse32BackwardSlow(p, base, OUTPUT);
251
+ }
252
+ }
253
+
254
+ inline const char* Varint::Skip32Backward(const char* p, const char* base) {
255
+ if (p > base + kMax32) {
256
+ const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
257
+ if (*(--ptr) > 127) return nullptr;
258
+ if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
259
+ if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
260
+ if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
261
+ if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
262
+ if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
263
+ return nullptr; // value is too long to be a varint32
264
+ } else {
265
+ return Skip32BackwardSlow(p, base);
266
+ }
267
+ }
268
+
269
+ inline const char* Varint::Parse32WithLimit(const char* p,
270
+ const char* l,
271
+ uint32* OUTPUT) {
272
+ // Version with bounds checks.
273
+ // This formerly had an optimization to inline the non-bounds checking Parse32
274
+ // but it was found to be slower than the straightforward implementation.
275
+ const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
276
+ const unsigned char* limit = reinterpret_cast<const unsigned char*>(l);
277
+ uint32 b, result;
278
+ if (ptr >= limit) return nullptr;
279
+ b = *(ptr++); result = b & 127; if (b < 128) goto done;
280
+ if (ptr >= limit) return nullptr;
281
+ b = *(ptr++); result |= (b & 127) << 7; if (b < 128) goto done;
282
+ if (ptr >= limit) return nullptr;
283
+ b = *(ptr++); result |= (b & 127) << 14; if (b < 128) goto done;
284
+ if (ptr >= limit) return nullptr;
285
+ b = *(ptr++); result |= (b & 127) << 21; if (b < 128) goto done;
286
+ if (ptr >= limit) return nullptr;
287
+ b = *(ptr++); result |= (b & 127) << 28; if (b < 16) goto done;
288
+ return nullptr; // Value is too long to be a varint32
289
+ done:
290
+ *OUTPUT = result;
291
+ return reinterpret_cast<const char*>(ptr);
292
+ }
293
+
294
+ inline const char* Varint::Parse64(const char* p, uint64* OUTPUT) {
295
+ const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
296
+ uint32 byte = *ptr;
297
+ if (byte < 128) {
298
+ *OUTPUT = byte;
299
+ return reinterpret_cast<const char*>(ptr) + 1;
300
+ } else {
301
+ return Parse64Fallback(p, OUTPUT);
302
+ }
303
+ }
304
+
305
+ inline const char* Varint::Skip64(const char* p) {
306
+ const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
307
+ if (*ptr++ < 128) return reinterpret_cast<const char*>(ptr);
308
+ if (*ptr++ < 128) return reinterpret_cast<const char*>(ptr);
309
+ if (*ptr++ < 128) return reinterpret_cast<const char*>(ptr);
310
+ if (*ptr++ < 128) return reinterpret_cast<const char*>(ptr);
311
+ if (*ptr++ < 128) return reinterpret_cast<const char*>(ptr);
312
+ if (*ptr++ < 128) return reinterpret_cast<const char*>(ptr);
313
+ if (*ptr++ < 128) return reinterpret_cast<const char*>(ptr);
314
+ if (*ptr++ < 128) return reinterpret_cast<const char*>(ptr);
315
+ if (*ptr++ < 128) return reinterpret_cast<const char*>(ptr);
316
+ if (*ptr++ < 2) return reinterpret_cast<const char*>(ptr);
317
+ return nullptr; // value is too long to be a varint64
318
+ }
319
+
320
+ inline const char* Varint::Parse64Backward(const char* p, const char* b,
321
+ uint64* OUTPUT) {
322
+ if (p > b + kMax64) {
323
+ // Fast path
324
+ const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
325
+ uint32 byte;
326
+ uint64 res;
327
+
328
+ byte = *(--ptr); if (byte > 127) return nullptr;
329
+
330
+ res = byte;
331
+ byte = *(--ptr); if (byte < 128) goto done;
332
+ res <<= 7; res |= (byte & 127);
333
+ byte = *(--ptr); if (byte < 128) goto done;
334
+ res <<= 7; res |= (byte & 127);
335
+ byte = *(--ptr); if (byte < 128) goto done;
336
+ res <<= 7; res |= (byte & 127);
337
+ byte = *(--ptr); if (byte < 128) goto done;
338
+ res <<= 7; res |= (byte & 127);
339
+ byte = *(--ptr); if (byte < 128) goto done;
340
+ res <<= 7; res |= (byte & 127);
341
+ byte = *(--ptr); if (byte < 128) goto done;
342
+ res <<= 7; res |= (byte & 127);
343
+ byte = *(--ptr); if (byte < 128) goto done;
344
+ res <<= 7; res |= (byte & 127);
345
+ byte = *(--ptr); if (byte < 128) goto done;
346
+ res <<= 7; res |= (byte & 127);
347
+ byte = *(--ptr); if (byte < 128) goto done;
348
+ res <<= 7; res |= (byte & 127);
349
+ byte = *(--ptr); if (byte < 128) goto done;
350
+
351
+ return nullptr; // Value is too long to be a varint64
352
+
353
+ done:
354
+ *OUTPUT = res;
355
+ return reinterpret_cast<const char*>(ptr + 1);
356
+ } else {
357
+ return Parse64BackwardSlow(p, b, OUTPUT);
358
+ }
359
+ }
360
+
361
+ inline const char* Varint::Skip64Backward(const char* p, const char* b) {
362
+ if (p > b + kMax64) {
363
+ // Fast path
364
+ const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
365
+ if (*(--ptr) > 127) return nullptr;
366
+ if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
367
+ if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
368
+ if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
369
+ if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
370
+ if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
371
+ if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
372
+ if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
373
+ if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
374
+ if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
375
+ if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr+1);
376
+ return nullptr; // value is too long to be a varint64
377
+ } else {
378
+ return Skip64BackwardSlow(p, b);
379
+ }
380
+ }
381
+
382
+ inline int Varint::Length32(uint32 v) {
383
+ // This computes value == 0 ? 1 : floor(log2(v)) / 7 + 1
384
+ // Use an explicit multiplication to implement the divide of
385
+ // a number in the 1..31 range.
386
+ // Explicit OR 0x1 to handle v == 0.
387
+ uint32 log2value = Bits::Log2FloorNonZero(v | 0x1);
388
+ return static_cast<int>((log2value * 9 + 73) / 64);
389
+ }
390
+
391
+ inline int Varint::Length64(uint64 v) {
392
+ // This computes value == 0 ? 1 : floor(log2(v)) / 7 + 1
393
+ // Use an explicit multiplication to implement the divide of
394
+ // a number in the 1..63 range.
395
+ // Explicit OR 0x1 to handle v == 0.
396
+ uint32 log2value = Bits::Log2FloorNonZero64(v | 0x1);
397
+ return static_cast<int>((log2value * 9 + 73) / 64);
398
+ }
399
+
400
+ inline void Varint::Append32(string* s, uint32 value) {
401
+ // Inline the fast-path for single-character output, but fall back to the .cc
402
+ // file for the full version. The size<capacity check is so the compiler can
403
+ // optimize out the string resize code.
404
+ if (value < 128 && s->size() < s->capacity()) {
405
+ s->push_back((unsigned char)value);
406
+ } else {
407
+ Append32Slow(s, value);
408
+ }
409
+ }
410
+
411
+ inline void Varint::Append64(string* s, uint64 value) {
412
+ // Inline the fast-path for single-character output, but fall back to the .cc
413
+ // file for the full version. The size<capacity check is so the compiler can
414
+ // optimize out the string resize code.
415
+ if (value < 128 && s->size() < s->capacity()) {
416
+ s->push_back((unsigned char)value);
417
+ } else {
418
+ Append64Slow(s, value);
419
+ }
420
+ }
421
+
422
+ inline char* Varint::Encode32Inline(char* sptr, uint32 v) {
423
+ // Operate on characters as unsigneds
424
+ uint8* ptr = reinterpret_cast<uint8*>(sptr);
425
+ static const uint32 B = 128;
426
+ if (v < (1<<7)) {
427
+ *(ptr++) = static_cast<uint8>(v);
428
+ } else if (v < (1<<14)) {
429
+ *(ptr++) = static_cast<uint8>(v | B);
430
+ *(ptr++) = static_cast<uint8>(v>>7);
431
+ } else if (v < (1<<21)) {
432
+ *(ptr++) = static_cast<uint8>(v | B);
433
+ *(ptr++) = static_cast<uint8>((v>>7) | B);
434
+ *(ptr++) = static_cast<uint8>(v>>14);
435
+ } else if (v < (1<<28)) {
436
+ *(ptr++) = static_cast<uint8>(v | B);
437
+ *(ptr++) = static_cast<uint8>((v>>7) | B);
438
+ *(ptr++) = static_cast<uint8>((v>>14) | B);
439
+ *(ptr++) = static_cast<uint8>(v>>21);
440
+ } else {
441
+ *(ptr++) = static_cast<uint8>(v | B);
442
+ *(ptr++) = static_cast<uint8>((v>>7) | B);
443
+ *(ptr++) = static_cast<uint8>((v>>14) | B);
444
+ *(ptr++) = static_cast<uint8>((v>>21) | B);
445
+ *(ptr++) = static_cast<uint8>(v>>28);
446
+ }
447
+ return reinterpret_cast<char*>(ptr);
448
+ }
449
+
450
+ #if (-1 >> 1) != -1
451
+ #error FastDecodeDeltas() needs right-shift to sign-extend.
452
+ #endif
453
+ inline const char* Varint::FastDecodeDeltas(const char* ptr,
454
+ int64 goal,
455
+ int64* out) {
456
+ int64 value;
457
+ int64 sum = - goal;
458
+ int64 shift = 0;
459
+ // Make decoding faster by eliminating unpredictable branching.
460
+ do {
461
+ value = static_cast<int8>(*ptr++); // sign extend one byte of data
462
+ sum += (value & 0x7F) << shift;
463
+ shift += 7;
464
+ // (value >> 7) is either -1(continuation byte) or 0 (stop byte)
465
+ shift &= value >> 7;
466
+ // Loop if we haven't reached goal (sum < 0) or we haven't finished
467
+ // parsing current delta (value < 0). We write it in the form of
468
+ // (a | b) < 0 as opposed to (a < 0 || b < 0) as the former one is
469
+ // usually as fast as a test for (a < 0).
470
+ } while ((sum | value) < 0);
471
+
472
+ *out = goal + sum;
473
+ return ptr;
474
+ }
475
+
476
+ #endif // S2_UTIL_CODING_VARINT_H_