@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,134 @@
1
+ // Copyright 2005 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
+ // far-far-superior implementation courtesy of amc@google.com (Adam Costello)
18
+ //
19
+ // Nth Derivative Coding
20
+ // (In signal processing disciplines, this is known as N-th Delta Coding.)
21
+ //
22
+ // Good for varint coding integer sequences with polynomial trends.
23
+ //
24
+ // Instead of coding a sequence of values directly, code its nth-order discrete
25
+ // derivative. Overflow in integer addition and subtraction makes this a
26
+ // lossless transform.
27
+ //
28
+ // constant linear quadratic
29
+ // trend trend trend
30
+ // / \ / \ / \_
31
+ // input |0 0 0 0 1 2 3 4 9 16 25 36
32
+ // 0th derivative(identity) |0 0 0 0 1 2 3 4 9 16 25 36
33
+ // 1st derivative(delta coding) | 0 0 0 1 1 1 1 5 7 9 11
34
+ // 2nd derivative(linear prediction) | 0 0 1 0 0 0 4 2 2 2
35
+ // -------------------------------------
36
+ // 0 1 2 3 4 5 6 7 8 9 10 11
37
+ // n in sequence
38
+ //
39
+ // Higher-order codings can break even or be detrimental on other sequences.
40
+ //
41
+ // random oscillating
42
+ // / \ / \_
43
+ // input |5 9 6 1 8 8 2 -2 4 -4 6 -6
44
+ // 0th derivative(identity) |5 9 6 1 8 8 2 -2 4 -4 6 -6
45
+ // 1st derivative(delta coding) | 4 -3 -5 7 0 -6 -4 6 -8 10 -12
46
+ // 2nd derivative(linear prediction) | -7 -2 12 -7 -6 2 10 -14 18 -22
47
+ // ---------------------------------------
48
+ // 0 1 2 3 4 5 6 7 8 9 10 11
49
+ // n in sequence
50
+ //
51
+ // Note that the nth derivative isn't available until sequence item n. Earlier
52
+ // values are coded at lower order. For the above table, read 5 4 -7 -2 12 ...
53
+ //
54
+ // A caveat on class usage. Encode() and Decode() share state. Using both
55
+ // without a Reset() in-between probably doesn't make sense.
56
+
57
+ #ifndef S2_UTIL_CODING_NTH_DERIVATIVE_H_
58
+ #define S2_UTIL_CODING_NTH_DERIVATIVE_H_
59
+
60
+ #include "s2/base/integral_types.h"
61
+ #include "s2/base/logging.h"
62
+
63
+ class NthDerivativeCoder {
64
+ public:
65
+ // range of supported Ns: [ N_MIN, N_MAX ]
66
+ enum {
67
+ N_MIN = 0,
68
+ N_MAX = 10,
69
+ };
70
+
71
+ // Initialize a new NthDerivativeCoder of the given N.
72
+ explicit NthDerivativeCoder(int n);
73
+
74
+ // Encode the next value in the sequence. Don't mix with Decode() calls.
75
+ int32 Encode(int32 k);
76
+
77
+ // Decode the next value in the sequence. Don't mix with Encode() calls.
78
+ int32 Decode(int32 k);
79
+
80
+ // Reset state.
81
+ void Reset();
82
+
83
+ // accessors
84
+ int n() const { return n_; }
85
+
86
+ private:
87
+ int n_; // derivative order of the coder (the N in NthDerivative)
88
+ int m_; // the derivative order in which to code the next value(ramps to n_)
89
+ int32 memory_[N_MAX]; // value memory. [0] is oldest
90
+ };
91
+
92
+ // Implementation below. Callers Ignore.
93
+ //
94
+ // Inlining the implementation roughly doubled the speed. All other
95
+ // optimization tricks failed miserably.
96
+
97
+ #if ~0 != -1
98
+ #error Sorry, this code needs twos complement integers.
99
+ #endif
100
+
101
+ inline NthDerivativeCoder::NthDerivativeCoder(int n) : n_(n) {
102
+ if (n < N_MIN || n > N_MAX) {
103
+ S2_LOG(ERROR) << "Unsupported N: " << n << ". Using 0 instead.";
104
+ n_ = 0;
105
+ }
106
+ Reset();
107
+ }
108
+
109
+ inline int32 NthDerivativeCoder::Encode(int32 k) {
110
+ for (int i = 0; i < m_; ++i) {
111
+ uint32 delta = static_cast<uint32>(k) - memory_[i];
112
+ memory_[i] = k;
113
+ k = delta;
114
+ }
115
+ if (m_ < n_)
116
+ memory_[m_++] = k;
117
+ return k;
118
+ }
119
+
120
+ inline int32 NthDerivativeCoder::Decode(int32 k) {
121
+ if (m_ < n_)
122
+ m_++;
123
+ for (int i = m_ - 1; i >= 0; --i)
124
+ k = memory_[i] = memory_[i] + static_cast<uint32>(k);
125
+ return k;
126
+ }
127
+
128
+ inline void NthDerivativeCoder::Reset() {
129
+ for (int i = 0; i < n_; ++i)
130
+ memory_[i] = 0;
131
+ m_ = 0;
132
+ }
133
+
134
+ #endif // S2_UTIL_CODING_NTH_DERIVATIVE_H_
@@ -0,0 +1,62 @@
1
+ // Copyright 2005 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
+ // Data transforms that can help code more efficiently.
19
+
20
+ #ifndef S2_UTIL_CODING_TRANSFORMS_H_
21
+ #define S2_UTIL_CODING_TRANSFORMS_H_
22
+
23
+ #include "s2/base/integral_types.h"
24
+
25
+ // ZigZag Transform
26
+ //
27
+ // Good for varint coding small signed integers centered around 0.
28
+ //
29
+ // int32 -> uint32
30
+ // -------------------------
31
+ // 0 -> 0
32
+ // -1 -> 1
33
+ // 1 -> 2
34
+ // -2 -> 3
35
+ // ... -> ...
36
+ // 2147483647 -> 4294967294
37
+ // -2147483648 -> 4294967295
38
+ //
39
+ // >> encode >>
40
+ // << decode <<
41
+
42
+ static inline uint32 ZigZagEncode(int32 n) {
43
+ // We need the cast to avoid an arithmetic shift.
44
+ uint32 sign = (static_cast<uint32>(n)) >> 31;
45
+ return (static_cast<uint32>(n) << 1) ^ (0u - sign);
46
+ }
47
+
48
+ static inline int32 ZigZagDecode(uint32 n) {
49
+ return (n >> 1) ^ (0u - (n & 1));
50
+ }
51
+
52
+ static inline uint64 ZigZagEncode64(int64 n) {
53
+ // We need the cast to avoid an arithmetic shift.
54
+ uint64 sign = (static_cast<uint64>(n)) >> 63;
55
+ return (static_cast<uint64>(n) << 1) ^ (0u - sign);
56
+ }
57
+
58
+ static inline int64 ZigZagDecode64(uint64 n) {
59
+ return (n >> 1) ^ (0u - (n & 1));
60
+ }
61
+
62
+ #endif // S2_UTIL_CODING_TRANSFORMS_H_
@@ -0,0 +1,289 @@
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
+ #include "s2/util/coding/varint.h"
18
+
19
+ #include <string>
20
+
21
+ #include "s2/base/integral_types.h"
22
+
23
+ #ifndef _MSC_VER
24
+ const int Varint::kMax32;
25
+ const int Varint::kMax64;
26
+ const int Varint::kSlopBytes;
27
+ #endif
28
+
29
+ char* Varint::Encode32(char* sptr, uint32 v) {
30
+ return Encode32Inline(sptr, v);
31
+ }
32
+
33
+ char* Varint::Encode64(char* sptr, uint64 v) {
34
+ if (v < (1u << 28)) {
35
+ return Varint::Encode32(sptr, v);
36
+ } else {
37
+ // Operate on characters as unsigneds
38
+ unsigned char* ptr = reinterpret_cast<unsigned char*>(sptr);
39
+ // Rather than computing four subresults and or'ing each with 0x80,
40
+ // we can do two ors now. (Doing one now wouldn't work.)
41
+ const uint32 x32 = v | (1 << 7) | (1 << 21);
42
+ const uint32 y32 = v | (1 << 14) | (1 << 28);
43
+ *(ptr++) = x32;
44
+ *(ptr++) = y32 >> 7;
45
+ *(ptr++) = x32 >> 14;
46
+ *(ptr++) = y32 >> 21;
47
+ if (v < (1ull << 35)) {
48
+ *(ptr++) = v >> 28;
49
+ return reinterpret_cast<char*>(ptr);
50
+ } else {
51
+ *(ptr++) = (v >> 28) | (1 << 7);
52
+ return Varint::Encode32(reinterpret_cast<char*>(ptr), v >> 35);
53
+ }
54
+ }
55
+ }
56
+
57
+ const char* Varint::Parse32Fallback(const char* ptr, uint32* OUTPUT) {
58
+ return Parse32FallbackInline(ptr, OUTPUT);
59
+ }
60
+
61
+ const char* Varint::Parse64Fallback(const char* p, uint64* OUTPUT) {
62
+ const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
63
+ assert(*ptr >= 128);
64
+ #if defined(__x86_64__)
65
+ // This approach saves one redundant operation on the last byte (masking a
66
+ // byte that doesn't need it). This is conditional on x86 because:
67
+ // - PowerPC has specialized bit instructions that make masking and
68
+ // shifting very efficient
69
+ // - x86 seems to be one of the few architectures that has a single
70
+ // instruction to add 3 values.
71
+ //
72
+ // e.g.
73
+ // Input: 0xff, 0x40
74
+ // Mask & Or calculates: (0xff & 0x7f) | ((0x40 & 0x7f) << 7) = 0x207f
75
+ // Sub1 & Add calculates: 0xff + ((0x40 - 1) << 7) = 0x207f
76
+ //
77
+ // The subtract one removes the bit set by the previous byte used to
78
+ // indicate that more bytes are present. It also has the potential to
79
+ // allow instructions like LEA to combine 2 adds into one instruction.
80
+ //
81
+ // E.g. on an x86 architecture, %rcx = %rax + (%rbx - 1) << 7 could be
82
+ // emitted as:
83
+ // shlq $7, %rbx
84
+ // leaq -0x80(%rax, %rbx), %rcx
85
+ //
86
+ // Fast path: need to accumulate data in upto three result fragments
87
+ // res1 bits 0..27
88
+ // res2 bits 28..55
89
+ // res3 bits 56..63
90
+
91
+ uint64 byte, res1, res2 = 0, res3 = 0;
92
+ byte = *(ptr++); res1 = byte;
93
+ byte = *(ptr++); res1 += (byte - 1) << 7; if (byte < 128) goto done1;
94
+ byte = *(ptr++); res1 += (byte - 1) << 14; if (byte < 128) goto done1;
95
+ byte = *(ptr++); res1 += (byte - 1) << 21; if (byte < 128) goto done1;
96
+
97
+ byte = *(ptr++); res2 = byte; if (byte < 128) goto done2;
98
+ byte = *(ptr++); res2 += (byte - 1) << 7; if (byte < 128) goto done2;
99
+ byte = *(ptr++); res2 += (byte - 1) << 14; if (byte < 128) goto done2;
100
+ byte = *(ptr++); res2 += (byte - 1) << 21; if (byte < 128) goto done2;
101
+
102
+ byte = *(ptr++); res3 = byte; if (byte < 128) goto done3;
103
+ byte = *(ptr++); res3 += (byte - 1) << 7; if (byte < 2) goto done3;
104
+
105
+ return nullptr; // Value is too long to be a varint64
106
+
107
+ done1:
108
+ assert(res2 == 0);
109
+ assert(res3 == 0);
110
+ *OUTPUT = res1;
111
+ return reinterpret_cast<const char*>(ptr);
112
+
113
+ done2:
114
+ assert(res3 == 0);
115
+ *OUTPUT = res1 + ((res2 - 1) << 28);
116
+ return reinterpret_cast<const char*>(ptr);
117
+
118
+ done3:
119
+ *OUTPUT = res1 + ((res2 - 1) << 28) + ((res3 - 1) << 56);
120
+ return reinterpret_cast<const char*>(ptr);
121
+ #else
122
+ uint32 byte, res1, res2=0, res3=0;
123
+ byte = *(ptr++); res1 = byte & 127;
124
+ byte = *(ptr++); res1 |= (byte & 127) << 7; if (byte < 128) goto done1;
125
+ byte = *(ptr++); res1 |= (byte & 127) << 14; if (byte < 128) goto done1;
126
+ byte = *(ptr++); res1 |= (byte & 127) << 21; if (byte < 128) goto done1;
127
+
128
+ byte = *(ptr++); res2 = byte & 127; if (byte < 128) goto done2;
129
+ byte = *(ptr++); res2 |= (byte & 127) << 7; if (byte < 128) goto done2;
130
+ byte = *(ptr++); res2 |= (byte & 127) << 14; if (byte < 128) goto done2;
131
+ byte = *(ptr++); res2 |= (byte & 127) << 21; if (byte < 128) goto done2;
132
+
133
+ byte = *(ptr++); res3 = byte & 127; if (byte < 128) goto done3;
134
+ byte = *(ptr++); res3 |= (byte & 127) << 7; if (byte < 2) goto done3;
135
+
136
+ return nullptr; // Value is too long to be a varint64
137
+
138
+ done1:
139
+ assert(res2 == 0);
140
+ assert(res3 == 0);
141
+ *OUTPUT = res1;
142
+ return reinterpret_cast<const char*>(ptr);
143
+
144
+ done2:
145
+ assert(res3 == 0);
146
+ *OUTPUT = res1 | (uint64(res2) << 28);
147
+ return reinterpret_cast<const char*>(ptr);
148
+
149
+ done3:
150
+ *OUTPUT = res1 | (uint64(res2) << 28) | (uint64(res3) << 56);
151
+ return reinterpret_cast<const char*>(ptr);
152
+ #endif
153
+ }
154
+
155
+ const char* Varint::Parse32BackwardSlow(const char* ptr, const char* base,
156
+ uint32* OUTPUT) {
157
+ // Since this method is rarely called, for simplicity, we just skip backward
158
+ // and then parse forward.
159
+ const char* prev = Skip32BackwardSlow(ptr, base);
160
+ if (prev == nullptr)
161
+ return nullptr; // no value before 'ptr'
162
+
163
+ Parse32(prev, OUTPUT);
164
+ return prev;
165
+ }
166
+
167
+ const char* Varint::Parse64BackwardSlow(const char* ptr, const char* base,
168
+ uint64* OUTPUT) {
169
+ // Since this method is rarely called, for simplicity, we just skip backward
170
+ // and then parse forward.
171
+ const char* prev = Skip64BackwardSlow(ptr, base);
172
+ if (prev == nullptr)
173
+ return nullptr; // no value before 'ptr'
174
+
175
+ Parse64(prev, OUTPUT);
176
+ return prev;
177
+ }
178
+
179
+ const char* Varint::Parse64WithLimit(const char* p,
180
+ const char* l,
181
+ uint64* OUTPUT) {
182
+ if (p + kMax64 <= l) {
183
+ return Parse64(p, OUTPUT);
184
+ } else {
185
+ // See detailed comment in Varint::Parse64Fallback about this general
186
+ // approach.
187
+ const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
188
+ const unsigned char* limit = reinterpret_cast<const unsigned char*>(l);
189
+ uint64 b, result;
190
+ #if defined(__x86_64__)
191
+ if (ptr >= limit) return nullptr;
192
+ b = *(ptr++); result = b; if (b < 128) goto done;
193
+ if (ptr >= limit) return nullptr;
194
+ b = *(ptr++); result += (b - 1) << 7; if (b < 128) goto done;
195
+ if (ptr >= limit) return nullptr;
196
+ b = *(ptr++); result += (b - 1) << 14; if (b < 128) goto done;
197
+ if (ptr >= limit) return nullptr;
198
+ b = *(ptr++); result += (b - 1) << 21; if (b < 128) goto done;
199
+ if (ptr >= limit) return nullptr;
200
+ b = *(ptr++); result += (b - 1) << 28; if (b < 128) goto done;
201
+ if (ptr >= limit) return nullptr;
202
+ b = *(ptr++); result += (b - 1) << 35; if (b < 128) goto done;
203
+ if (ptr >= limit) return nullptr;
204
+ b = *(ptr++); result += (b - 1) << 42; if (b < 128) goto done;
205
+ if (ptr >= limit) return nullptr;
206
+ b = *(ptr++); result += (b - 1) << 49; if (b < 128) goto done;
207
+ if (ptr >= limit) return nullptr;
208
+ b = *(ptr++); result += (b - 1) << 56; if (b < 128) goto done;
209
+ if (ptr >= limit) return nullptr;
210
+ b = *(ptr++); result += (b - 1) << 63; if (b < 2) goto done;
211
+ return nullptr; // Value is too long to be a varint64
212
+ #else
213
+ if (ptr >= limit) return nullptr;
214
+ b = *(ptr++); result = b & 127; if (b < 128) goto done;
215
+ if (ptr >= limit) return nullptr;
216
+ b = *(ptr++); result |= (b & 127) << 7; if (b < 128) goto done;
217
+ if (ptr >= limit) return nullptr;
218
+ b = *(ptr++); result |= (b & 127) << 14; if (b < 128) goto done;
219
+ if (ptr >= limit) return nullptr;
220
+ b = *(ptr++); result |= (b & 127) << 21; if (b < 128) goto done;
221
+ if (ptr >= limit) return nullptr;
222
+ b = *(ptr++); result |= (b & 127) << 28; if (b < 128) goto done;
223
+ if (ptr >= limit) return nullptr;
224
+ b = *(ptr++); result |= (b & 127) << 35; if (b < 128) goto done;
225
+ if (ptr >= limit) return nullptr;
226
+ b = *(ptr++); result |= (b & 127) << 42; if (b < 128) goto done;
227
+ if (ptr >= limit) return nullptr;
228
+ b = *(ptr++); result |= (b & 127) << 49; if (b < 128) goto done;
229
+ if (ptr >= limit) return nullptr;
230
+ b = *(ptr++); result |= (b & 127) << 56; if (b < 128) goto done;
231
+ if (ptr >= limit) return nullptr;
232
+ b = *(ptr++); result |= (b & 127) << 63; if (b < 2) goto done;
233
+ return nullptr; // Value is too long to be a varint64
234
+ #endif
235
+ done:
236
+ *OUTPUT = result;
237
+ return reinterpret_cast<const char*>(ptr);
238
+ }
239
+ }
240
+
241
+ const char* Varint::Skip32BackwardSlow(const char* p, const char* b) {
242
+ const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
243
+ const unsigned char* base = reinterpret_cast<const unsigned char*>(b);
244
+ assert(ptr >= base);
245
+
246
+ // If the initial pointer is at the base or if the previous byte is not
247
+ // the last byte of a varint, we return nullptr since there is nothing to
248
+ // skip.
249
+ if (ptr == base) return nullptr;
250
+ if (*(--ptr) > 127) return nullptr;
251
+
252
+ for (int i = 0; i < 5; i++) {
253
+ if (ptr == base) return reinterpret_cast<const char*>(ptr);
254
+ if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr + 1);
255
+ }
256
+
257
+ return nullptr; // value is too long to be a varint32
258
+ }
259
+
260
+ const char* Varint::Skip64BackwardSlow(const char* p, const char* b) {
261
+ const unsigned char* ptr = reinterpret_cast<const unsigned char*>(p);
262
+ const unsigned char* base = reinterpret_cast<const unsigned char*>(b);
263
+ assert(ptr >= base);
264
+
265
+ // If the initial pointer is at the base or if the previous byte is not
266
+ // the last byte of a varint, we return nullptr since there is nothing to
267
+ // skip.
268
+ if (ptr == base) return nullptr;
269
+ if (*(--ptr) > 127) return nullptr;
270
+
271
+ for (int i = 0; i < 10; i++) {
272
+ if (ptr == base) return reinterpret_cast<const char*>(ptr);
273
+ if (*(--ptr) < 128) return reinterpret_cast<const char*>(ptr + 1);
274
+ }
275
+
276
+ return nullptr; // value is too long to be a varint64
277
+ }
278
+
279
+ void Varint::Append32Slow(string* s, uint32 value) {
280
+ const size_t start = s->size();
281
+ s->resize(start + Varint::Length32(value));
282
+ Varint::Encode32(&((*s)[start]), value);
283
+ }
284
+
285
+ void Varint::Append64Slow(string* s, uint64 value) {
286
+ const size_t start = s->size();
287
+ s->resize(start + Varint::Length64(value));
288
+ Varint::Encode64(&((*s)[start]), value);
289
+ }