@crossbind/port-gdal-wasm 2.0.0-beta.50

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 (667) hide show
  1. package/LICENSE +467 -0
  2. package/README.md +12 -0
  3. package/assets/gdal_empty_file.cpp +0 -0
  4. package/crossbind.build.js +23 -0
  5. package/crossbind.config.js +35 -0
  6. package/dist/prebuilt/CMakeLists.txt +57 -0
  7. package/dist/prebuilt/wasm-wasm32-mt-release/crossbind-emccflags.fingerprint +1 -0
  8. package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_atomic_ops.h +89 -0
  9. package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_auto_close.h +72 -0
  10. package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_compressor.h +112 -0
  11. package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_config.h +203 -0
  12. package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_config_extras.h +33 -0
  13. package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_conv.h +528 -0
  14. package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_csv.h +70 -0
  15. package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_error.h +505 -0
  16. package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_float.h +730 -0
  17. package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_hash_set.h +82 -0
  18. package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_http.h +317 -0
  19. package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_json.h +398 -0
  20. package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_list.h +58 -0
  21. package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_minixml.h +210 -0
  22. package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_multiproc.h +241 -0
  23. package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_port.h +1266 -0
  24. package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_progress.h +48 -0
  25. package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_quad_tree.h +104 -0
  26. package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_spawn.h +59 -0
  27. package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_string.h +985 -0
  28. package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_time.h +28 -0
  29. package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_virtualmem.h +347 -0
  30. package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_vsi.h +885 -0
  31. package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_vsi_error.h +91 -0
  32. package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_vsi_virtual.h +838 -0
  33. package/dist/prebuilt/wasm-wasm32-mt-release/include/cplkeywordparser.h +60 -0
  34. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal.h +3013 -0
  35. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_adbc.h +46 -0
  36. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_alg.h +753 -0
  37. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_alg_priv.h +444 -0
  38. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_asyncreader.h +177 -0
  39. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_colortable.h +85 -0
  40. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_computedrasterband.h +334 -0
  41. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_cpp_functions.h +414 -0
  42. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_csv.h +24 -0
  43. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_dataset.h +959 -0
  44. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_defaultoverviews.h +133 -0
  45. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_driver.h +348 -0
  46. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_drivermanager.h +115 -0
  47. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_frmts.h +230 -0
  48. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_fwd.h +219 -0
  49. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_gcp.h +140 -0
  50. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_geotransform.h +251 -0
  51. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_majorobject.h +102 -0
  52. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_maskbands.h +170 -0
  53. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_mdreader.h +240 -0
  54. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_mem.h +32 -0
  55. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_minmax_element.hpp +1489 -0
  56. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_multidim.h +1356 -0
  57. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_multidim_cpp.h +33 -0
  58. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_multidomainmetadata.h +91 -0
  59. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_openinfo.h +94 -0
  60. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_pam.h +400 -0
  61. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_pam_multidim.h +114 -0
  62. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_priv.h +69 -0
  63. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_priv_templates.hpp +1516 -0
  64. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_proxy.h +475 -0
  65. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_raster_cpp.h +46 -0
  66. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_rasterband.h +779 -0
  67. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_rasterblock.h +184 -0
  68. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_rat.h +589 -0
  69. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_relationship.h +380 -0
  70. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_simplesurf.h +579 -0
  71. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_thread_pool.h +42 -0
  72. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_typetraits.h +517 -0
  73. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_utils.h +350 -0
  74. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_vector_cpp.h +31 -0
  75. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_version.h +37 -0
  76. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_vrt.h +88 -0
  77. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdalalgorithm.h +19 -0
  78. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdalalgorithm_c.h +292 -0
  79. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdalalgorithm_cpp.h +3398 -0
  80. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdalcachedpixelaccessor.h +446 -0
  81. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdalgeorefpamdataset.h +72 -0
  82. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdalgrid.h +102 -0
  83. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdalgrid_priv.h +67 -0
  84. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdaljp2abstractdataset.h +60 -0
  85. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdaljp2metadata.h +236 -0
  86. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdalpansharpen.h +260 -0
  87. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdalsubdatasetinfo.h +104 -0
  88. package/dist/prebuilt/wasm-wasm32-mt-release/include/gdalwarper.h +644 -0
  89. package/dist/prebuilt/wasm-wasm32-mt-release/include/geoheif.h +58 -0
  90. package/dist/prebuilt/wasm-wasm32-mt-release/include/gnm.h +781 -0
  91. package/dist/prebuilt/wasm-wasm32-mt-release/include/gnm_api.h +99 -0
  92. package/dist/prebuilt/wasm-wasm32-mt-release/include/gnmgraph.h +257 -0
  93. package/dist/prebuilt/wasm-wasm32-mt-release/include/memdataset.h +385 -0
  94. package/dist/prebuilt/wasm-wasm32-mt-release/include/ogr_api.h +948 -0
  95. package/dist/prebuilt/wasm-wasm32-mt-release/include/ogr_core.h +1319 -0
  96. package/dist/prebuilt/wasm-wasm32-mt-release/include/ogr_feature.h +2136 -0
  97. package/dist/prebuilt/wasm-wasm32-mt-release/include/ogr_featurestyle.h +869 -0
  98. package/dist/prebuilt/wasm-wasm32-mt-release/include/ogr_geocoding.h +45 -0
  99. package/dist/prebuilt/wasm-wasm32-mt-release/include/ogr_geomcoordinateprecision.h +85 -0
  100. package/dist/prebuilt/wasm-wasm32-mt-release/include/ogr_geometry.h +4382 -0
  101. package/dist/prebuilt/wasm-wasm32-mt-release/include/ogr_p.h +330 -0
  102. package/dist/prebuilt/wasm-wasm32-mt-release/include/ogr_recordbatch.h +128 -0
  103. package/dist/prebuilt/wasm-wasm32-mt-release/include/ogr_refcountedptr.h +198 -0
  104. package/dist/prebuilt/wasm-wasm32-mt-release/include/ogr_spatialref.h +1122 -0
  105. package/dist/prebuilt/wasm-wasm32-mt-release/include/ogr_srs_api.h +1073 -0
  106. package/dist/prebuilt/wasm-wasm32-mt-release/include/ogr_swq.h +534 -0
  107. package/dist/prebuilt/wasm-wasm32-mt-release/include/ogrsf_frmts.h +803 -0
  108. package/dist/prebuilt/wasm-wasm32-mt-release/include/rawdataset.h +268 -0
  109. package/dist/prebuilt/wasm-wasm32-mt-release/include/vrtdataset.h +2595 -0
  110. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/3.20/FindLibLZMA.cmake +126 -0
  111. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/3.20/FindPostgreSQL.cmake +312 -0
  112. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/DefineFindPackage2.cmake +164 -0
  113. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/GDAL-targets-release.cmake +19 -0
  114. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/GDAL-targets.cmake +108 -0
  115. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/GDALConfig.cmake +35 -0
  116. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/GDALConfigVersion.cmake +65 -0
  117. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/GdalFindModulePath.cmake +13 -0
  118. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindBRUNSLI.cmake +74 -0
  119. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindBlosc.cmake +74 -0
  120. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindCURL.cmake +235 -0
  121. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindCryptoPP.cmake +91 -0
  122. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindDeflate.cmake +113 -0
  123. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindECW.cmake +172 -0
  124. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindEXPAT.cmake +156 -0
  125. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindExprTk.cmake +93 -0
  126. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindFYBA.cmake +38 -0
  127. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindFileGDB.cmake +93 -0
  128. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindFreeXL.cmake +67 -0
  129. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindGEOS.cmake +49 -0
  130. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindGIF.cmake +97 -0
  131. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindGeoTIFF.cmake +104 -0
  132. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindHDF4.cmake +133 -0
  133. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindHDFS.cmake +54 -0
  134. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindIDB.cmake +45 -0
  135. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindIconv.cmake +145 -0
  136. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindJSONC.cmake +48 -0
  137. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindKDU.cmake +105 -0
  138. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindLERC.cmake +46 -0
  139. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindLZ4.cmake +130 -0
  140. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindLibKML.cmake +134 -0
  141. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindMONGOCXX.cmake +56 -0
  142. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindMRSID.cmake +66 -0
  143. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindMSSQL_NCLI.cmake +86 -0
  144. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindMSSQL_ODBC.cmake +113 -0
  145. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindMySQL.cmake +83 -0
  146. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindNetCDF.cmake +209 -0
  147. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindODBC.cmake +259 -0
  148. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindODBCCPP.cmake +72 -0
  149. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindOpenCAD.cmake +97 -0
  150. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindOpenEXR.cmake +125 -0
  151. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindOpenJPEG.cmake +124 -0
  152. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindOracle.cmake +230 -0
  153. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindPCRE.cmake +28 -0
  154. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindPCRE2.cmake +27 -0
  155. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindPROJ.cmake +91 -0
  156. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindPodofo.cmake +94 -0
  157. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindPoppler.cmake +182 -0
  158. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindQHULL.cmake +44 -0
  159. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindRASTERLITE2.cmake +85 -0
  160. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindSFCGAL.cmake +87 -0
  161. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindSPATIALITE.cmake +74 -0
  162. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindSQLite3.cmake +208 -0
  163. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindShapelib.cmake +69 -0
  164. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindSpatialindex.cmake +18 -0
  165. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindTEIGHA.cmake +242 -0
  166. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindWebP.cmake +38 -0
  167. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindZSTD.cmake +95 -0
  168. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/Findmuparser.cmake +53 -0
  169. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/thirdparty/DotnetImports.props.in +7 -0
  170. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/thirdparty/FindCSharp.cmake +72 -0
  171. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/thirdparty/FindDotnet.cmake +496 -0
  172. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/thirdparty/FindInt128.cmake +65 -0
  173. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/thirdparty/FindMono.cmake +163 -0
  174. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/thirdparty/GetGitHeadDate.cmake +33 -0
  175. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/thirdparty/GetGitRevisionDescription.cmake +181 -0
  176. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/thirdparty/GetGitRevisionDescription.cmake.in +50 -0
  177. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/thirdparty/OSXInstallDirs.cmake +214 -0
  178. package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/thirdparty/SystemSummary.cmake +89 -0
  179. package/dist/prebuilt/wasm-wasm32-mt-release/lib/gdalplugins/drivers.ini +285 -0
  180. package/dist/prebuilt/wasm-wasm32-mt-release/lib/libgdal.a +0 -0
  181. package/dist/prebuilt/wasm-wasm32-mt-release/lib/pkgconfig/gdal.pc +17 -0
  182. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/GDALLogoBW.svg +138 -0
  183. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/GDALLogoColor.svg +126 -0
  184. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/GDALLogoGS.svg +126 -0
  185. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/LICENSE.TXT +467 -0
  186. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/MM_m_idofic.csv +320 -0
  187. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/cubewerx_extra.wkt +48 -0
  188. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/default.rsc +0 -0
  189. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/ecw_cs.wkt +1453 -0
  190. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/eedaconf.json +23 -0
  191. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/epsg.wkt +1 -0
  192. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/esri_StatePlane_extra.wkt +631 -0
  193. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/gdal_algorithm.schema.json +240 -0
  194. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/gdalg.schema.json +36 -0
  195. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/gdalicon.png +0 -0
  196. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/gdalinfo_output.schema.json +390 -0
  197. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/gdalmdiminfo_output.schema.json +393 -0
  198. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/gdaltileindex.xsd +264 -0
  199. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/gdalvrt.xsd +948 -0
  200. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/gfs.xsd +246 -0
  201. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/gml_registry.xml +117 -0
  202. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/gml_registry.xsd +66 -0
  203. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_center.csv +251 -0
  204. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_process.csv +102 -0
  205. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_subcenter.csv +63 -0
  206. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_0.csv +261 -0
  207. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_1.csv +261 -0
  208. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_13.csv +261 -0
  209. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_14.csv +261 -0
  210. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_15.csv +261 -0
  211. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_16.csv +261 -0
  212. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_17.csv +261 -0
  213. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_18.csv +261 -0
  214. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_19.csv +261 -0
  215. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_190.csv +261 -0
  216. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_191.csv +261 -0
  217. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_2.csv +261 -0
  218. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_20.csv +261 -0
  219. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_21.csv +261 -0
  220. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_22.csv +261 -0
  221. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_3.csv +261 -0
  222. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_4.csv +261 -0
  223. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_5.csv +261 -0
  224. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_6.csv +261 -0
  225. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_7.csv +261 -0
  226. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_10_0.csv +261 -0
  227. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_10_1.csv +261 -0
  228. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_10_191.csv +261 -0
  229. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_10_2.csv +261 -0
  230. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_10_3.csv +261 -0
  231. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_10_4.csv +261 -0
  232. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_1_0.csv +261 -0
  233. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_1_1.csv +261 -0
  234. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_1_2.csv +261 -0
  235. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_20_0.csv +261 -0
  236. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_20_1.csv +261 -0
  237. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_20_2.csv +261 -0
  238. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_20_3.csv +261 -0
  239. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_2_0.csv +261 -0
  240. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_2_3.csv +261 -0
  241. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_2_4.csv +261 -0
  242. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_2_5.csv +261 -0
  243. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_2_6.csv +261 -0
  244. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_2_7.csv +261 -0
  245. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_3_0.csv +261 -0
  246. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_3_1.csv +261 -0
  247. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_3_2.csv +243 -0
  248. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_3_3.csv +261 -0
  249. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_3_4.csv +261 -0
  250. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_3_5.csv +261 -0
  251. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_3_6.csv +261 -0
  252. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_4_0.csv +261 -0
  253. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_4_1.csv +261 -0
  254. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_4_10.csv +261 -0
  255. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_4_2.csv +261 -0
  256. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_4_3.csv +261 -0
  257. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_4_4.csv +261 -0
  258. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_4_5.csv +261 -0
  259. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_4_6.csv +261 -0
  260. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_4_7.csv +261 -0
  261. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_4_8.csv +261 -0
  262. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_4_9.csv +261 -0
  263. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_local_Canada.csv +5 -0
  264. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_local_HPC.csv +2 -0
  265. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_local_MRMS.csv +175 -0
  266. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_local_NCEP.csv +401 -0
  267. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_local_NDFD.csv +38 -0
  268. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_local_index.csv +7 -0
  269. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_5.csv +261 -0
  270. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_versions.csv +3 -0
  271. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/gt_datum.csv +229 -0
  272. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/gt_ellips.csv +24 -0
  273. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/header.dxf +1138 -0
  274. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/inspire_cp_BasicPropertyUnit.gfs +57 -0
  275. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/inspire_cp_CadastralBoundary.gfs +60 -0
  276. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/inspire_cp_CadastralParcel.gfs +81 -0
  277. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/inspire_cp_CadastralZoning.gfs +161 -0
  278. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_AdmArea.gfs +59 -0
  279. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_AdmBdry.gfs +49 -0
  280. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_AdmPt.gfs +59 -0
  281. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_BldA.gfs +54 -0
  282. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_BldL.gfs +54 -0
  283. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_Cntr.gfs +54 -0
  284. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_CommBdry.gfs +49 -0
  285. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_CommPt.gfs +59 -0
  286. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_Cstline.gfs +54 -0
  287. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_ElevPt.gfs +54 -0
  288. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_GCP.gfs +94 -0
  289. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_LeveeEdge.gfs +49 -0
  290. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_RailCL.gfs +54 -0
  291. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_RdASL.gfs +44 -0
  292. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_RdArea.gfs +54 -0
  293. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_RdCompt.gfs +59 -0
  294. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_RdEdg.gfs +59 -0
  295. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_RdMgtBdry.gfs +49 -0
  296. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_RdSgmtA.gfs +59 -0
  297. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_RvrMgtBdry.gfs +49 -0
  298. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_SBAPt.gfs +49 -0
  299. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_SBArea.gfs +54 -0
  300. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_SBBdry.gfs +44 -0
  301. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_WA.gfs +54 -0
  302. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_WL.gfs +54 -0
  303. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_WStrA.gfs +54 -0
  304. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_WStrL.gfs +54 -0
  305. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/leaflet_template.html +102 -0
  306. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/nitf_spec.xml +3508 -0
  307. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/nitf_spec.xsd +178 -0
  308. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/ogr_fields_override.schema.json +278 -0
  309. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/ogrinfo_output.schema.json +532 -0
  310. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/ogrvrt.xsd +526 -0
  311. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/osmconf.ini +134 -0
  312. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/ozi_datum.csv +131 -0
  313. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/ozi_ellips.csv +35 -0
  314. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/pci_datum.txt +530 -0
  315. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/pci_ellips.txt +129 -0
  316. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/pdfcomposition.xsd +703 -0
  317. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/plscenesconf.json +1985 -0
  318. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/ruian_vf_ob_v1.gfs +1455 -0
  319. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/ruian_vf_st_uvoh_v1.gfs +86 -0
  320. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/ruian_vf_st_v1.gfs +1489 -0
  321. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/ruian_vf_v1.gfs +2126 -0
  322. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/s57agencies.csv +249 -0
  323. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/s57attributes.csv +484 -0
  324. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/s57expectedinput.csv +1008 -0
  325. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/s57objectclasses.csv +287 -0
  326. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/seed_2d.dgn +0 -0
  327. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/seed_3d.dgn +0 -0
  328. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/stateplane.csv +259 -0
  329. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/template_tiles.mapml +26 -0
  330. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/tms_LINZAntarticaMapTileGrid.json +190 -0
  331. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/tms_MapML_APSTILE.json +268 -0
  332. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/tms_MapML_CBMTILE.json +346 -0
  333. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/tms_NZTM2000.json +243 -0
  334. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/trailer.dxf +434 -0
  335. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/vdv452.xml +349 -0
  336. package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/vdv452.xsd +45 -0
  337. package/dist/prebuilt/wasm-wasm32-st-release/crossbind-emccflags.fingerprint +1 -0
  338. package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_atomic_ops.h +89 -0
  339. package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_auto_close.h +72 -0
  340. package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_compressor.h +112 -0
  341. package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_config.h +203 -0
  342. package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_config_extras.h +33 -0
  343. package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_conv.h +528 -0
  344. package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_csv.h +70 -0
  345. package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_error.h +505 -0
  346. package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_float.h +730 -0
  347. package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_hash_set.h +82 -0
  348. package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_http.h +317 -0
  349. package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_json.h +398 -0
  350. package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_list.h +58 -0
  351. package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_minixml.h +210 -0
  352. package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_multiproc.h +241 -0
  353. package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_port.h +1266 -0
  354. package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_progress.h +48 -0
  355. package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_quad_tree.h +104 -0
  356. package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_spawn.h +59 -0
  357. package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_string.h +985 -0
  358. package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_time.h +28 -0
  359. package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_virtualmem.h +347 -0
  360. package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_vsi.h +885 -0
  361. package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_vsi_error.h +91 -0
  362. package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_vsi_virtual.h +838 -0
  363. package/dist/prebuilt/wasm-wasm32-st-release/include/cplkeywordparser.h +60 -0
  364. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal.h +3013 -0
  365. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_adbc.h +46 -0
  366. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_alg.h +753 -0
  367. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_alg_priv.h +444 -0
  368. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_asyncreader.h +177 -0
  369. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_colortable.h +85 -0
  370. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_computedrasterband.h +334 -0
  371. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_cpp_functions.h +414 -0
  372. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_csv.h +24 -0
  373. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_dataset.h +959 -0
  374. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_defaultoverviews.h +133 -0
  375. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_driver.h +348 -0
  376. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_drivermanager.h +115 -0
  377. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_frmts.h +230 -0
  378. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_fwd.h +219 -0
  379. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_gcp.h +140 -0
  380. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_geotransform.h +251 -0
  381. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_majorobject.h +102 -0
  382. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_maskbands.h +170 -0
  383. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_mdreader.h +240 -0
  384. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_mem.h +32 -0
  385. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_minmax_element.hpp +1489 -0
  386. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_multidim.h +1356 -0
  387. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_multidim_cpp.h +33 -0
  388. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_multidomainmetadata.h +91 -0
  389. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_openinfo.h +94 -0
  390. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_pam.h +400 -0
  391. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_pam_multidim.h +114 -0
  392. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_priv.h +69 -0
  393. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_priv_templates.hpp +1516 -0
  394. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_proxy.h +475 -0
  395. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_raster_cpp.h +46 -0
  396. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_rasterband.h +779 -0
  397. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_rasterblock.h +184 -0
  398. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_rat.h +589 -0
  399. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_relationship.h +380 -0
  400. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_simplesurf.h +579 -0
  401. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_thread_pool.h +42 -0
  402. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_typetraits.h +517 -0
  403. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_utils.h +350 -0
  404. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_vector_cpp.h +31 -0
  405. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_version.h +37 -0
  406. package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_vrt.h +88 -0
  407. package/dist/prebuilt/wasm-wasm32-st-release/include/gdalalgorithm.h +19 -0
  408. package/dist/prebuilt/wasm-wasm32-st-release/include/gdalalgorithm_c.h +292 -0
  409. package/dist/prebuilt/wasm-wasm32-st-release/include/gdalalgorithm_cpp.h +3398 -0
  410. package/dist/prebuilt/wasm-wasm32-st-release/include/gdalcachedpixelaccessor.h +446 -0
  411. package/dist/prebuilt/wasm-wasm32-st-release/include/gdalgeorefpamdataset.h +72 -0
  412. package/dist/prebuilt/wasm-wasm32-st-release/include/gdalgrid.h +102 -0
  413. package/dist/prebuilt/wasm-wasm32-st-release/include/gdalgrid_priv.h +67 -0
  414. package/dist/prebuilt/wasm-wasm32-st-release/include/gdaljp2abstractdataset.h +60 -0
  415. package/dist/prebuilt/wasm-wasm32-st-release/include/gdaljp2metadata.h +236 -0
  416. package/dist/prebuilt/wasm-wasm32-st-release/include/gdalpansharpen.h +260 -0
  417. package/dist/prebuilt/wasm-wasm32-st-release/include/gdalsubdatasetinfo.h +104 -0
  418. package/dist/prebuilt/wasm-wasm32-st-release/include/gdalwarper.h +644 -0
  419. package/dist/prebuilt/wasm-wasm32-st-release/include/geoheif.h +58 -0
  420. package/dist/prebuilt/wasm-wasm32-st-release/include/gnm.h +781 -0
  421. package/dist/prebuilt/wasm-wasm32-st-release/include/gnm_api.h +99 -0
  422. package/dist/prebuilt/wasm-wasm32-st-release/include/gnmgraph.h +257 -0
  423. package/dist/prebuilt/wasm-wasm32-st-release/include/memdataset.h +385 -0
  424. package/dist/prebuilt/wasm-wasm32-st-release/include/ogr_api.h +948 -0
  425. package/dist/prebuilt/wasm-wasm32-st-release/include/ogr_core.h +1319 -0
  426. package/dist/prebuilt/wasm-wasm32-st-release/include/ogr_feature.h +2136 -0
  427. package/dist/prebuilt/wasm-wasm32-st-release/include/ogr_featurestyle.h +869 -0
  428. package/dist/prebuilt/wasm-wasm32-st-release/include/ogr_geocoding.h +45 -0
  429. package/dist/prebuilt/wasm-wasm32-st-release/include/ogr_geomcoordinateprecision.h +85 -0
  430. package/dist/prebuilt/wasm-wasm32-st-release/include/ogr_geometry.h +4382 -0
  431. package/dist/prebuilt/wasm-wasm32-st-release/include/ogr_p.h +330 -0
  432. package/dist/prebuilt/wasm-wasm32-st-release/include/ogr_recordbatch.h +128 -0
  433. package/dist/prebuilt/wasm-wasm32-st-release/include/ogr_refcountedptr.h +198 -0
  434. package/dist/prebuilt/wasm-wasm32-st-release/include/ogr_spatialref.h +1122 -0
  435. package/dist/prebuilt/wasm-wasm32-st-release/include/ogr_srs_api.h +1073 -0
  436. package/dist/prebuilt/wasm-wasm32-st-release/include/ogr_swq.h +534 -0
  437. package/dist/prebuilt/wasm-wasm32-st-release/include/ogrsf_frmts.h +803 -0
  438. package/dist/prebuilt/wasm-wasm32-st-release/include/rawdataset.h +268 -0
  439. package/dist/prebuilt/wasm-wasm32-st-release/include/vrtdataset.h +2595 -0
  440. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/3.20/FindLibLZMA.cmake +126 -0
  441. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/3.20/FindPostgreSQL.cmake +312 -0
  442. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/DefineFindPackage2.cmake +164 -0
  443. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/GDAL-targets-release.cmake +19 -0
  444. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/GDAL-targets.cmake +108 -0
  445. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/GDALConfig.cmake +35 -0
  446. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/GDALConfigVersion.cmake +65 -0
  447. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/GdalFindModulePath.cmake +13 -0
  448. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindBRUNSLI.cmake +74 -0
  449. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindBlosc.cmake +74 -0
  450. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindCURL.cmake +235 -0
  451. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindCryptoPP.cmake +91 -0
  452. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindDeflate.cmake +113 -0
  453. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindECW.cmake +172 -0
  454. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindEXPAT.cmake +156 -0
  455. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindExprTk.cmake +93 -0
  456. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindFYBA.cmake +38 -0
  457. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindFileGDB.cmake +93 -0
  458. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindFreeXL.cmake +67 -0
  459. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindGEOS.cmake +49 -0
  460. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindGIF.cmake +97 -0
  461. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindGeoTIFF.cmake +104 -0
  462. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindHDF4.cmake +133 -0
  463. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindHDFS.cmake +54 -0
  464. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindIDB.cmake +45 -0
  465. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindIconv.cmake +145 -0
  466. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindJSONC.cmake +48 -0
  467. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindKDU.cmake +105 -0
  468. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindLERC.cmake +46 -0
  469. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindLZ4.cmake +130 -0
  470. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindLibKML.cmake +134 -0
  471. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindMONGOCXX.cmake +56 -0
  472. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindMRSID.cmake +66 -0
  473. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindMSSQL_NCLI.cmake +86 -0
  474. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindMSSQL_ODBC.cmake +113 -0
  475. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindMySQL.cmake +83 -0
  476. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindNetCDF.cmake +209 -0
  477. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindODBC.cmake +259 -0
  478. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindODBCCPP.cmake +72 -0
  479. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindOpenCAD.cmake +97 -0
  480. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindOpenEXR.cmake +125 -0
  481. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindOpenJPEG.cmake +124 -0
  482. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindOracle.cmake +230 -0
  483. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindPCRE.cmake +28 -0
  484. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindPCRE2.cmake +27 -0
  485. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindPROJ.cmake +91 -0
  486. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindPodofo.cmake +94 -0
  487. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindPoppler.cmake +182 -0
  488. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindQHULL.cmake +44 -0
  489. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindRASTERLITE2.cmake +85 -0
  490. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindSFCGAL.cmake +87 -0
  491. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindSPATIALITE.cmake +74 -0
  492. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindSQLite3.cmake +208 -0
  493. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindShapelib.cmake +69 -0
  494. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindSpatialindex.cmake +18 -0
  495. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindTEIGHA.cmake +242 -0
  496. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindWebP.cmake +38 -0
  497. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindZSTD.cmake +95 -0
  498. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/Findmuparser.cmake +53 -0
  499. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/thirdparty/DotnetImports.props.in +7 -0
  500. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/thirdparty/FindCSharp.cmake +72 -0
  501. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/thirdparty/FindDotnet.cmake +496 -0
  502. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/thirdparty/FindInt128.cmake +65 -0
  503. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/thirdparty/FindMono.cmake +163 -0
  504. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/thirdparty/GetGitHeadDate.cmake +33 -0
  505. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/thirdparty/GetGitRevisionDescription.cmake +181 -0
  506. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/thirdparty/GetGitRevisionDescription.cmake.in +50 -0
  507. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/thirdparty/OSXInstallDirs.cmake +214 -0
  508. package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/thirdparty/SystemSummary.cmake +89 -0
  509. package/dist/prebuilt/wasm-wasm32-st-release/lib/gdalplugins/drivers.ini +285 -0
  510. package/dist/prebuilt/wasm-wasm32-st-release/lib/libgdal.a +0 -0
  511. package/dist/prebuilt/wasm-wasm32-st-release/lib/pkgconfig/gdal.pc +17 -0
  512. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/GDALLogoBW.svg +138 -0
  513. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/GDALLogoColor.svg +126 -0
  514. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/GDALLogoGS.svg +126 -0
  515. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/LICENSE.TXT +467 -0
  516. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/MM_m_idofic.csv +320 -0
  517. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/cubewerx_extra.wkt +48 -0
  518. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/default.rsc +0 -0
  519. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/ecw_cs.wkt +1453 -0
  520. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/eedaconf.json +23 -0
  521. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/epsg.wkt +1 -0
  522. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/esri_StatePlane_extra.wkt +631 -0
  523. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/gdal_algorithm.schema.json +240 -0
  524. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/gdalg.schema.json +36 -0
  525. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/gdalicon.png +0 -0
  526. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/gdalinfo_output.schema.json +390 -0
  527. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/gdalmdiminfo_output.schema.json +393 -0
  528. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/gdaltileindex.xsd +264 -0
  529. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/gdalvrt.xsd +948 -0
  530. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/gfs.xsd +246 -0
  531. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/gml_registry.xml +117 -0
  532. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/gml_registry.xsd +66 -0
  533. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_center.csv +251 -0
  534. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_process.csv +102 -0
  535. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_subcenter.csv +63 -0
  536. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_0.csv +261 -0
  537. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_1.csv +261 -0
  538. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_13.csv +261 -0
  539. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_14.csv +261 -0
  540. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_15.csv +261 -0
  541. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_16.csv +261 -0
  542. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_17.csv +261 -0
  543. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_18.csv +261 -0
  544. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_19.csv +261 -0
  545. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_190.csv +261 -0
  546. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_191.csv +261 -0
  547. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_2.csv +261 -0
  548. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_20.csv +261 -0
  549. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_21.csv +261 -0
  550. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_22.csv +261 -0
  551. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_3.csv +261 -0
  552. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_4.csv +261 -0
  553. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_5.csv +261 -0
  554. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_6.csv +261 -0
  555. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_7.csv +261 -0
  556. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_10_0.csv +261 -0
  557. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_10_1.csv +261 -0
  558. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_10_191.csv +261 -0
  559. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_10_2.csv +261 -0
  560. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_10_3.csv +261 -0
  561. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_10_4.csv +261 -0
  562. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_1_0.csv +261 -0
  563. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_1_1.csv +261 -0
  564. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_1_2.csv +261 -0
  565. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_20_0.csv +261 -0
  566. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_20_1.csv +261 -0
  567. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_20_2.csv +261 -0
  568. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_20_3.csv +261 -0
  569. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_2_0.csv +261 -0
  570. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_2_3.csv +261 -0
  571. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_2_4.csv +261 -0
  572. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_2_5.csv +261 -0
  573. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_2_6.csv +261 -0
  574. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_2_7.csv +261 -0
  575. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_3_0.csv +261 -0
  576. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_3_1.csv +261 -0
  577. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_3_2.csv +243 -0
  578. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_3_3.csv +261 -0
  579. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_3_4.csv +261 -0
  580. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_3_5.csv +261 -0
  581. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_3_6.csv +261 -0
  582. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_4_0.csv +261 -0
  583. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_4_1.csv +261 -0
  584. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_4_10.csv +261 -0
  585. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_4_2.csv +261 -0
  586. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_4_3.csv +261 -0
  587. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_4_4.csv +261 -0
  588. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_4_5.csv +261 -0
  589. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_4_6.csv +261 -0
  590. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_4_7.csv +261 -0
  591. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_4_8.csv +261 -0
  592. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_4_9.csv +261 -0
  593. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_local_Canada.csv +5 -0
  594. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_local_HPC.csv +2 -0
  595. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_local_MRMS.csv +175 -0
  596. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_local_NCEP.csv +401 -0
  597. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_local_NDFD.csv +38 -0
  598. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_local_index.csv +7 -0
  599. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_5.csv +261 -0
  600. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_versions.csv +3 -0
  601. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/gt_datum.csv +229 -0
  602. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/gt_ellips.csv +24 -0
  603. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/header.dxf +1138 -0
  604. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/inspire_cp_BasicPropertyUnit.gfs +57 -0
  605. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/inspire_cp_CadastralBoundary.gfs +60 -0
  606. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/inspire_cp_CadastralParcel.gfs +81 -0
  607. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/inspire_cp_CadastralZoning.gfs +161 -0
  608. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_AdmArea.gfs +59 -0
  609. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_AdmBdry.gfs +49 -0
  610. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_AdmPt.gfs +59 -0
  611. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_BldA.gfs +54 -0
  612. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_BldL.gfs +54 -0
  613. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_Cntr.gfs +54 -0
  614. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_CommBdry.gfs +49 -0
  615. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_CommPt.gfs +59 -0
  616. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_Cstline.gfs +54 -0
  617. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_ElevPt.gfs +54 -0
  618. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_GCP.gfs +94 -0
  619. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_LeveeEdge.gfs +49 -0
  620. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_RailCL.gfs +54 -0
  621. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_RdASL.gfs +44 -0
  622. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_RdArea.gfs +54 -0
  623. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_RdCompt.gfs +59 -0
  624. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_RdEdg.gfs +59 -0
  625. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_RdMgtBdry.gfs +49 -0
  626. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_RdSgmtA.gfs +59 -0
  627. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_RvrMgtBdry.gfs +49 -0
  628. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_SBAPt.gfs +49 -0
  629. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_SBArea.gfs +54 -0
  630. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_SBBdry.gfs +44 -0
  631. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_WA.gfs +54 -0
  632. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_WL.gfs +54 -0
  633. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_WStrA.gfs +54 -0
  634. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_WStrL.gfs +54 -0
  635. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/leaflet_template.html +102 -0
  636. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/nitf_spec.xml +3508 -0
  637. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/nitf_spec.xsd +178 -0
  638. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/ogr_fields_override.schema.json +278 -0
  639. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/ogrinfo_output.schema.json +532 -0
  640. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/ogrvrt.xsd +526 -0
  641. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/osmconf.ini +134 -0
  642. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/ozi_datum.csv +131 -0
  643. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/ozi_ellips.csv +35 -0
  644. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/pci_datum.txt +530 -0
  645. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/pci_ellips.txt +129 -0
  646. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/pdfcomposition.xsd +703 -0
  647. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/plscenesconf.json +1985 -0
  648. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/ruian_vf_ob_v1.gfs +1455 -0
  649. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/ruian_vf_st_uvoh_v1.gfs +86 -0
  650. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/ruian_vf_st_v1.gfs +1489 -0
  651. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/ruian_vf_v1.gfs +2126 -0
  652. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/s57agencies.csv +249 -0
  653. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/s57attributes.csv +484 -0
  654. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/s57expectedinput.csv +1008 -0
  655. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/s57objectclasses.csv +287 -0
  656. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/seed_2d.dgn +0 -0
  657. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/seed_3d.dgn +0 -0
  658. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/stateplane.csv +259 -0
  659. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/template_tiles.mapml +26 -0
  660. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/tms_LINZAntarticaMapTileGrid.json +190 -0
  661. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/tms_MapML_APSTILE.json +268 -0
  662. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/tms_MapML_CBMTILE.json +346 -0
  663. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/tms_NZTM2000.json +243 -0
  664. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/trailer.dxf +434 -0
  665. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/vdv452.xml +349 -0
  666. package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/vdv452.xsd +45 -0
  667. package/package.json +49 -0
@@ -0,0 +1,1516 @@
1
+ /******************************************************************************
2
+ *
3
+ * Project: GDAL Core
4
+ * Purpose: Inline C++ templates
5
+ * Author: Phil Vachon, <philippe at cowpig.ca>
6
+ *
7
+ ******************************************************************************
8
+ * Copyright (c) 2009, Phil Vachon, <philippe at cowpig.ca>
9
+ * Copyright (c) 2025, Even Rouault, <even.rouault at spatialys.com>
10
+ *
11
+ * SPDX-License-Identifier: MIT
12
+ ****************************************************************************/
13
+
14
+ #ifndef GDAL_PRIV_TEMPLATES_HPP_INCLUDED
15
+ #define GDAL_PRIV_TEMPLATES_HPP_INCLUDED
16
+
17
+ #include "cpl_port.h"
18
+
19
+ #include <algorithm>
20
+ #include <cmath>
21
+ #include <cstdint>
22
+ #include <limits>
23
+ #include <type_traits>
24
+
25
+ #include "cpl_float.h"
26
+
27
+ // Needs SSE2
28
+ #if defined(__x86_64) || defined(_M_X64) || defined(USE_SSE2) || \
29
+ defined(USE_NEON_OPTIMIZATIONS)
30
+
31
+ #ifdef USE_NEON_OPTIMIZATIONS
32
+ #include "include_sse2neon.h"
33
+ #else
34
+ #include <immintrin.h>
35
+ #endif
36
+
37
+ static inline void GDALCopyXMMToInt32(const __m128i xmm, void *pDest)
38
+ {
39
+ int n32 = _mm_cvtsi128_si32(xmm); // Extract lower 32 bit word
40
+ memcpy(pDest, &n32, sizeof(n32));
41
+ }
42
+
43
+ static inline void GDALCopyXMMToInt64(const __m128i xmm, void *pDest)
44
+ {
45
+ _mm_storel_epi64(reinterpret_cast<__m128i *>(pDest), xmm);
46
+ }
47
+
48
+ #if __SSSE3__
49
+ #include <tmmintrin.h>
50
+ #endif
51
+
52
+ #if defined(__SSE4_1__) || defined(__AVX__)
53
+ #include <smmintrin.h>
54
+ #endif
55
+
56
+ #ifdef __F16C__
57
+ #include <immintrin.h>
58
+ #endif
59
+
60
+ #endif
61
+
62
+ /************************************************************************/
63
+ /* GDALGetDataLimits() */
64
+ /************************************************************************/
65
+ /**
66
+ * Compute the limits of values that can be placed in Tout in terms of
67
+ * Tin. Usually used for output clamping, when the output data type's
68
+ * limits are stable relative to the input type (i.e. no roundoff error).
69
+ *
70
+ * @param tMaxValue the returned maximum value
71
+ * @param tMinValue the returned minimum value
72
+ */
73
+
74
+ template <class Tin, class Tout>
75
+ inline void GDALGetDataLimits(Tin &tMaxValue, Tin &tMinValue)
76
+ {
77
+ tMaxValue = cpl::NumericLimits<Tin>::max();
78
+ tMinValue = cpl::NumericLimits<Tin>::lowest();
79
+
80
+ // Compute the actual minimum value of Tout in terms of Tin.
81
+ if constexpr (cpl::NumericLimits<Tout>::is_signed &&
82
+ cpl::NumericLimits<Tout>::is_integer)
83
+ {
84
+ // the minimum value is less than zero
85
+ // cppcheck-suppress knownConditionTrueFalse
86
+ if constexpr (cpl::NumericLimits<Tout>::digits <
87
+ cpl::NumericLimits<Tin>::digits ||
88
+ !cpl::NumericLimits<Tin>::is_integer)
89
+ {
90
+ // Tout is smaller than Tin, so we need to clamp values in input
91
+ // to the range of Tout's min/max values
92
+ if constexpr (cpl::NumericLimits<Tin>::is_signed)
93
+ {
94
+ tMinValue =
95
+ static_cast<Tin>(cpl::NumericLimits<Tout>::lowest());
96
+ }
97
+ tMaxValue = static_cast<Tin>(cpl::NumericLimits<Tout>::max());
98
+ }
99
+ }
100
+ else if constexpr (cpl::NumericLimits<Tout>::is_integer)
101
+ {
102
+ // the output is unsigned, so we just need to determine the max
103
+ if constexpr (!std::is_same_v<Tin, Tout> &&
104
+ cpl::NumericLimits<Tout>::digits <=
105
+ cpl::NumericLimits<Tin>::digits)
106
+ {
107
+ // Tout is smaller than Tin, so we need to clamp the input values
108
+ // to the range of Tout's max
109
+ tMaxValue = static_cast<Tin>(cpl::NumericLimits<Tout>::max());
110
+ }
111
+ tMinValue = 0;
112
+ }
113
+ }
114
+
115
+ /************************************************************************/
116
+ /* GDALClampValue() */
117
+ /************************************************************************/
118
+ /**
119
+ * Clamp values of type T to a specified range
120
+ *
121
+ * @param tValue the value
122
+ * @param tMax the max value
123
+ * @param tMin the min value
124
+ */
125
+ template <class T>
126
+ inline T GDALClampValue(const T tValue, const T tMax, const T tMin)
127
+ {
128
+ return tValue > tMax ? tMax : tValue < tMin ? tMin : tValue;
129
+ }
130
+
131
+ /************************************************************************/
132
+ /* GDALClampDoubleValue() */
133
+ /************************************************************************/
134
+ /**
135
+ * Clamp double values to a specified range, this uses the same
136
+ * argument ordering as std::clamp, returns TRUE if the value was clamped.
137
+ *
138
+ * @param tValue the value
139
+ * @param tMin the min value
140
+ * @param tMax the max value
141
+ *
142
+ */
143
+ template <class T2, class T3>
144
+ inline bool GDALClampDoubleValue(double &tValue, const T2 tMin, const T3 tMax)
145
+ {
146
+ const double tMin2{static_cast<double>(tMin)};
147
+ const double tMax2{static_cast<double>(tMax)};
148
+ if (tValue > tMax2 || tValue < tMin2)
149
+ {
150
+ tValue = tValue > tMax2 ? tMax2 : tValue < tMin2 ? tMin2 : tValue;
151
+ return true;
152
+ }
153
+ else
154
+ {
155
+ return false;
156
+ }
157
+ }
158
+
159
+ /************************************************************************/
160
+ /* GDALClampValueToType() */
161
+ /************************************************************************/
162
+ /**
163
+ * Clamp a value of type T to the limits of type TClamped.
164
+ *
165
+ * @param tValue the value
166
+ */
167
+ template <class T, class TClamped> inline T GDALClampValueToType(T tValue)
168
+ {
169
+ T tMaxValue, tMinValue;
170
+ GDALGetDataLimits<T, TClamped>(tMaxValue, tMinValue);
171
+ return std::clamp(tValue, tMinValue, tMaxValue);
172
+ }
173
+
174
+ /************************************************************************/
175
+ /* GDALIsValueInRange() */
176
+ /************************************************************************/
177
+ /**
178
+ * Returns whether a value is in the type range.
179
+ * NaN is considered not to be in type range.
180
+ *
181
+ * @param dfValue the value
182
+ * @return whether the value is in the type range.
183
+ */
184
+ template <class T> inline bool GDALIsValueInRange(double dfValue)
185
+ {
186
+ return dfValue >= static_cast<double>(cpl::NumericLimits<T>::lowest()) &&
187
+ dfValue <= static_cast<double>(cpl::NumericLimits<T>::max());
188
+ }
189
+
190
+ template <> inline bool GDALIsValueInRange<double>(double dfValue)
191
+ {
192
+ return !CPLIsNan(dfValue);
193
+ }
194
+
195
+ template <> inline bool GDALIsValueInRange<float>(double dfValue)
196
+ {
197
+ return CPLIsInf(dfValue) ||
198
+ (dfValue >=
199
+ -static_cast<double>(std::numeric_limits<float>::max()) &&
200
+ dfValue <= static_cast<double>(std::numeric_limits<float>::max()));
201
+ }
202
+
203
+ template <> inline bool GDALIsValueInRange<GFloat16>(double dfValue)
204
+ {
205
+ return CPLIsInf(dfValue) ||
206
+ (dfValue >= -cpl::NumericLimits<GFloat16>::max() &&
207
+ dfValue <= cpl::NumericLimits<GFloat16>::max());
208
+ }
209
+
210
+ template <> inline bool GDALIsValueInRange<int64_t>(double dfValue)
211
+ {
212
+ // Values in the range [INT64_MAX - 1023, INT64_MAX - 1]
213
+ // get converted to a double that once cast to int64_t is
214
+ // INT64_MAX + 1, hence the < strict comparison.
215
+ return dfValue >=
216
+ static_cast<double>(cpl::NumericLimits<int64_t>::lowest()) &&
217
+ dfValue < static_cast<double>(cpl::NumericLimits<int64_t>::max());
218
+ }
219
+
220
+ template <> inline bool GDALIsValueInRange<uint64_t>(double dfValue)
221
+ {
222
+ // Values in the range [UINT64_MAX - 2047, UINT64_MAX - 1]
223
+ // get converted to a double that once cast to uint64_t is
224
+ // UINT64_MAX + 1, hence the < strict comparison.
225
+ return dfValue >= 0 &&
226
+ dfValue < static_cast<double>(cpl::NumericLimits<uint64_t>::max());
227
+ }
228
+
229
+ /************************************************************************/
230
+ /* GDALIsValueExactAs() */
231
+ /************************************************************************/
232
+ /**
233
+ * Returns whether a value can be exactly represented on type T.
234
+ *
235
+ * That is static_cast\<double\>(static_cast\<T\>(dfValue)) is legal and is
236
+ * equal to dfValue.
237
+ *
238
+ * Note: for T=float or double, a NaN input leads to true
239
+ *
240
+ * @param dfValue the value
241
+ * @return whether the value can be exactly represented on type T.
242
+ */
243
+ template <class T> inline bool GDALIsValueExactAs(double dfValue)
244
+ {
245
+ return GDALIsValueInRange<T>(dfValue) &&
246
+ static_cast<double>(static_cast<T>(dfValue)) == dfValue;
247
+ }
248
+
249
+ template <> inline bool GDALIsValueExactAs<float>(double dfValue)
250
+ {
251
+ return CPLIsNan(dfValue) ||
252
+ (GDALIsValueInRange<float>(dfValue) &&
253
+ static_cast<double>(static_cast<float>(dfValue)) == dfValue);
254
+ }
255
+
256
+ template <> inline bool GDALIsValueExactAs<GFloat16>(double dfValue)
257
+ {
258
+ return CPLIsNan(dfValue) ||
259
+ (GDALIsValueInRange<GFloat16>(dfValue) &&
260
+ static_cast<double>(static_cast<GFloat16>(dfValue)) == dfValue);
261
+ }
262
+
263
+ template <> inline bool GDALIsValueExactAs<double>(double)
264
+ {
265
+ return true;
266
+ }
267
+
268
+ /************************************************************************/
269
+ /* GDALCopyWord() */
270
+ /************************************************************************/
271
+
272
+ // Integer input and output: clamp the input
273
+
274
+ template <class Tin, class Tout> struct sGDALCopyWord
275
+ {
276
+ static inline void f(const Tin tValueIn, Tout &tValueOut)
277
+ {
278
+ Tin tMaxVal, tMinVal;
279
+ GDALGetDataLimits<Tin, Tout>(tMaxVal, tMinVal);
280
+ tValueOut =
281
+ static_cast<Tout>(GDALClampValue(tValueIn, tMaxVal, tMinVal));
282
+ }
283
+ };
284
+
285
+ // Integer input and floating point output: simply convert
286
+
287
+ template <class Tin> struct sGDALCopyWord<Tin, GFloat16>
288
+ {
289
+ static inline void f(const Tin tValueIn, GFloat16 &hfValueOut)
290
+ {
291
+ hfValueOut = static_cast<GFloat16>(tValueIn);
292
+ }
293
+ };
294
+
295
+ template <class Tin> struct sGDALCopyWord<Tin, float>
296
+ {
297
+ static inline void f(const Tin tValueIn, float &fValueOut)
298
+ {
299
+ fValueOut = static_cast<float>(tValueIn);
300
+ }
301
+ };
302
+
303
+ template <class Tin> struct sGDALCopyWord<Tin, double>
304
+ {
305
+ static inline void f(const Tin tValueIn, double &dfValueOut)
306
+ {
307
+ dfValueOut = static_cast<double>(tValueIn);
308
+ }
309
+ };
310
+
311
+ // Floating point input and output, converting between identical types: simply copy
312
+
313
+ template <> struct sGDALCopyWord<GFloat16, GFloat16>
314
+ {
315
+ static inline void f(const GFloat16 hfValueIn, GFloat16 &hfValueOut)
316
+ {
317
+ hfValueOut = hfValueIn;
318
+ }
319
+ };
320
+
321
+ template <> struct sGDALCopyWord<float, float>
322
+ {
323
+ static inline void f(const float fValueIn, float &fValueOut)
324
+ {
325
+ fValueOut = fValueIn;
326
+ }
327
+ };
328
+
329
+ template <> struct sGDALCopyWord<double, double>
330
+ {
331
+ static inline void f(const double dfValueIn, double &dfValueOut)
332
+ {
333
+ dfValueOut = dfValueIn;
334
+ }
335
+ };
336
+
337
+ // Floating point input and output, converting to a larger type: use implicit conversion
338
+
339
+ template <> struct sGDALCopyWord<GFloat16, float>
340
+ {
341
+ static inline void f(const GFloat16 hfValueIn, float &dfValueOut)
342
+ {
343
+ dfValueOut = hfValueIn;
344
+ }
345
+ };
346
+
347
+ template <> struct sGDALCopyWord<GFloat16, double>
348
+ {
349
+ static inline void f(const GFloat16 hfValueIn, double &dfValueOut)
350
+ {
351
+ dfValueOut = hfValueIn;
352
+ }
353
+ };
354
+
355
+ template <> struct sGDALCopyWord<float, double>
356
+ {
357
+ static inline void f(const float fValueIn, double &dfValueOut)
358
+ {
359
+ dfValueOut = static_cast<double>(fValueIn);
360
+ }
361
+ };
362
+
363
+ // Floating point input and out, converting to a smaller type: ensure overflow results in infinity
364
+
365
+ template <> struct sGDALCopyWord<float, GFloat16>
366
+ {
367
+ static inline void f(const float fValueIn, GFloat16 &hfValueOut)
368
+ {
369
+ // Our custom implementation when std::float16_t is not
370
+ // available ensures proper behavior.
371
+ #if !defined(HAVE_STD_FLOAT16_T)
372
+ if (fValueIn > cpl::NumericLimits<GFloat16>::max())
373
+ {
374
+ hfValueOut = cpl::NumericLimits<GFloat16>::infinity();
375
+ return;
376
+ }
377
+ if (fValueIn < -cpl::NumericLimits<GFloat16>::max())
378
+ {
379
+ hfValueOut = -cpl::NumericLimits<GFloat16>::infinity();
380
+ return;
381
+ }
382
+ #endif
383
+ hfValueOut = static_cast<GFloat16>(fValueIn);
384
+ }
385
+ };
386
+
387
+ template <> struct sGDALCopyWord<double, GFloat16>
388
+ {
389
+ static inline void f(const double dfValueIn, GFloat16 &hfValueOut)
390
+ {
391
+ // Our custom implementation when std::float16_t is not
392
+ // available ensures proper behavior.
393
+ #if !defined(HAVE_STD_FLOAT16_T)
394
+ if (dfValueIn > cpl::NumericLimits<GFloat16>::max())
395
+ {
396
+ hfValueOut = cpl::NumericLimits<GFloat16>::infinity();
397
+ return;
398
+ }
399
+ if (dfValueIn < -cpl::NumericLimits<GFloat16>::max())
400
+ {
401
+ hfValueOut = -cpl::NumericLimits<GFloat16>::infinity();
402
+ return;
403
+ }
404
+ #endif
405
+ hfValueOut = static_cast<GFloat16>(dfValueIn);
406
+ }
407
+ };
408
+
409
+ template <> struct sGDALCopyWord<double, float>
410
+ {
411
+ static inline void f(const double dfValueIn, float &fValueOut)
412
+ {
413
+ #if defined(__x86_64) || defined(_M_X64) || defined(USE_SSE2)
414
+ // We could just write fValueOut = static_cast<float>(dfValueIn);
415
+ // but a sanitizer might complain with values above FLT_MAX
416
+ _mm_store_ss(&fValueOut,
417
+ _mm_cvtsd_ss(_mm_undefined_ps(), _mm_load_sd(&dfValueIn)));
418
+ #else
419
+ if (dfValueIn > static_cast<double>(std::numeric_limits<float>::max()))
420
+ {
421
+ fValueOut = std::numeric_limits<float>::infinity();
422
+ return;
423
+ }
424
+ if (dfValueIn < static_cast<double>(-std::numeric_limits<float>::max()))
425
+ {
426
+ fValueOut = -std::numeric_limits<float>::infinity();
427
+ return;
428
+ }
429
+
430
+ fValueOut = static_cast<float>(dfValueIn);
431
+ #endif
432
+ }
433
+ };
434
+
435
+ // Floating point input to a small unsigned integer type: nan becomes zero, otherwise round and clamp
436
+
437
+ template <class Tout> struct sGDALCopyWord<GFloat16, Tout>
438
+ {
439
+ static inline void f(const GFloat16 hfValueIn, Tout &tValueOut)
440
+ {
441
+ if (CPLIsNan(hfValueIn))
442
+ {
443
+ tValueOut = 0;
444
+ return;
445
+ }
446
+ GFloat16 hfMaxVal, hfMinVal;
447
+ GDALGetDataLimits<GFloat16, Tout>(hfMaxVal, hfMinVal);
448
+ tValueOut = static_cast<Tout>(
449
+ GDALClampValue(hfValueIn + GFloat16(0.5f), hfMaxVal, hfMinVal));
450
+ }
451
+ };
452
+
453
+ template <class Tout> struct sGDALCopyWord<float, Tout>
454
+ {
455
+ static inline void f(const float fValueIn, Tout &tValueOut)
456
+ {
457
+ if (CPLIsNan(fValueIn))
458
+ {
459
+ tValueOut = 0;
460
+ return;
461
+ }
462
+ float fMaxVal, fMinVal;
463
+ GDALGetDataLimits<float, Tout>(fMaxVal, fMinVal);
464
+ tValueOut = static_cast<Tout>(
465
+ GDALClampValue(fValueIn + 0.5f, fMaxVal, fMinVal));
466
+ }
467
+ };
468
+
469
+ template <class Tout> struct sGDALCopyWord<double, Tout>
470
+ {
471
+ static inline void f(const double dfValueIn, Tout &tValueOut)
472
+ {
473
+ if (CPLIsNan(dfValueIn))
474
+ {
475
+ tValueOut = 0;
476
+ return;
477
+ }
478
+ double dfMaxVal, dfMinVal;
479
+ GDALGetDataLimits<double, Tout>(dfMaxVal, dfMinVal);
480
+ tValueOut = static_cast<Tout>(
481
+ GDALClampValue(dfValueIn + 0.5, dfMaxVal, dfMinVal));
482
+ }
483
+ };
484
+
485
+ // Floating point input to a large unsigned integer type: nan becomes zero, otherwise round and clamp.
486
+ // Avoid roundoff while clamping.
487
+
488
+ template <> struct sGDALCopyWord<GFloat16, std::uint64_t>
489
+ {
490
+ static inline void f(const GFloat16 hfValueIn, std::uint64_t &nValueOut)
491
+ {
492
+ if (!(hfValueIn > 0))
493
+ {
494
+ nValueOut = 0;
495
+ }
496
+ else if (CPLIsInf(hfValueIn))
497
+ {
498
+ nValueOut = cpl::NumericLimits<std::uint64_t>::max();
499
+ }
500
+ else
501
+ {
502
+ nValueOut = static_cast<std::uint64_t>(hfValueIn + GFloat16(0.5f));
503
+ }
504
+ }
505
+ };
506
+
507
+ template <> struct sGDALCopyWord<float, unsigned int>
508
+ {
509
+ static inline void f(const float fValueIn, unsigned int &nValueOut)
510
+ {
511
+ if (!(fValueIn > 0))
512
+ {
513
+ nValueOut = 0;
514
+ }
515
+ else if (fValueIn >=
516
+ static_cast<float>(cpl::NumericLimits<unsigned int>::max()))
517
+ {
518
+ nValueOut = cpl::NumericLimits<unsigned int>::max();
519
+ }
520
+ else
521
+ {
522
+ nValueOut = static_cast<unsigned int>(fValueIn + 0.5f);
523
+ }
524
+ }
525
+ };
526
+
527
+ template <> struct sGDALCopyWord<float, std::uint64_t>
528
+ {
529
+ static inline void f(const float fValueIn, std::uint64_t &nValueOut)
530
+ {
531
+ if (!(fValueIn > 0))
532
+ {
533
+ nValueOut = 0;
534
+ }
535
+ else if (fValueIn >=
536
+ static_cast<float>(cpl::NumericLimits<std::uint64_t>::max()))
537
+ {
538
+ nValueOut = cpl::NumericLimits<std::uint64_t>::max();
539
+ }
540
+ else
541
+ {
542
+ nValueOut = static_cast<std::uint64_t>(fValueIn + 0.5f);
543
+ }
544
+ }
545
+ };
546
+
547
+ template <> struct sGDALCopyWord<double, std::uint64_t>
548
+ {
549
+ static inline void f(const double dfValueIn, std::uint64_t &nValueOut)
550
+ {
551
+ if (!(dfValueIn > 0))
552
+ {
553
+ nValueOut = 0;
554
+ }
555
+ else if (dfValueIn >
556
+ static_cast<double>(cpl::NumericLimits<uint64_t>::max()))
557
+ {
558
+ nValueOut = cpl::NumericLimits<uint64_t>::max();
559
+ }
560
+ else
561
+ {
562
+ nValueOut = static_cast<std::uint64_t>(dfValueIn + 0.5);
563
+ }
564
+ }
565
+ };
566
+
567
+ // Floating point input to a very large unsigned integer type: nan becomes zero, otherwise round and clamp.
568
+ // Avoid infinity while clamping when the maximum integer is too large for the floating-point type.
569
+ // Avoid roundoff while clamping.
570
+
571
+ template <> struct sGDALCopyWord<GFloat16, unsigned short>
572
+ {
573
+ static inline void f(const GFloat16 hfValueIn, unsigned short &nValueOut)
574
+ {
575
+ if (!(hfValueIn > 0))
576
+ {
577
+ nValueOut = 0;
578
+ }
579
+ else if (CPLIsInf(hfValueIn))
580
+ {
581
+ nValueOut = cpl::NumericLimits<unsigned short>::max();
582
+ }
583
+ else
584
+ {
585
+ nValueOut = static_cast<unsigned short>(hfValueIn + GFloat16(0.5f));
586
+ }
587
+ }
588
+ };
589
+
590
+ template <> struct sGDALCopyWord<GFloat16, unsigned int>
591
+ {
592
+ static inline void f(const GFloat16 hfValueIn, unsigned int &nValueOut)
593
+ {
594
+ if (!(hfValueIn > 0))
595
+ {
596
+ nValueOut = 0;
597
+ }
598
+ else if (CPLIsInf(hfValueIn))
599
+ {
600
+ nValueOut = cpl::NumericLimits<unsigned int>::max();
601
+ }
602
+ else
603
+ {
604
+ nValueOut = static_cast<unsigned int>(hfValueIn + GFloat16(0.5f));
605
+ }
606
+ }
607
+ };
608
+
609
+ // Floating point input to a small signed integer type: nan becomes zero, otherwise round and clamp.
610
+ // Rounding for signed integers is different than for the unsigned integers above.
611
+
612
+ template <> struct sGDALCopyWord<GFloat16, signed char>
613
+ {
614
+ static inline void f(const GFloat16 hfValueIn, signed char &nValueOut)
615
+ {
616
+ if (CPLIsNan(hfValueIn))
617
+ {
618
+ nValueOut = 0;
619
+ return;
620
+ }
621
+ GFloat16 hfMaxVal, hfMinVal;
622
+ GDALGetDataLimits<GFloat16, signed char>(hfMaxVal, hfMinVal);
623
+ GFloat16 hfValue = hfValueIn >= GFloat16(0.0f)
624
+ ? hfValueIn + GFloat16(0.5f)
625
+ : hfValueIn - GFloat16(0.5f);
626
+ nValueOut = static_cast<signed char>(
627
+ GDALClampValue(hfValue, hfMaxVal, hfMinVal));
628
+ }
629
+ };
630
+
631
+ template <> struct sGDALCopyWord<float, signed char>
632
+ {
633
+ static inline void f(const float fValueIn, signed char &nValueOut)
634
+ {
635
+ if (CPLIsNan(fValueIn))
636
+ {
637
+ nValueOut = 0;
638
+ return;
639
+ }
640
+ float fMaxVal, fMinVal;
641
+ GDALGetDataLimits<float, signed char>(fMaxVal, fMinVal);
642
+ float fValue = fValueIn >= 0.0f ? fValueIn + 0.5f : fValueIn - 0.5f;
643
+ nValueOut =
644
+ static_cast<signed char>(GDALClampValue(fValue, fMaxVal, fMinVal));
645
+ }
646
+ };
647
+
648
+ template <> struct sGDALCopyWord<float, short>
649
+ {
650
+ static inline void f(const float fValueIn, short &nValueOut)
651
+ {
652
+ if (CPLIsNan(fValueIn))
653
+ {
654
+ nValueOut = 0;
655
+ return;
656
+ }
657
+ float fMaxVal, fMinVal;
658
+ GDALGetDataLimits<float, short>(fMaxVal, fMinVal);
659
+ float fValue = fValueIn >= 0.0f ? fValueIn + 0.5f : fValueIn - 0.5f;
660
+ nValueOut =
661
+ static_cast<short>(GDALClampValue(fValue, fMaxVal, fMinVal));
662
+ }
663
+ };
664
+
665
+ template <> struct sGDALCopyWord<double, signed char>
666
+ {
667
+ static inline void f(const double dfValueIn, signed char &nValueOut)
668
+ {
669
+ if (CPLIsNan(dfValueIn))
670
+ {
671
+ nValueOut = 0;
672
+ return;
673
+ }
674
+ double dfMaxVal, dfMinVal;
675
+ GDALGetDataLimits<double, signed char>(dfMaxVal, dfMinVal);
676
+ double dfValue = dfValueIn > 0.0 ? dfValueIn + 0.5 : dfValueIn - 0.5;
677
+ nValueOut = static_cast<signed char>(
678
+ GDALClampValue(dfValue, dfMaxVal, dfMinVal));
679
+ }
680
+ };
681
+
682
+ template <> struct sGDALCopyWord<double, short>
683
+ {
684
+ static inline void f(const double dfValueIn, short &nValueOut)
685
+ {
686
+ if (CPLIsNan(dfValueIn))
687
+ {
688
+ nValueOut = 0;
689
+ return;
690
+ }
691
+ double dfMaxVal, dfMinVal;
692
+ GDALGetDataLimits<double, short>(dfMaxVal, dfMinVal);
693
+ double dfValue = dfValueIn > 0.0 ? dfValueIn + 0.5 : dfValueIn - 0.5;
694
+ nValueOut =
695
+ static_cast<short>(GDALClampValue(dfValue, dfMaxVal, dfMinVal));
696
+ }
697
+ };
698
+
699
+ template <> struct sGDALCopyWord<double, int>
700
+ {
701
+ static inline void f(const double dfValueIn, int &nValueOut)
702
+ {
703
+ if (CPLIsNan(dfValueIn))
704
+ {
705
+ nValueOut = 0;
706
+ return;
707
+ }
708
+ double dfMaxVal, dfMinVal;
709
+ GDALGetDataLimits<double, int>(dfMaxVal, dfMinVal);
710
+ double dfValue = dfValueIn >= 0.0 ? dfValueIn + 0.5 : dfValueIn - 0.5;
711
+ nValueOut =
712
+ static_cast<int>(GDALClampValue(dfValue, dfMaxVal, dfMinVal));
713
+ }
714
+ };
715
+
716
+ // Floating point input to a large signed integer type: nan becomes zero, otherwise round and clamp.
717
+ // Rounding for signed integers is different than for the unsigned integers above.
718
+ // Avoid roundoff while clamping.
719
+
720
+ template <> struct sGDALCopyWord<GFloat16, short>
721
+ {
722
+ static inline void f(const GFloat16 hfValueIn, short &nValueOut)
723
+ {
724
+ if (CPLIsNan(hfValueIn))
725
+ {
726
+ nValueOut = 0;
727
+ }
728
+ else if (hfValueIn >=
729
+ static_cast<GFloat16>(cpl::NumericLimits<short>::max()))
730
+ {
731
+ nValueOut = cpl::NumericLimits<short>::max();
732
+ }
733
+ else if (hfValueIn <=
734
+ static_cast<GFloat16>(cpl::NumericLimits<short>::lowest()))
735
+ {
736
+ nValueOut = cpl::NumericLimits<short>::lowest();
737
+ }
738
+ else
739
+ {
740
+ nValueOut = static_cast<short>(hfValueIn > GFloat16(0.0f)
741
+ ? hfValueIn + GFloat16(0.5f)
742
+ : hfValueIn - GFloat16(0.5f));
743
+ }
744
+ }
745
+ };
746
+
747
+ template <> struct sGDALCopyWord<float, int>
748
+ {
749
+ static inline void f(const float fValueIn, int &nValueOut)
750
+ {
751
+ if (CPLIsNan(fValueIn))
752
+ {
753
+ nValueOut = 0;
754
+ }
755
+ else if (fValueIn >= static_cast<float>(cpl::NumericLimits<int>::max()))
756
+ {
757
+ nValueOut = cpl::NumericLimits<int>::max();
758
+ }
759
+ else if (fValueIn <=
760
+ static_cast<float>(cpl::NumericLimits<int>::lowest()))
761
+ {
762
+ nValueOut = cpl::NumericLimits<int>::lowest();
763
+ }
764
+ else
765
+ {
766
+ nValueOut = static_cast<int>(fValueIn > 0.0f ? fValueIn + 0.5f
767
+ : fValueIn - 0.5f);
768
+ }
769
+ }
770
+ };
771
+
772
+ template <> struct sGDALCopyWord<float, std::int64_t>
773
+ {
774
+ static inline void f(const float fValueIn, std::int64_t &nValueOut)
775
+ {
776
+ if (CPLIsNan(fValueIn))
777
+ {
778
+ nValueOut = 0;
779
+ }
780
+ else if (fValueIn >=
781
+ static_cast<float>(cpl::NumericLimits<std::int64_t>::max()))
782
+ {
783
+ nValueOut = cpl::NumericLimits<std::int64_t>::max();
784
+ }
785
+ else if (fValueIn <=
786
+ static_cast<float>(cpl::NumericLimits<std::int64_t>::lowest()))
787
+ {
788
+ nValueOut = cpl::NumericLimits<std::int64_t>::lowest();
789
+ }
790
+ else
791
+ {
792
+ nValueOut = static_cast<std::int64_t>(
793
+ fValueIn > 0.0f ? fValueIn + 0.5f : fValueIn - 0.5f);
794
+ }
795
+ }
796
+ };
797
+
798
+ template <> struct sGDALCopyWord<double, std::int64_t>
799
+ {
800
+ static inline void f(const double dfValueIn, std::int64_t &nValueOut)
801
+ {
802
+ if (CPLIsNan(dfValueIn))
803
+ {
804
+ nValueOut = 0;
805
+ }
806
+ else if (dfValueIn >=
807
+ static_cast<double>(cpl::NumericLimits<std::int64_t>::max()))
808
+ {
809
+ nValueOut = cpl::NumericLimits<std::int64_t>::max();
810
+ }
811
+ else if (dfValueIn <=
812
+ static_cast<double>(cpl::NumericLimits<std::int64_t>::min()))
813
+ {
814
+ nValueOut = cpl::NumericLimits<std::int64_t>::min();
815
+ }
816
+ else
817
+ {
818
+ nValueOut = static_cast<std::int64_t>(
819
+ dfValueIn > 0.0 ? dfValueIn + 0.5 : dfValueIn - 0.5);
820
+ }
821
+ }
822
+ };
823
+
824
+ // Floating point input to a very large signed integer type: nan becomes zero, otherwise round and clamp.
825
+ // Rounding for signed integers is different than for the unsigned integers above.
826
+ // Avoid infinity while clamping when the maximum integer is too large for the floating-point type.
827
+ // Avoid roundoff while clamping.
828
+
829
+ template <> struct sGDALCopyWord<GFloat16, int>
830
+ {
831
+ static inline void f(const GFloat16 hfValueIn, int &nValueOut)
832
+ {
833
+ if (CPLIsNan(hfValueIn))
834
+ {
835
+ nValueOut = 0;
836
+ }
837
+ else if (CPLIsInf(hfValueIn))
838
+ {
839
+ nValueOut = hfValueIn > GFloat16(0.0f)
840
+ ? cpl::NumericLimits<int>::max()
841
+ : cpl::NumericLimits<int>::lowest();
842
+ }
843
+ else
844
+ {
845
+ nValueOut = static_cast<int>(hfValueIn > GFloat16(0.0f)
846
+ ? hfValueIn + GFloat16(0.5f)
847
+ : hfValueIn - GFloat16(0.5f));
848
+ }
849
+ }
850
+ };
851
+
852
+ template <> struct sGDALCopyWord<GFloat16, std::int64_t>
853
+ {
854
+ static inline void f(const GFloat16 hfValueIn, std::int64_t &nValueOut)
855
+ {
856
+ if (CPLIsNan(hfValueIn))
857
+ {
858
+ nValueOut = 0;
859
+ }
860
+ else if (CPLIsInf(hfValueIn))
861
+ {
862
+ nValueOut = hfValueIn > GFloat16(0.0f)
863
+ ? cpl::NumericLimits<std::int64_t>::max()
864
+ : cpl::NumericLimits<std::int64_t>::lowest();
865
+ }
866
+ else
867
+ {
868
+ nValueOut = static_cast<std::int64_t>(
869
+ hfValueIn > GFloat16(0.0f) ? hfValueIn + GFloat16(0.5f)
870
+ : hfValueIn - GFloat16(0.5f));
871
+ }
872
+ }
873
+ };
874
+
875
+ /**
876
+ * Copy a single word, optionally rounding if appropriate (i.e. going
877
+ * from the float to the integer case). Note that this is the function
878
+ * you should specialize if you're adding a new data type.
879
+ *
880
+ * @param tValueIn value of type Tin; the input value to be converted
881
+ * @param tValueOut value of type Tout; the output value
882
+ */
883
+
884
+ template <class Tin, class Tout>
885
+ inline void GDALCopyWord(const Tin tValueIn, Tout &tValueOut)
886
+ {
887
+ if constexpr (std::is_same<Tin, Tout>::value)
888
+ tValueOut = tValueIn;
889
+ else
890
+ sGDALCopyWord<Tin, Tout>::f(tValueIn, tValueOut);
891
+ }
892
+
893
+ /************************************************************************/
894
+ /* GDALCopy4Words() */
895
+ /************************************************************************/
896
+ /**
897
+ * Copy 4 packed words to 4 packed words, optionally rounding if appropriate
898
+ * (i.e. going from the float to the integer case).
899
+ *
900
+ * @param pValueIn pointer to 4 input values of type Tin.
901
+ * @param pValueOut pointer to 4 output values of type Tout.
902
+ */
903
+
904
+ template <class Tin, class Tout>
905
+ inline void GDALCopy4Words(const Tin *pValueIn, Tout *const pValueOut)
906
+ {
907
+ GDALCopyWord(pValueIn[0], pValueOut[0]);
908
+ GDALCopyWord(pValueIn[1], pValueOut[1]);
909
+ GDALCopyWord(pValueIn[2], pValueOut[2]);
910
+ GDALCopyWord(pValueIn[3], pValueOut[3]);
911
+ }
912
+
913
+ /************************************************************************/
914
+ /* GDALCopy8Words() */
915
+ /************************************************************************/
916
+ /**
917
+ * Copy 8 packed words to 8 packed words, optionally rounding if appropriate
918
+ * (i.e. going from the float to the integer case).
919
+ *
920
+ * @param pValueIn pointer to 8 input values of type Tin.
921
+ * @param pValueOut pointer to 8 output values of type Tout.
922
+ */
923
+
924
+ template <class Tin, class Tout>
925
+ inline void GDALCopy8Words(const Tin *pValueIn, Tout *const pValueOut)
926
+ {
927
+ GDALCopy4Words(pValueIn, pValueOut);
928
+ GDALCopy4Words(pValueIn + 4, pValueOut + 4);
929
+ }
930
+
931
+ // Needs SSE2
932
+ #if defined(__x86_64) || defined(_M_X64) || defined(USE_SSE2) || \
933
+ defined(USE_NEON_OPTIMIZATIONS)
934
+
935
+ #ifdef USE_NEON_OPTIMIZATIONS
936
+ inline __m128i _mm_cvttps_epi32_neon_no_post_correction(__m128 a)
937
+ {
938
+ float32x4_t f = vreinterpretq_f32_m128(a);
939
+ int32x4_t cvt = vcvtq_s32_f32(f);
940
+ return vreinterpretq_m128i_s32(cvt);
941
+ }
942
+ #endif
943
+
944
+ template <>
945
+ inline void GDALCopy4Words(const float *pValueIn, GByte *const pValueOut)
946
+ {
947
+ __m128 xmm = _mm_loadu_ps(pValueIn);
948
+
949
+ // The following clamping would be useless due to the final saturating
950
+ // packing if we could guarantee the input range in [INT_MIN,INT_MAX]
951
+
952
+ // Clamp to [UINT8_MIN, UINT8_MAX]
953
+ const __m128 p0d5 = _mm_set1_ps(0.5f);
954
+ const __m128 xmm_max = _mm_set1_ps(255);
955
+
956
+ xmm = _mm_add_ps(xmm, p0d5);
957
+ xmm = _mm_min_ps(_mm_max_ps(xmm, p0d5), xmm_max);
958
+
959
+ #ifdef USE_NEON_OPTIMIZATIONS
960
+ // Optimization to avoid useless clamping
961
+ __m128i xmm_i = _mm_cvttps_epi32_neon_no_post_correction(xmm);
962
+ #else
963
+ __m128i xmm_i = _mm_cvttps_epi32(xmm);
964
+ #endif
965
+
966
+ #if defined(__SSSE3__) || defined(USE_NEON_OPTIMIZATIONS)
967
+ xmm_i = _mm_shuffle_epi8(
968
+ xmm_i, _mm_cvtsi32_si128(0 | (4 << 8) | (8 << 16) | (12 << 24)));
969
+ #else
970
+ xmm_i = _mm_packs_epi32(xmm_i, xmm_i); // Pack int32 to int16
971
+ xmm_i = _mm_packus_epi16(xmm_i, xmm_i); // Pack int16 to uint8
972
+ #endif
973
+ GDALCopyXMMToInt32(xmm_i, pValueOut);
974
+ }
975
+
976
+ static inline __m128 AddDotZeroBias(__m128 xmm)
977
+ {
978
+ const __m128 zeroDotFive = _mm_set1_ps(0.5f);
979
+ const __m128 negativeZero = _mm_set1_ps(-0.0f);
980
+ // f >= 0 ? f + 0.5f : f - 0.5f
981
+ const __m128 bias = _mm_or_ps(zeroDotFive, _mm_and_ps(xmm, negativeZero));
982
+ xmm = _mm_add_ps(xmm, bias);
983
+ return xmm;
984
+ }
985
+
986
+ template <>
987
+ inline void GDALCopy4Words(const float *pValueIn, GInt8 *const pValueOut)
988
+ {
989
+ __m128 xmm = _mm_loadu_ps(pValueIn);
990
+
991
+ #if !defined(USE_NEON_OPTIMIZATIONS)
992
+ // Cast NaN to zero
993
+ xmm = _mm_andnot_ps(_mm_cmpunord_ps(xmm, xmm), xmm);
994
+ #endif
995
+
996
+ // Clamp to [INT8_MIN, INT8_MAX]
997
+ const __m128 xmm_min = _mm_set1_ps(-128);
998
+ const __m128 xmm_max = _mm_set1_ps(127);
999
+ xmm = _mm_min_ps(_mm_max_ps(xmm, xmm_min), xmm_max);
1000
+
1001
+ xmm = AddDotZeroBias(xmm);
1002
+
1003
+ #ifdef USE_NEON_OPTIMIZATIONS
1004
+ // Optimization to avoid useless clamping
1005
+ __m128i xmm_i = _mm_cvttps_epi32_neon_no_post_correction(xmm);
1006
+ #else
1007
+ __m128i xmm_i = _mm_cvttps_epi32(xmm);
1008
+ #endif
1009
+
1010
+ #if defined(__SSSE3__) || defined(USE_NEON_OPTIMIZATIONS)
1011
+ xmm_i = _mm_shuffle_epi8(
1012
+ xmm_i, _mm_cvtsi32_si128(0 | (4 << 8) | (8 << 16) | (12 << 24)));
1013
+ #else
1014
+ xmm_i = _mm_packs_epi32(xmm_i, xmm_i); // Pack int32 to int16
1015
+ xmm_i = _mm_packs_epi16(xmm_i, xmm_i); // Pack int16 to int8
1016
+ #endif
1017
+ GDALCopyXMMToInt32(xmm_i, pValueOut);
1018
+ }
1019
+
1020
+ template <>
1021
+ inline void GDALCopy4Words(const float *pValueIn, GInt16 *const pValueOut)
1022
+ {
1023
+ __m128 xmm = _mm_loadu_ps(pValueIn);
1024
+
1025
+ #if !defined(USE_NEON_OPTIMIZATIONS)
1026
+ // Cast NaN to zero
1027
+ xmm = _mm_andnot_ps(_mm_cmpunord_ps(xmm, xmm), xmm);
1028
+ #endif
1029
+
1030
+ // Clamp to [INT16_MIN, INT16_MAX]
1031
+ const __m128 xmm_min = _mm_set1_ps(-32768);
1032
+ const __m128 xmm_max = _mm_set1_ps(32767);
1033
+ xmm = _mm_min_ps(_mm_max_ps(xmm, xmm_min), xmm_max);
1034
+
1035
+ xmm = AddDotZeroBias(xmm);
1036
+
1037
+ #ifdef USE_NEON_OPTIMIZATIONS
1038
+ // Optimization to avoid useless clamping
1039
+ __m128i xmm_i = _mm_cvttps_epi32_neon_no_post_correction(xmm);
1040
+ #else
1041
+ __m128i xmm_i = _mm_cvttps_epi32(xmm);
1042
+ #endif
1043
+
1044
+ xmm_i = _mm_packs_epi32(xmm_i, xmm_i); // Pack int32 to int16
1045
+ GDALCopyXMMToInt64(xmm_i, pValueOut);
1046
+ }
1047
+
1048
+ inline __m128i GDAL_mm_int32_to_uint16(__m128i xmm_i)
1049
+ {
1050
+ #if defined(__SSE4_1__) || defined(__AVX__) || defined(USE_NEON_OPTIMIZATIONS)
1051
+ xmm_i = _mm_packus_epi32(xmm_i, xmm_i); // Pack int32 to uint16
1052
+ #else
1053
+ // Translate to int16 range because _mm_packus_epi32 is SSE4.1 only
1054
+ xmm_i = _mm_add_epi32(xmm_i, _mm_set1_epi32(-32768));
1055
+ xmm_i = _mm_packs_epi32(xmm_i, xmm_i); // Pack int32 to int16
1056
+ // Translate back to uint16 range (actually -32768==32768 in int16)
1057
+ xmm_i = _mm_add_epi16(xmm_i, _mm_set1_epi16(-32768));
1058
+ #endif
1059
+ return xmm_i;
1060
+ }
1061
+
1062
+ inline __m128i GDAL_mm_packus_epi32(__m128i xmm_lo, __m128i xmm_hi)
1063
+ {
1064
+ #if defined(__SSE4_1__) || defined(__AVX__) || defined(USE_NEON_OPTIMIZATIONS)
1065
+ auto xmm = _mm_packus_epi32(xmm_lo, xmm_hi); // Pack int32 to uint16
1066
+ #else
1067
+ // Translate to int16 range because _mm_packus_epi32 is SSE4.1 only
1068
+ xmm_lo = _mm_add_epi32(xmm_lo, _mm_set1_epi32(-32768));
1069
+ xmm_hi = _mm_add_epi32(xmm_hi, _mm_set1_epi32(-32768));
1070
+ auto xmm = _mm_packs_epi32(xmm_lo, xmm_hi); // Pack int32 to int16
1071
+ // Translate back to uint16 range (actually -32768==32768 in int16)
1072
+ xmm = _mm_add_epi16(xmm, _mm_set1_epi16(-32768));
1073
+ #endif
1074
+ return xmm;
1075
+ }
1076
+
1077
+ template <>
1078
+ inline void GDALCopy4Words(const float *pValueIn, GUInt16 *const pValueOut)
1079
+ {
1080
+ __m128 xmm = _mm_loadu_ps(pValueIn);
1081
+
1082
+ // Clamp to [UINT16_MIN, UINT16_MAX]
1083
+ const __m128 p0d5 = _mm_set1_ps(0.5f);
1084
+ const __m128 xmm_max = _mm_set1_ps(65535);
1085
+ xmm = _mm_add_ps(xmm, p0d5);
1086
+ xmm = _mm_min_ps(_mm_max_ps(xmm, p0d5), xmm_max);
1087
+
1088
+ #ifdef USE_NEON_OPTIMIZATIONS
1089
+ // Optimization to avoid useless clamping
1090
+ __m128i xmm_i = _mm_cvttps_epi32_neon_no_post_correction(xmm);
1091
+ #else
1092
+ __m128i xmm_i = _mm_cvttps_epi32(xmm);
1093
+ #endif
1094
+
1095
+ xmm_i = GDAL_mm_int32_to_uint16(xmm_i);
1096
+ GDALCopyXMMToInt64(xmm_i, pValueOut);
1097
+ }
1098
+
1099
+ static inline __m128i GDALIfThenElse(__m128i mask, __m128i thenVal,
1100
+ __m128i elseVal)
1101
+ {
1102
+ #if defined(__SSE4_1__) || defined(__AVX__) || defined(USE_NEON_OPTIMIZATIONS)
1103
+ return _mm_blendv_epi8(elseVal, thenVal, mask);
1104
+ #else
1105
+ return _mm_or_si128(_mm_and_si128(mask, thenVal),
1106
+ _mm_andnot_si128(mask, elseVal));
1107
+ #endif
1108
+ }
1109
+
1110
+ template <>
1111
+ inline void GDALCopy4Words(const float *pValueIn, GInt32 *const pValueOut)
1112
+ {
1113
+ __m128 xmm = _mm_loadu_ps(pValueIn);
1114
+
1115
+ #if !defined(USE_NEON_OPTIMIZATIONS)
1116
+ // Cast NaN to zero
1117
+ xmm = _mm_andnot_ps(_mm_cmpunord_ps(xmm, xmm), xmm);
1118
+ #endif
1119
+
1120
+ xmm = AddDotZeroBias(xmm);
1121
+
1122
+ #ifdef USE_NEON_OPTIMIZATIONS
1123
+ // Optimization to avoid useless clamping
1124
+ __m128i xmm_i = _mm_cvttps_epi32_neon_no_post_correction(xmm);
1125
+ #else
1126
+ __m128i xmm_i = _mm_cvttps_epi32(xmm);
1127
+
1128
+ // Clamp to <= INT32_MAX
1129
+ const __m128 xmm_max = _mm_set1_ps(2147483648.0f);
1130
+ const __m128i xmm_i_max = _mm_set1_epi32(INT_MAX);
1131
+ xmm_i = GDALIfThenElse(_mm_castps_si128(_mm_cmpge_ps(xmm, xmm_max)),
1132
+ xmm_i_max, xmm_i);
1133
+ #endif
1134
+
1135
+ _mm_storeu_si128(reinterpret_cast<__m128i *>(pValueOut), xmm_i);
1136
+ }
1137
+
1138
+ static inline __m128 GDALIfThenElse(__m128 mask, __m128 thenVal, __m128 elseVal)
1139
+ {
1140
+ #if defined(__SSE4_1__) || defined(__AVX__) || defined(USE_NEON_OPTIMIZATIONS)
1141
+ return _mm_blendv_ps(elseVal, thenVal, mask);
1142
+ #else
1143
+ return _mm_or_ps(_mm_and_ps(mask, thenVal), _mm_andnot_ps(mask, elseVal));
1144
+ #endif
1145
+ }
1146
+
1147
+ // ARM64 has an efficient instruction for Float32 -> Float16
1148
+ #if !(defined(HAVE__FLOAT16) && \
1149
+ (defined(__aarch64__) && defined(_M_ARM64))) && \
1150
+ !(defined(__AVX2__) && defined(__F16C__))
1151
+
1152
+ inline __m128i GDALFourFloat32ToFloat16(__m128i xmm)
1153
+ {
1154
+ // Ported from https://github.com/simd-everywhere/simde/blob/51743e7920b6e867678cb50e9c62effe28f70b33/simde/simde-f16.h#L176
1155
+ // to SSE2 in a branch-less way
1156
+
1157
+ // clang-format off
1158
+
1159
+ /* This code is CC0, based heavily on code by Fabian Giesen. */
1160
+ const __m128i f32u_infinity = _mm_set1_epi32(255 << 23);
1161
+ const __m128i f16u_max = _mm_set1_epi32((127 + 16) << 23);
1162
+ const __m128i denorm_magic = _mm_set1_epi32(((127 - 15) + (23 - 10) + 1) << 23);
1163
+
1164
+ const auto sign = _mm_and_si128(xmm, _mm_set1_epi32(INT_MIN));
1165
+ xmm = _mm_xor_si128(xmm, sign);
1166
+ xmm = GDALIfThenElse(
1167
+ _mm_cmpgt_epi32(xmm, f16u_max),
1168
+ /* result is Inf or NaN (all exponent bits set) */
1169
+ GDALIfThenElse(
1170
+ _mm_cmpgt_epi32(xmm, f32u_infinity),
1171
+ /* NaN->qNaN and Inf->Inf */
1172
+ _mm_set1_epi32(0x7e00),
1173
+ _mm_set1_epi32(0x7c00)),
1174
+ /* (De)normalized number or zero */
1175
+ GDALIfThenElse(
1176
+ _mm_cmplt_epi32(xmm, _mm_set1_epi32(113 << 23)),
1177
+ /* use a magic value to align our 10 mantissa bits at the bottom of
1178
+ * the float. as long as FP addition is round-to-nearest-even this
1179
+ * just works. */
1180
+ _mm_sub_epi32(
1181
+ _mm_castps_si128(_mm_add_ps(_mm_castsi128_ps(xmm),
1182
+ _mm_castsi128_ps(denorm_magic))),
1183
+ /* and one integer subtract of the bias later,
1184
+ * we have our final float! */
1185
+ denorm_magic
1186
+ ),
1187
+ _mm_srli_epi32(
1188
+ _mm_add_epi32(
1189
+ /* update exponent, rounding bias part 1 */
1190
+ // (unsigned)-0x37fff001 = ((unsigned)(15-127) << 23) + 0xfff
1191
+ _mm_add_epi32(xmm, _mm_set1_epi32(-0x37fff001)),
1192
+ /* rounding bias part 2, using mant_odd */
1193
+ _mm_and_si128(_mm_srli_epi32(xmm, 13), _mm_set1_epi32(1))),
1194
+ 13
1195
+ )
1196
+ )
1197
+ );
1198
+ xmm = _mm_or_si128(xmm, _mm_srli_epi32(sign, 16));
1199
+
1200
+ // clang-format on
1201
+ return xmm;
1202
+ }
1203
+
1204
+ template <>
1205
+ inline void GDALCopy8Words(const float *pValueIn, GFloat16 *const pValueOut)
1206
+ {
1207
+ __m128i xmm_lo =
1208
+ GDALFourFloat32ToFloat16(_mm_castps_si128(_mm_loadu_ps(pValueIn)));
1209
+ __m128i xmm_hi =
1210
+ GDALFourFloat32ToFloat16(_mm_castps_si128(_mm_loadu_ps(pValueIn + 4)));
1211
+
1212
+ auto xmm = GDAL_mm_packus_epi32(xmm_lo, xmm_hi); // Pack int32 to uint16
1213
+ _mm_storeu_si128(reinterpret_cast<__m128i *>(pValueOut), xmm);
1214
+ }
1215
+
1216
+ #endif
1217
+
1218
+ template <>
1219
+ inline void GDALCopy4Words(const double *pValueIn, float *const pValueOut)
1220
+ {
1221
+ const __m128d val01 = _mm_loadu_pd(pValueIn);
1222
+ const __m128d val23 = _mm_loadu_pd(pValueIn + 2);
1223
+ const __m128 val01_s = _mm_cvtpd_ps(val01);
1224
+ const __m128 val23_s = _mm_cvtpd_ps(val23);
1225
+ const __m128 val = _mm_movelh_ps(val01_s, val23_s);
1226
+ _mm_storeu_ps(pValueOut, val);
1227
+ }
1228
+
1229
+ template <>
1230
+ inline void GDALCopy4Words(const double *pValueIn, GByte *const pValueOut)
1231
+ {
1232
+ const __m128d p0d5 = _mm_set1_pd(0.5);
1233
+ const __m128d xmm_max = _mm_set1_pd(255);
1234
+
1235
+ __m128d val01 = _mm_loadu_pd(pValueIn);
1236
+ __m128d val23 = _mm_loadu_pd(pValueIn + 2);
1237
+ val01 = _mm_add_pd(val01, p0d5);
1238
+ val01 = _mm_min_pd(_mm_max_pd(val01, p0d5), xmm_max);
1239
+ val23 = _mm_add_pd(val23, p0d5);
1240
+ val23 = _mm_min_pd(_mm_max_pd(val23, p0d5), xmm_max);
1241
+
1242
+ const __m128i val01_u32 = _mm_cvttpd_epi32(val01);
1243
+ const __m128i val23_u32 = _mm_cvttpd_epi32(val23);
1244
+
1245
+ // Merge 4 int32 values into a single register
1246
+ auto xmm_i = _mm_castpd_si128(_mm_shuffle_pd(
1247
+ _mm_castsi128_pd(val01_u32), _mm_castsi128_pd(val23_u32), 0));
1248
+
1249
+ #if defined(__SSSE3__) || defined(USE_NEON_OPTIMIZATIONS)
1250
+ xmm_i = _mm_shuffle_epi8(
1251
+ xmm_i, _mm_cvtsi32_si128(0 | (4 << 8) | (8 << 16) | (12 << 24)));
1252
+ #else
1253
+ xmm_i = _mm_packs_epi32(xmm_i, xmm_i); // Pack int32 to int16
1254
+ xmm_i = _mm_packus_epi16(xmm_i, xmm_i); // Pack int16 to uint8
1255
+ #endif
1256
+ GDALCopyXMMToInt32(xmm_i, pValueOut);
1257
+ }
1258
+
1259
+ template <>
1260
+ inline void GDALCopy4Words(const float *pValueIn, double *const pValueOut)
1261
+ {
1262
+ const __m128 valIn = _mm_loadu_ps(pValueIn);
1263
+ _mm_storeu_pd(pValueOut, _mm_cvtps_pd(valIn));
1264
+ _mm_storeu_pd(pValueOut + 2, _mm_cvtps_pd(_mm_movehl_ps(valIn, valIn)));
1265
+ }
1266
+
1267
+ #ifdef __F16C__
1268
+ template <>
1269
+ inline void GDALCopy4Words(const GFloat16 *pValueIn, float *const pValueOut)
1270
+ {
1271
+ __m128i xmm = _mm_loadl_epi64(reinterpret_cast<const __m128i *>(pValueIn));
1272
+ _mm_storeu_ps(pValueOut, _mm_cvtph_ps(xmm));
1273
+ }
1274
+
1275
+ template <>
1276
+ inline void GDALCopy4Words(const float *pValueIn, GFloat16 *const pValueOut)
1277
+ {
1278
+ __m128 xmm = _mm_loadu_ps(pValueIn);
1279
+ GDALCopyXMMToInt64(_mm_cvtps_ph(xmm, _MM_FROUND_TO_NEAREST_INT), pValueOut);
1280
+ }
1281
+
1282
+ template <>
1283
+ inline void GDALCopy4Words(const GFloat16 *pValueIn, double *const pValueOut)
1284
+ {
1285
+ float tmp[4];
1286
+ GDALCopy4Words(pValueIn, tmp);
1287
+ GDALCopy4Words(tmp, pValueOut);
1288
+ }
1289
+
1290
+ template <>
1291
+ inline void GDALCopy4Words(const double *pValueIn, GFloat16 *const pValueOut)
1292
+ {
1293
+ float tmp[4];
1294
+ GDALCopy4Words(pValueIn, tmp);
1295
+ GDALCopy4Words(tmp, pValueOut);
1296
+ }
1297
+
1298
+ // ARM64 has an efficient instruction for Float16 -> Float32/Float64
1299
+ #elif !(defined(HAVE__FLOAT16) && (defined(__aarch64__) && defined(_M_ARM64)))
1300
+
1301
+ // Convert 4 float16 values to 4 float 32 values
1302
+ // xmm must contain 4 float16 values stored in 32 bit each (with upper 16 bits at zero)
1303
+ static inline __m128i GDALFourFloat16ToFloat32(__m128i xmm)
1304
+ {
1305
+ // Ported from https://github.com/simd-everywhere/simde/blob/51743e7920b6e867678cb50e9c62effe28f70b33/simde/simde-f16.h#L242C4-L242C68
1306
+ // to SSE2 in a branch-less way
1307
+
1308
+ /* This code is CC0, based heavily on code by Fabian Giesen. */
1309
+ const auto denorm_magic =
1310
+ _mm_castsi128_ps(_mm_set1_epi32((128 - 15) << 23));
1311
+ const auto shifted_exp =
1312
+ _mm_set1_epi32(0x7c00 << 13); /* exponent mask after shift */
1313
+
1314
+ // Shift exponent and mantissa bits to their position in a float32
1315
+ auto f32u = _mm_slli_epi32(_mm_and_si128(xmm, _mm_set1_epi32(0x7fff)), 13);
1316
+ // Extract the (shifted) exponent
1317
+ const auto exp = _mm_and_si128(shifted_exp, f32u);
1318
+ // Adjust the exponent
1319
+ const auto exp_adjustment = _mm_set1_epi32((127 - 15) << 23);
1320
+ f32u = _mm_add_epi32(f32u, exp_adjustment);
1321
+
1322
+ const auto is_inf_nan = _mm_cmpeq_epi32(exp, shifted_exp); /* Inf/NaN? */
1323
+ // When is_inf_nan is true: extra exponent adjustment
1324
+ const auto f32u_inf_nan = _mm_add_epi32(f32u, exp_adjustment);
1325
+
1326
+ const auto is_denormal =
1327
+ _mm_cmpeq_epi32(exp, _mm_setzero_si128()); /* Zero/Denormal? */
1328
+ // When is_denormal is true:
1329
+ auto f32u_denormal = _mm_add_epi32(f32u, _mm_set1_epi32(1 << 23));
1330
+ f32u_denormal = _mm_castps_si128(
1331
+ _mm_sub_ps(_mm_castsi128_ps(f32u_denormal), denorm_magic));
1332
+
1333
+ f32u = GDALIfThenElse(is_inf_nan, f32u_inf_nan, f32u);
1334
+ f32u = GDALIfThenElse(is_denormal, f32u_denormal, f32u);
1335
+
1336
+ // Re-apply sign bit
1337
+ f32u = _mm_or_si128(
1338
+ f32u, _mm_slli_epi32(_mm_and_si128(xmm, _mm_set1_epi32(0x8000)), 16));
1339
+ return f32u;
1340
+ }
1341
+
1342
+ template <>
1343
+ inline void GDALCopy8Words(const GFloat16 *pValueIn, float *const pValueOut)
1344
+ {
1345
+ __m128i xmm = _mm_loadu_si128(reinterpret_cast<const __m128i *>(pValueIn));
1346
+ const auto xmm_0 =
1347
+ GDALFourFloat16ToFloat32(_mm_unpacklo_epi16(xmm, _mm_setzero_si128()));
1348
+ const auto xmm_1 =
1349
+ GDALFourFloat16ToFloat32(_mm_unpackhi_epi16(xmm, _mm_setzero_si128()));
1350
+ _mm_storeu_ps(pValueOut + 0, _mm_castsi128_ps(xmm_0));
1351
+ _mm_storeu_ps(pValueOut + 4, _mm_castsi128_ps(xmm_1));
1352
+ }
1353
+
1354
+ template <>
1355
+ inline void GDALCopy8Words(const GFloat16 *pValueIn, double *const pValueOut)
1356
+ {
1357
+ __m128i xmm = _mm_loadu_si128(reinterpret_cast<const __m128i *>(pValueIn));
1358
+ const auto xmm_0 = _mm_castsi128_ps(
1359
+ GDALFourFloat16ToFloat32(_mm_unpacklo_epi16(xmm, _mm_setzero_si128())));
1360
+ const auto xmm_1 = _mm_castsi128_ps(
1361
+ GDALFourFloat16ToFloat32(_mm_unpackhi_epi16(xmm, _mm_setzero_si128())));
1362
+ _mm_storeu_pd(pValueOut + 0, _mm_cvtps_pd(xmm_0));
1363
+ _mm_storeu_pd(pValueOut + 2, _mm_cvtps_pd(_mm_movehl_ps(xmm_0, xmm_0)));
1364
+ _mm_storeu_pd(pValueOut + 4, _mm_cvtps_pd(xmm_1));
1365
+ _mm_storeu_pd(pValueOut + 6, _mm_cvtps_pd(_mm_movehl_ps(xmm_1, xmm_1)));
1366
+ }
1367
+
1368
+ #endif // __F16C__
1369
+
1370
+ #ifdef __AVX2__
1371
+
1372
+ #include <immintrin.h>
1373
+
1374
+ template <>
1375
+ inline void GDALCopy8Words(const double *pValueIn, float *const pValueOut)
1376
+ {
1377
+ const __m256d val0123 = _mm256_loadu_pd(pValueIn);
1378
+ const __m256d val4567 = _mm256_loadu_pd(pValueIn + 4);
1379
+ const __m256 val0123_s = _mm256_castps128_ps256(_mm256_cvtpd_ps(val0123));
1380
+ const __m256 val4567_s = _mm256_castps128_ps256(_mm256_cvtpd_ps(val4567));
1381
+ const __m256 val =
1382
+ _mm256_permute2f128_ps(val0123_s, val4567_s, 0 | (2 << 4));
1383
+ _mm256_storeu_ps(pValueOut, val);
1384
+ }
1385
+
1386
+ template <>
1387
+ inline void GDALCopy8Words(const float *pValueIn, double *const pValueOut)
1388
+ {
1389
+ const __m256 valIn = _mm256_loadu_ps(pValueIn);
1390
+ _mm256_storeu_pd(pValueOut, _mm256_cvtps_pd(_mm256_castps256_ps128(valIn)));
1391
+ _mm256_storeu_pd(pValueOut + 4,
1392
+ _mm256_cvtps_pd(_mm256_castps256_ps128(
1393
+ _mm256_permute2f128_ps(valIn, valIn, 1))));
1394
+ }
1395
+
1396
+ #ifdef __F16C__
1397
+
1398
+ template <>
1399
+ inline void GDALCopy8Words(const GFloat16 *pValueIn, float *const pValueOut)
1400
+ {
1401
+ __m128i xmm = _mm_loadu_si128(reinterpret_cast<const __m128i *>(pValueIn));
1402
+ _mm256_storeu_ps(pValueOut, _mm256_cvtph_ps(xmm));
1403
+ }
1404
+
1405
+ template <>
1406
+ inline void GDALCopy8Words(const float *pValueIn, GFloat16 *const pValueOut)
1407
+ {
1408
+ __m256 ymm = _mm256_loadu_ps(pValueIn);
1409
+ _mm_storeu_si128(reinterpret_cast<__m128i *>(pValueOut),
1410
+ _mm256_cvtps_ph(ymm, _MM_FROUND_TO_NEAREST_INT));
1411
+ }
1412
+
1413
+ template <>
1414
+ inline void GDALCopy8Words(const GFloat16 *pValueIn, double *const pValueOut)
1415
+ {
1416
+ __m128i xmm = _mm_loadu_si128(reinterpret_cast<const __m128i *>(pValueIn));
1417
+ const auto ymm = _mm256_cvtph_ps(xmm);
1418
+ _mm256_storeu_pd(pValueOut, _mm256_cvtps_pd(_mm256_extractf128_ps(ymm, 0)));
1419
+ _mm256_storeu_pd(pValueOut + 4,
1420
+ _mm256_cvtps_pd(_mm256_extractf128_ps(ymm, 1)));
1421
+ }
1422
+
1423
+ template <>
1424
+ inline void GDALCopy8Words(const double *pValueIn, GFloat16 *const pValueOut)
1425
+ {
1426
+ __m256d ymm0 = _mm256_loadu_pd(pValueIn);
1427
+ __m256d ymm1 = _mm256_loadu_pd(pValueIn + 4);
1428
+ __m256 ymm = _mm256_set_m128(_mm256_cvtpd_ps(ymm1), _mm256_cvtpd_ps(ymm0));
1429
+ _mm_storeu_si128(reinterpret_cast<__m128i *>(pValueOut),
1430
+ _mm256_cvtps_ph(ymm, _MM_FROUND_TO_NEAREST_INT));
1431
+ }
1432
+
1433
+ #endif
1434
+
1435
+ template <>
1436
+ inline void GDALCopy8Words(const float *pValueIn, GByte *const pValueOut)
1437
+ {
1438
+ __m256 ymm = _mm256_loadu_ps(pValueIn);
1439
+
1440
+ const __m256 p0d5 = _mm256_set1_ps(0.5f);
1441
+ const __m256 ymm_max = _mm256_set1_ps(255);
1442
+ ymm = _mm256_add_ps(ymm, p0d5);
1443
+ ymm = _mm256_min_ps(_mm256_max_ps(ymm, p0d5), ymm_max);
1444
+
1445
+ __m256i ymm_i = _mm256_cvttps_epi32(ymm);
1446
+
1447
+ ymm_i = _mm256_packus_epi32(ymm_i, ymm_i); // Pack int32 to uint16
1448
+ ymm_i = _mm256_permute4x64_epi64(ymm_i, 0 | (2 << 2)); // AVX2
1449
+
1450
+ __m128i xmm_i = _mm256_castsi256_si128(ymm_i);
1451
+ xmm_i = _mm_packus_epi16(xmm_i, xmm_i);
1452
+ GDALCopyXMMToInt64(xmm_i, pValueOut);
1453
+ }
1454
+
1455
+ template <>
1456
+ inline void GDALCopy8Words(const float *pValueIn, GUInt16 *const pValueOut)
1457
+ {
1458
+ __m256 ymm = _mm256_loadu_ps(pValueIn);
1459
+
1460
+ const __m256 p0d5 = _mm256_set1_ps(0.5f);
1461
+ const __m256 ymm_max = _mm256_set1_ps(65535);
1462
+ ymm = _mm256_add_ps(ymm, p0d5);
1463
+ ymm = _mm256_min_ps(_mm256_max_ps(ymm, p0d5), ymm_max);
1464
+
1465
+ __m256i ymm_i = _mm256_cvttps_epi32(ymm);
1466
+
1467
+ ymm_i = _mm256_packus_epi32(ymm_i, ymm_i); // Pack int32 to uint16
1468
+ ymm_i = _mm256_permute4x64_epi64(ymm_i, 0 | (2 << 2)); // AVX2
1469
+
1470
+ _mm_storeu_si128(reinterpret_cast<__m128i *>(pValueOut),
1471
+ _mm256_castsi256_si128(ymm_i));
1472
+ }
1473
+ #else
1474
+ template <>
1475
+ inline void GDALCopy8Words(const float *pValueIn, GUInt16 *const pValueOut)
1476
+ {
1477
+ __m128 xmm = _mm_loadu_ps(pValueIn);
1478
+ __m128 xmm1 = _mm_loadu_ps(pValueIn + 4);
1479
+
1480
+ const __m128 p0d5 = _mm_set1_ps(0.5f);
1481
+ const __m128 xmm_max = _mm_set1_ps(65535);
1482
+ xmm = _mm_add_ps(xmm, p0d5);
1483
+ xmm1 = _mm_add_ps(xmm1, p0d5);
1484
+ xmm = _mm_min_ps(_mm_max_ps(xmm, p0d5), xmm_max);
1485
+ xmm1 = _mm_min_ps(_mm_max_ps(xmm1, p0d5), xmm_max);
1486
+
1487
+ #ifdef USE_NEON_OPTIMIZATIONS
1488
+ // Optimization to avoid useless clamping
1489
+ __m128i xmm_i = _mm_cvttps_epi32_neon_no_post_correction(xmm);
1490
+ __m128i xmm1_i = _mm_cvttps_epi32_neon_no_post_correction(xmm1);
1491
+ #else
1492
+ __m128i xmm_i = _mm_cvttps_epi32(xmm);
1493
+ __m128i xmm1_i = _mm_cvttps_epi32(xmm1);
1494
+ #endif
1495
+
1496
+ xmm_i = GDAL_mm_packus_epi32(xmm_i, xmm1_i); // Pack int32 to uint16
1497
+ _mm_storeu_si128(reinterpret_cast<__m128i *>(pValueOut), xmm_i);
1498
+ }
1499
+ #endif
1500
+
1501
+ // ARM64 has an efficient instruction for Float64 -> Float16
1502
+ #if !(defined(HAVE__FLOAT16) && \
1503
+ (defined(__aarch64__) && defined(_M_ARM64))) && \
1504
+ !(defined(__AVX2__) && defined(__F16C__))
1505
+ template <>
1506
+ inline void GDALCopy8Words(const double *pValueIn, GFloat16 *const pValueOut)
1507
+ {
1508
+ float fVal[8];
1509
+ GDALCopy8Words(pValueIn, fVal);
1510
+ GDALCopy8Words(fVal, pValueOut);
1511
+ }
1512
+ #endif
1513
+
1514
+ #endif // defined(__x86_64) || defined(_M_X64)
1515
+
1516
+ #endif // GDAL_PRIV_TEMPLATES_HPP_INCLUDED