GDAL
gdalalgorithm_c.h
1/******************************************************************************
2 *
3 * Project: GDAL
4 * Purpose: GDALAlgorithm C API
5 * Author: Even Rouault <even dot rouault at spatialys.com>
6 *
7 ******************************************************************************
8 * Copyright (c) 2025, Even Rouault <even dot rouault at spatialys.com>
9 *
10 * SPDX-License-Identifier: MIT
11 ****************************************************************************/
12
13#ifndef GDAL_ALGORITHM_C_INCLUDED
14#define GDAL_ALGORITHM_C_INCLUDED
15
16#include "cpl_port.h"
17#include "cpl_progress.h"
18
19#include "gdal.h"
20
21/************************************************************************/
22/************************************************************************/
23/* GDAL Algorithm C API */
24/************************************************************************/
25/************************************************************************/
26
28
30typedef enum
31{
33 GAAT_BOOLEAN,
35 GAAT_STRING,
37 GAAT_INTEGER,
39 GAAT_REAL,
41 GAAT_DATASET,
43 GAAT_STRING_LIST,
45 GAAT_INTEGER_LIST,
47 GAAT_REAL_LIST,
49 GAAT_DATASET_LIST,
50} GDALAlgorithmArgType;
51
53bool CPL_DLL GDALAlgorithmArgTypeIsList(GDALAlgorithmArgType type);
54
56const char CPL_DLL *GDALAlgorithmArgTypeName(GDALAlgorithmArgType type);
57
59typedef struct GDALArgDatasetValueHS *GDALArgDatasetValueH;
60
62typedef struct GDALAlgorithmArgHS *GDALAlgorithmArgH;
63
65typedef struct GDALAlgorithmHS *GDALAlgorithmH;
66
68typedef struct GDALAlgorithmRegistryHS *GDALAlgorithmRegistryH;
69
70/************************************************************************/
71/* GDALAlgorithmRegistryH API */
72/************************************************************************/
73
74GDALAlgorithmRegistryH CPL_DLL GDALGetGlobalAlgorithmRegistry(void);
75
76void CPL_DLL GDALAlgorithmRegistryRelease(GDALAlgorithmRegistryH);
77
78char CPL_DLL **GDALAlgorithmRegistryGetAlgNames(GDALAlgorithmRegistryH);
79
80GDALAlgorithmH CPL_DLL GDALAlgorithmRegistryInstantiateAlg(
81 GDALAlgorithmRegistryH, const char *pszAlgName);
82
83GDALAlgorithmH CPL_DLL GDALAlgorithmRegistryInstantiateAlgFromPath(
84 GDALAlgorithmRegistryH, const char *const *papszAlgPath);
85
86/************************************************************************/
87/* GDALAlgorithmH API */
88/************************************************************************/
89
90void CPL_DLL GDALAlgorithmRelease(GDALAlgorithmH);
91
92const char CPL_DLL *GDALAlgorithmGetName(GDALAlgorithmH);
93
94const char CPL_DLL *GDALAlgorithmGetDescription(GDALAlgorithmH);
95
96const char CPL_DLL *GDALAlgorithmGetLongDescription(GDALAlgorithmH);
97
98const char CPL_DLL *GDALAlgorithmGetHelpFullURL(GDALAlgorithmH);
99
100bool CPL_DLL GDALAlgorithmHasSubAlgorithms(GDALAlgorithmH);
101
102char CPL_DLL **GDALAlgorithmGetSubAlgorithmNames(GDALAlgorithmH);
103
104GDALAlgorithmH CPL_DLL
105GDALAlgorithmInstantiateSubAlgorithm(GDALAlgorithmH, const char *pszSubAlgName);
106
107bool CPL_DLL GDALAlgorithmParseCommandLineArguments(GDALAlgorithmH,
108 CSLConstList papszArgs);
109
110char CPL_DLL **GDALAlgorithmGetArgDependencies(GDALAlgorithmH,
111 const char *pszArgumentName);
112
113GDALAlgorithmH CPL_DLL GDALAlgorithmGetActualAlgorithm(GDALAlgorithmH);
114
115bool CPL_DLL GDALAlgorithmRun(GDALAlgorithmH, GDALProgressFunc pfnProgress,
116 void *pProgressData);
117
118bool CPL_DLL GDALAlgorithmFinalize(GDALAlgorithmH);
119
120char CPL_DLL *GDALAlgorithmGetUsageAsJSON(GDALAlgorithmH);
121
122char CPL_DLL **GDALAlgorithmGetArgNames(GDALAlgorithmH);
123
124GDALAlgorithmArgH CPL_DLL GDALAlgorithmGetArg(GDALAlgorithmH,
125 const char *pszArgName);
126
127GDALAlgorithmArgH CPL_DLL GDALAlgorithmGetArgNonConst(GDALAlgorithmH,
128 const char *pszArgName);
129
130/************************************************************************/
131/* GDALAlgorithmArgH API */
132/************************************************************************/
133
134void CPL_DLL GDALAlgorithmArgRelease(GDALAlgorithmArgH);
135
136const char CPL_DLL *GDALAlgorithmArgGetName(GDALAlgorithmArgH);
137
138GDALAlgorithmArgType CPL_DLL GDALAlgorithmArgGetType(GDALAlgorithmArgH);
139
140const char CPL_DLL *GDALAlgorithmArgGetDescription(GDALAlgorithmArgH);
141
142const char CPL_DLL *GDALAlgorithmArgGetShortName(GDALAlgorithmArgH);
143
144char CPL_DLL **GDALAlgorithmArgGetAliases(GDALAlgorithmArgH);
145
146const char CPL_DLL *GDALAlgorithmArgGetMetaVar(GDALAlgorithmArgH);
147
148const char CPL_DLL *GDALAlgorithmArgGetCategory(GDALAlgorithmArgH);
149
150bool CPL_DLL GDALAlgorithmArgIsPositional(GDALAlgorithmArgH);
151
152bool CPL_DLL GDALAlgorithmArgIsRequired(GDALAlgorithmArgH);
153
154int CPL_DLL GDALAlgorithmArgGetMinCount(GDALAlgorithmArgH);
155
156int CPL_DLL GDALAlgorithmArgGetMaxCount(GDALAlgorithmArgH);
157
158bool CPL_DLL GDALAlgorithmArgGetPackedValuesAllowed(GDALAlgorithmArgH);
159
160bool CPL_DLL GDALAlgorithmArgGetRepeatedArgAllowed(GDALAlgorithmArgH);
161
162char CPL_DLL **GDALAlgorithmArgGetChoices(GDALAlgorithmArgH);
163
164char CPL_DLL **GDALAlgorithmArgGetMetadataItem(GDALAlgorithmArgH, const char *);
165
166bool CPL_DLL GDALAlgorithmArgIsExplicitlySet(GDALAlgorithmArgH);
167
168bool CPL_DLL GDALAlgorithmArgHasDefaultValue(GDALAlgorithmArgH);
169
170bool CPL_DLL GDALAlgorithmArgGetDefaultAsBoolean(GDALAlgorithmArgH);
171
172const char CPL_DLL *GDALAlgorithmArgGetDefaultAsString(GDALAlgorithmArgH);
173
174int CPL_DLL GDALAlgorithmArgGetDefaultAsInteger(GDALAlgorithmArgH);
175
176double CPL_DLL GDALAlgorithmArgGetDefaultAsDouble(GDALAlgorithmArgH);
177
178char CPL_DLL **GDALAlgorithmArgGetDefaultAsStringList(GDALAlgorithmArgH);
179
180const int CPL_DLL *GDALAlgorithmArgGetDefaultAsIntegerList(GDALAlgorithmArgH,
181 size_t *pnCount);
182
183const double CPL_DLL *GDALAlgorithmArgGetDefaultAsDoubleList(GDALAlgorithmArgH,
184 size_t *pnCount);
185
186bool CPL_DLL GDALAlgorithmArgIsHidden(GDALAlgorithmArgH);
187
188bool CPL_DLL GDALAlgorithmArgIsHiddenForCLI(GDALAlgorithmArgH);
189
190bool CPL_DLL GDALAlgorithmArgIsHiddenForAPI(GDALAlgorithmArgH);
191
192bool CPL_DLL GDALAlgorithmArgIsAvailableInPipelineStep(GDALAlgorithmArgH);
193
194#ifndef DOXYGEN_SKIP
195bool CPL_DLL GDALAlgorithmArgIsOnlyForCLI(GDALAlgorithmArgH)
196 CPL_WARN_DEPRECATED("Use GDALAlgorithmArgIsHiddenForAPI() instead");
197#endif
198
199bool CPL_DLL GDALAlgorithmArgIsInput(GDALAlgorithmArgH);
200
201bool CPL_DLL GDALAlgorithmArgIsOutput(GDALAlgorithmArgH);
202
203const char CPL_DLL *GDALAlgorithmArgGetMutualExclusionGroup(GDALAlgorithmArgH);
204
205const char CPL_DLL *GDALAlgorithmArgGetMutualDependencyGroup(GDALAlgorithmArgH);
206
207bool CPL_DLL GDALAlgorithmArgGetAsBoolean(GDALAlgorithmArgH);
208
209const char CPL_DLL *GDALAlgorithmArgGetAsString(GDALAlgorithmArgH);
210
211GDALArgDatasetValueH
212 CPL_DLL GDALAlgorithmArgGetAsDatasetValue(GDALAlgorithmArgH);
213
214int CPL_DLL GDALAlgorithmArgGetAsInteger(GDALAlgorithmArgH);
215
216double CPL_DLL GDALAlgorithmArgGetAsDouble(GDALAlgorithmArgH);
217
218char CPL_DLL **GDALAlgorithmArgGetAsStringList(GDALAlgorithmArgH);
219
220char CPL_DLL **GDALAlgorithmArgGetDirectDependencies(GDALAlgorithmArgH);
221
222const int CPL_DLL *GDALAlgorithmArgGetAsIntegerList(GDALAlgorithmArgH,
223 size_t *pnCount);
224
225const double CPL_DLL *GDALAlgorithmArgGetAsDoubleList(GDALAlgorithmArgH,
226 size_t *pnCount);
227
228bool CPL_DLL GDALAlgorithmArgSetAsBoolean(GDALAlgorithmArgH, bool);
229
230bool CPL_DLL GDALAlgorithmArgSetAsString(GDALAlgorithmArgH, const char *);
231
232bool CPL_DLL GDALAlgorithmArgSetAsDatasetValue(GDALAlgorithmArgH hArg,
233 GDALArgDatasetValueH value);
234
235bool CPL_DLL GDALAlgorithmArgSetDataset(GDALAlgorithmArgH hArg, GDALDatasetH);
236
237bool CPL_DLL GDALAlgorithmArgSetDatasets(GDALAlgorithmArgH hArg, size_t nCount,
238 GDALDatasetH *);
239
240bool CPL_DLL GDALAlgorithmArgSetDatasetNames(GDALAlgorithmArgH hArg,
242
243bool CPL_DLL GDALAlgorithmArgSetAsInteger(GDALAlgorithmArgH, int);
244
245bool CPL_DLL GDALAlgorithmArgSetAsDouble(GDALAlgorithmArgH, double);
246
247bool CPL_DLL GDALAlgorithmArgSetAsStringList(GDALAlgorithmArgH, CSLConstList);
248
249bool CPL_DLL GDALAlgorithmArgSetAsIntegerList(GDALAlgorithmArgH, size_t nCount,
250 const int *pnValues);
251
252bool CPL_DLL GDALAlgorithmArgSetAsDoubleList(GDALAlgorithmArgH, size_t nCount,
253 const double *pnValues);
254
258typedef int GDALArgDatasetType;
259
260GDALArgDatasetType CPL_DLL GDALAlgorithmArgGetDatasetType(GDALAlgorithmArgH);
261
263#define GADV_NAME (1 << 0)
265#define GADV_OBJECT (1 << 1)
266
267int CPL_DLL GDALAlgorithmArgGetDatasetInputFlags(GDALAlgorithmArgH);
268
269int CPL_DLL GDALAlgorithmArgGetDatasetOutputFlags(GDALAlgorithmArgH);
270
271/************************************************************************/
272/* GDALArgDatasetValueH API */
273/************************************************************************/
274
275GDALArgDatasetValueH CPL_DLL GDALArgDatasetValueCreate(void);
276
277void CPL_DLL GDALArgDatasetValueRelease(GDALArgDatasetValueH);
278
279const char CPL_DLL *GDALArgDatasetValueGetName(GDALArgDatasetValueH);
280
281GDALDatasetH CPL_DLL GDALArgDatasetValueGetDatasetRef(GDALArgDatasetValueH);
282
284 CPL_DLL GDALArgDatasetValueGetDatasetIncreaseRefCount(GDALArgDatasetValueH);
285
286void CPL_DLL GDALArgDatasetValueSetName(GDALArgDatasetValueH, const char *);
287
288void CPL_DLL GDALArgDatasetValueSetDataset(GDALArgDatasetValueH, GDALDatasetH);
289
291
292#endif // GDAL_ALGORITHM_C_INCLUDED
Core portability definitions for CPL.
#define CPL_C_END
Macro to end a block of C symbols.
Definition cpl_port.h:279
#define CPL_C_START
Macro to start a block of C symbols.
Definition cpl_port.h:275
char ** CSLConstList
Type of a constant null-terminated list of nul terminated strings.
Definition cpl_port.h:1252
Public (C callable) GDAL entry points.
void * GDALDatasetH
Opaque type used for the C bindings of the C++ GDALDataset class.
Definition gdal_fwd.h:42