@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.
- package/LICENSE +467 -0
- package/README.md +12 -0
- package/assets/gdal_empty_file.cpp +0 -0
- package/crossbind.build.js +23 -0
- package/crossbind.config.js +35 -0
- package/dist/prebuilt/CMakeLists.txt +57 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/crossbind-emccflags.fingerprint +1 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_atomic_ops.h +89 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_auto_close.h +72 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_compressor.h +112 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_config.h +203 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_config_extras.h +33 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_conv.h +528 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_csv.h +70 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_error.h +505 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_float.h +730 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_hash_set.h +82 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_http.h +317 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_json.h +398 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_list.h +58 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_minixml.h +210 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_multiproc.h +241 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_port.h +1266 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_progress.h +48 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_quad_tree.h +104 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_spawn.h +59 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_string.h +985 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_time.h +28 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_virtualmem.h +347 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_vsi.h +885 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_vsi_error.h +91 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/cpl_vsi_virtual.h +838 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/cplkeywordparser.h +60 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal.h +3013 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_adbc.h +46 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_alg.h +753 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_alg_priv.h +444 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_asyncreader.h +177 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_colortable.h +85 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_computedrasterband.h +334 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_cpp_functions.h +414 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_csv.h +24 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_dataset.h +959 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_defaultoverviews.h +133 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_driver.h +348 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_drivermanager.h +115 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_frmts.h +230 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_fwd.h +219 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_gcp.h +140 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_geotransform.h +251 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_majorobject.h +102 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_maskbands.h +170 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_mdreader.h +240 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_mem.h +32 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_minmax_element.hpp +1489 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_multidim.h +1356 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_multidim_cpp.h +33 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_multidomainmetadata.h +91 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_openinfo.h +94 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_pam.h +400 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_pam_multidim.h +114 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_priv.h +69 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_priv_templates.hpp +1516 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_proxy.h +475 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_raster_cpp.h +46 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_rasterband.h +779 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_rasterblock.h +184 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_rat.h +589 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_relationship.h +380 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_simplesurf.h +579 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_thread_pool.h +42 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_typetraits.h +517 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_utils.h +350 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_vector_cpp.h +31 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_version.h +37 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdal_vrt.h +88 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdalalgorithm.h +19 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdalalgorithm_c.h +292 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdalalgorithm_cpp.h +3398 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdalcachedpixelaccessor.h +446 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdalgeorefpamdataset.h +72 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdalgrid.h +102 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdalgrid_priv.h +67 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdaljp2abstractdataset.h +60 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdaljp2metadata.h +236 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdalpansharpen.h +260 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdalsubdatasetinfo.h +104 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gdalwarper.h +644 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/geoheif.h +58 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gnm.h +781 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gnm_api.h +99 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/gnmgraph.h +257 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/memdataset.h +385 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/ogr_api.h +948 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/ogr_core.h +1319 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/ogr_feature.h +2136 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/ogr_featurestyle.h +869 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/ogr_geocoding.h +45 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/ogr_geomcoordinateprecision.h +85 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/ogr_geometry.h +4382 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/ogr_p.h +330 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/ogr_recordbatch.h +128 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/ogr_refcountedptr.h +198 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/ogr_spatialref.h +1122 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/ogr_srs_api.h +1073 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/ogr_swq.h +534 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/ogrsf_frmts.h +803 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/rawdataset.h +268 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/include/vrtdataset.h +2595 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/3.20/FindLibLZMA.cmake +126 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/3.20/FindPostgreSQL.cmake +312 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/DefineFindPackage2.cmake +164 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/GDAL-targets-release.cmake +19 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/GDAL-targets.cmake +108 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/GDALConfig.cmake +35 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/GDALConfigVersion.cmake +65 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/GdalFindModulePath.cmake +13 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindBRUNSLI.cmake +74 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindBlosc.cmake +74 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindCURL.cmake +235 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindCryptoPP.cmake +91 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindDeflate.cmake +113 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindECW.cmake +172 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindEXPAT.cmake +156 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindExprTk.cmake +93 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindFYBA.cmake +38 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindFileGDB.cmake +93 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindFreeXL.cmake +67 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindGEOS.cmake +49 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindGIF.cmake +97 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindGeoTIFF.cmake +104 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindHDF4.cmake +133 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindHDFS.cmake +54 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindIDB.cmake +45 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindIconv.cmake +145 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindJSONC.cmake +48 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindKDU.cmake +105 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindLERC.cmake +46 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindLZ4.cmake +130 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindLibKML.cmake +134 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindMONGOCXX.cmake +56 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindMRSID.cmake +66 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindMSSQL_NCLI.cmake +86 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindMSSQL_ODBC.cmake +113 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindMySQL.cmake +83 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindNetCDF.cmake +209 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindODBC.cmake +259 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindODBCCPP.cmake +72 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindOpenCAD.cmake +97 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindOpenEXR.cmake +125 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindOpenJPEG.cmake +124 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindOracle.cmake +230 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindPCRE.cmake +28 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindPCRE2.cmake +27 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindPROJ.cmake +91 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindPodofo.cmake +94 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindPoppler.cmake +182 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindQHULL.cmake +44 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindRASTERLITE2.cmake +85 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindSFCGAL.cmake +87 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindSPATIALITE.cmake +74 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindSQLite3.cmake +208 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindShapelib.cmake +69 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindSpatialindex.cmake +18 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindTEIGHA.cmake +242 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindWebP.cmake +38 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/FindZSTD.cmake +95 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/packages/Findmuparser.cmake +53 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/thirdparty/DotnetImports.props.in +7 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/thirdparty/FindCSharp.cmake +72 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/thirdparty/FindDotnet.cmake +496 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/thirdparty/FindInt128.cmake +65 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/thirdparty/FindMono.cmake +163 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/thirdparty/GetGitHeadDate.cmake +33 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/thirdparty/GetGitRevisionDescription.cmake +181 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/thirdparty/GetGitRevisionDescription.cmake.in +50 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/thirdparty/OSXInstallDirs.cmake +214 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/cmake/gdal/thirdparty/SystemSummary.cmake +89 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/gdalplugins/drivers.ini +285 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/libgdal.a +0 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/lib/pkgconfig/gdal.pc +17 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/GDALLogoBW.svg +138 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/GDALLogoColor.svg +126 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/GDALLogoGS.svg +126 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/LICENSE.TXT +467 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/MM_m_idofic.csv +320 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/cubewerx_extra.wkt +48 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/default.rsc +0 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/ecw_cs.wkt +1453 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/eedaconf.json +23 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/epsg.wkt +1 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/esri_StatePlane_extra.wkt +631 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/gdal_algorithm.schema.json +240 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/gdalg.schema.json +36 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/gdalicon.png +0 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/gdalinfo_output.schema.json +390 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/gdalmdiminfo_output.schema.json +393 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/gdaltileindex.xsd +264 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/gdalvrt.xsd +948 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/gfs.xsd +246 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/gml_registry.xml +117 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/gml_registry.xsd +66 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_center.csv +251 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_process.csv +102 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_subcenter.csv +63 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_0.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_1.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_13.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_14.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_15.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_16.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_17.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_18.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_19.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_190.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_191.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_2.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_20.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_21.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_22.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_3.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_4.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_5.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_6.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_0_7.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_10_0.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_10_1.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_10_191.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_10_2.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_10_3.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_10_4.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_1_0.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_1_1.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_1_2.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_20_0.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_20_1.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_20_2.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_20_3.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_2_0.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_2_3.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_2_4.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_2_5.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_2_6.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_2_7.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_3_0.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_3_1.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_3_2.csv +243 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_3_3.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_3_4.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_3_5.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_3_6.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_4_0.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_4_1.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_4_10.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_4_2.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_4_3.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_4_4.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_4_5.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_4_6.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_4_7.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_4_8.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_4_9.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_local_Canada.csv +5 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_local_HPC.csv +2 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_local_MRMS.csv +175 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_local_NCEP.csv +401 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_local_NDFD.csv +38 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_2_local_index.csv +7 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_4_5.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/grib2_table_versions.csv +3 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/gt_datum.csv +229 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/gt_ellips.csv +24 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/header.dxf +1138 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/inspire_cp_BasicPropertyUnit.gfs +57 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/inspire_cp_CadastralBoundary.gfs +60 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/inspire_cp_CadastralParcel.gfs +81 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/inspire_cp_CadastralZoning.gfs +161 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_AdmArea.gfs +59 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_AdmBdry.gfs +49 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_AdmPt.gfs +59 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_BldA.gfs +54 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_BldL.gfs +54 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_Cntr.gfs +54 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_CommBdry.gfs +49 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_CommPt.gfs +59 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_Cstline.gfs +54 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_ElevPt.gfs +54 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_GCP.gfs +94 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_LeveeEdge.gfs +49 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_RailCL.gfs +54 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_RdASL.gfs +44 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_RdArea.gfs +54 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_RdCompt.gfs +59 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_RdEdg.gfs +59 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_RdMgtBdry.gfs +49 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_RdSgmtA.gfs +59 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_RvrMgtBdry.gfs +49 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_SBAPt.gfs +49 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_SBArea.gfs +54 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_SBBdry.gfs +44 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_WA.gfs +54 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_WL.gfs +54 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_WStrA.gfs +54 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/jpfgdgml_WStrL.gfs +54 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/leaflet_template.html +102 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/nitf_spec.xml +3508 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/nitf_spec.xsd +178 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/ogr_fields_override.schema.json +278 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/ogrinfo_output.schema.json +532 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/ogrvrt.xsd +526 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/osmconf.ini +134 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/ozi_datum.csv +131 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/ozi_ellips.csv +35 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/pci_datum.txt +530 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/pci_ellips.txt +129 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/pdfcomposition.xsd +703 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/plscenesconf.json +1985 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/ruian_vf_ob_v1.gfs +1455 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/ruian_vf_st_uvoh_v1.gfs +86 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/ruian_vf_st_v1.gfs +1489 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/ruian_vf_v1.gfs +2126 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/s57agencies.csv +249 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/s57attributes.csv +484 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/s57expectedinput.csv +1008 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/s57objectclasses.csv +287 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/seed_2d.dgn +0 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/seed_3d.dgn +0 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/stateplane.csv +259 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/template_tiles.mapml +26 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/tms_LINZAntarticaMapTileGrid.json +190 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/tms_MapML_APSTILE.json +268 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/tms_MapML_CBMTILE.json +346 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/tms_NZTM2000.json +243 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/trailer.dxf +434 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/vdv452.xml +349 -0
- package/dist/prebuilt/wasm-wasm32-mt-release/share/gdal/vdv452.xsd +45 -0
- package/dist/prebuilt/wasm-wasm32-st-release/crossbind-emccflags.fingerprint +1 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_atomic_ops.h +89 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_auto_close.h +72 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_compressor.h +112 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_config.h +203 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_config_extras.h +33 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_conv.h +528 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_csv.h +70 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_error.h +505 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_float.h +730 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_hash_set.h +82 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_http.h +317 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_json.h +398 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_list.h +58 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_minixml.h +210 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_multiproc.h +241 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_port.h +1266 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_progress.h +48 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_quad_tree.h +104 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_spawn.h +59 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_string.h +985 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_time.h +28 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_virtualmem.h +347 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_vsi.h +885 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_vsi_error.h +91 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/cpl_vsi_virtual.h +838 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/cplkeywordparser.h +60 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal.h +3013 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_adbc.h +46 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_alg.h +753 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_alg_priv.h +444 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_asyncreader.h +177 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_colortable.h +85 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_computedrasterband.h +334 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_cpp_functions.h +414 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_csv.h +24 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_dataset.h +959 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_defaultoverviews.h +133 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_driver.h +348 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_drivermanager.h +115 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_frmts.h +230 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_fwd.h +219 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_gcp.h +140 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_geotransform.h +251 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_majorobject.h +102 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_maskbands.h +170 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_mdreader.h +240 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_mem.h +32 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_minmax_element.hpp +1489 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_multidim.h +1356 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_multidim_cpp.h +33 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_multidomainmetadata.h +91 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_openinfo.h +94 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_pam.h +400 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_pam_multidim.h +114 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_priv.h +69 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_priv_templates.hpp +1516 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_proxy.h +475 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_raster_cpp.h +46 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_rasterband.h +779 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_rasterblock.h +184 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_rat.h +589 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_relationship.h +380 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_simplesurf.h +579 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_thread_pool.h +42 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_typetraits.h +517 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_utils.h +350 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_vector_cpp.h +31 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_version.h +37 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdal_vrt.h +88 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdalalgorithm.h +19 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdalalgorithm_c.h +292 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdalalgorithm_cpp.h +3398 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdalcachedpixelaccessor.h +446 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdalgeorefpamdataset.h +72 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdalgrid.h +102 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdalgrid_priv.h +67 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdaljp2abstractdataset.h +60 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdaljp2metadata.h +236 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdalpansharpen.h +260 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdalsubdatasetinfo.h +104 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gdalwarper.h +644 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/geoheif.h +58 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gnm.h +781 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gnm_api.h +99 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/gnmgraph.h +257 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/memdataset.h +385 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/ogr_api.h +948 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/ogr_core.h +1319 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/ogr_feature.h +2136 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/ogr_featurestyle.h +869 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/ogr_geocoding.h +45 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/ogr_geomcoordinateprecision.h +85 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/ogr_geometry.h +4382 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/ogr_p.h +330 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/ogr_recordbatch.h +128 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/ogr_refcountedptr.h +198 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/ogr_spatialref.h +1122 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/ogr_srs_api.h +1073 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/ogr_swq.h +534 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/ogrsf_frmts.h +803 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/rawdataset.h +268 -0
- package/dist/prebuilt/wasm-wasm32-st-release/include/vrtdataset.h +2595 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/3.20/FindLibLZMA.cmake +126 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/3.20/FindPostgreSQL.cmake +312 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/DefineFindPackage2.cmake +164 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/GDAL-targets-release.cmake +19 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/GDAL-targets.cmake +108 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/GDALConfig.cmake +35 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/GDALConfigVersion.cmake +65 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/GdalFindModulePath.cmake +13 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindBRUNSLI.cmake +74 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindBlosc.cmake +74 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindCURL.cmake +235 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindCryptoPP.cmake +91 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindDeflate.cmake +113 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindECW.cmake +172 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindEXPAT.cmake +156 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindExprTk.cmake +93 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindFYBA.cmake +38 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindFileGDB.cmake +93 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindFreeXL.cmake +67 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindGEOS.cmake +49 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindGIF.cmake +97 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindGeoTIFF.cmake +104 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindHDF4.cmake +133 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindHDFS.cmake +54 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindIDB.cmake +45 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindIconv.cmake +145 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindJSONC.cmake +48 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindKDU.cmake +105 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindLERC.cmake +46 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindLZ4.cmake +130 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindLibKML.cmake +134 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindMONGOCXX.cmake +56 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindMRSID.cmake +66 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindMSSQL_NCLI.cmake +86 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindMSSQL_ODBC.cmake +113 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindMySQL.cmake +83 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindNetCDF.cmake +209 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindODBC.cmake +259 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindODBCCPP.cmake +72 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindOpenCAD.cmake +97 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindOpenEXR.cmake +125 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindOpenJPEG.cmake +124 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindOracle.cmake +230 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindPCRE.cmake +28 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindPCRE2.cmake +27 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindPROJ.cmake +91 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindPodofo.cmake +94 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindPoppler.cmake +182 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindQHULL.cmake +44 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindRASTERLITE2.cmake +85 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindSFCGAL.cmake +87 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindSPATIALITE.cmake +74 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindSQLite3.cmake +208 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindShapelib.cmake +69 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindSpatialindex.cmake +18 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindTEIGHA.cmake +242 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindWebP.cmake +38 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/FindZSTD.cmake +95 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/packages/Findmuparser.cmake +53 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/thirdparty/DotnetImports.props.in +7 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/thirdparty/FindCSharp.cmake +72 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/thirdparty/FindDotnet.cmake +496 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/thirdparty/FindInt128.cmake +65 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/thirdparty/FindMono.cmake +163 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/thirdparty/GetGitHeadDate.cmake +33 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/thirdparty/GetGitRevisionDescription.cmake +181 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/thirdparty/GetGitRevisionDescription.cmake.in +50 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/thirdparty/OSXInstallDirs.cmake +214 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/cmake/gdal/thirdparty/SystemSummary.cmake +89 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/gdalplugins/drivers.ini +285 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/libgdal.a +0 -0
- package/dist/prebuilt/wasm-wasm32-st-release/lib/pkgconfig/gdal.pc +17 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/GDALLogoBW.svg +138 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/GDALLogoColor.svg +126 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/GDALLogoGS.svg +126 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/LICENSE.TXT +467 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/MM_m_idofic.csv +320 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/cubewerx_extra.wkt +48 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/default.rsc +0 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/ecw_cs.wkt +1453 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/eedaconf.json +23 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/epsg.wkt +1 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/esri_StatePlane_extra.wkt +631 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/gdal_algorithm.schema.json +240 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/gdalg.schema.json +36 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/gdalicon.png +0 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/gdalinfo_output.schema.json +390 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/gdalmdiminfo_output.schema.json +393 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/gdaltileindex.xsd +264 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/gdalvrt.xsd +948 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/gfs.xsd +246 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/gml_registry.xml +117 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/gml_registry.xsd +66 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_center.csv +251 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_process.csv +102 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_subcenter.csv +63 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_0.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_1.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_13.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_14.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_15.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_16.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_17.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_18.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_19.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_190.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_191.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_2.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_20.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_21.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_22.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_3.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_4.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_5.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_6.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_0_7.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_10_0.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_10_1.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_10_191.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_10_2.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_10_3.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_10_4.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_1_0.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_1_1.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_1_2.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_20_0.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_20_1.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_20_2.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_20_3.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_2_0.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_2_3.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_2_4.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_2_5.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_2_6.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_2_7.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_3_0.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_3_1.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_3_2.csv +243 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_3_3.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_3_4.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_3_5.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_3_6.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_4_0.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_4_1.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_4_10.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_4_2.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_4_3.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_4_4.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_4_5.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_4_6.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_4_7.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_4_8.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_4_9.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_local_Canada.csv +5 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_local_HPC.csv +2 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_local_MRMS.csv +175 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_local_NCEP.csv +401 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_local_NDFD.csv +38 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_2_local_index.csv +7 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_4_5.csv +261 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/grib2_table_versions.csv +3 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/gt_datum.csv +229 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/gt_ellips.csv +24 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/header.dxf +1138 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/inspire_cp_BasicPropertyUnit.gfs +57 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/inspire_cp_CadastralBoundary.gfs +60 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/inspire_cp_CadastralParcel.gfs +81 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/inspire_cp_CadastralZoning.gfs +161 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_AdmArea.gfs +59 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_AdmBdry.gfs +49 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_AdmPt.gfs +59 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_BldA.gfs +54 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_BldL.gfs +54 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_Cntr.gfs +54 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_CommBdry.gfs +49 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_CommPt.gfs +59 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_Cstline.gfs +54 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_ElevPt.gfs +54 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_GCP.gfs +94 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_LeveeEdge.gfs +49 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_RailCL.gfs +54 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_RdASL.gfs +44 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_RdArea.gfs +54 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_RdCompt.gfs +59 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_RdEdg.gfs +59 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_RdMgtBdry.gfs +49 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_RdSgmtA.gfs +59 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_RvrMgtBdry.gfs +49 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_SBAPt.gfs +49 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_SBArea.gfs +54 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_SBBdry.gfs +44 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_WA.gfs +54 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_WL.gfs +54 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_WStrA.gfs +54 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/jpfgdgml_WStrL.gfs +54 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/leaflet_template.html +102 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/nitf_spec.xml +3508 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/nitf_spec.xsd +178 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/ogr_fields_override.schema.json +278 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/ogrinfo_output.schema.json +532 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/ogrvrt.xsd +526 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/osmconf.ini +134 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/ozi_datum.csv +131 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/ozi_ellips.csv +35 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/pci_datum.txt +530 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/pci_ellips.txt +129 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/pdfcomposition.xsd +703 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/plscenesconf.json +1985 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/ruian_vf_ob_v1.gfs +1455 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/ruian_vf_st_uvoh_v1.gfs +86 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/ruian_vf_st_v1.gfs +1489 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/ruian_vf_v1.gfs +2126 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/s57agencies.csv +249 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/s57attributes.csv +484 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/s57expectedinput.csv +1008 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/s57objectclasses.csv +287 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/seed_2d.dgn +0 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/seed_3d.dgn +0 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/stateplane.csv +259 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/template_tiles.mapml +26 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/tms_LINZAntarticaMapTileGrid.json +190 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/tms_MapML_APSTILE.json +268 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/tms_MapML_CBMTILE.json +346 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/tms_NZTM2000.json +243 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/trailer.dxf +434 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/vdv452.xml +349 -0
- package/dist/prebuilt/wasm-wasm32-st-release/share/gdal/vdv452.xsd +45 -0
- 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
|