Coverage Report

Created: 2025-06-09 07:43

/src/gdal/port/cpl_conv.h
Line
Count
Source (jump to first uncovered line)
1
/******************************************************************************
2
 *
3
 * Project:  CPL - Common Portability Library
4
 * Purpose:  Convenience functions declarations.
5
 *           This is intended to remain light weight.
6
 * Author:   Frank Warmerdam, warmerdam@pobox.com
7
 *
8
 ******************************************************************************
9
 * Copyright (c) 1998, Frank Warmerdam
10
 * Copyright (c) 2007-2013, Even Rouault <even dot rouault at spatialys.com>
11
 *
12
 * SPDX-License-Identifier: MIT
13
 ****************************************************************************/
14
15
#ifndef CPL_CONV_H_INCLUDED
16
#define CPL_CONV_H_INCLUDED
17
18
#include "cpl_port.h"
19
#include "cpl_vsi.h"
20
#include "cpl_error.h"
21
22
/**
23
 * \file cpl_conv.h
24
 *
25
 * Various convenience functions for CPL.
26
 *
27
 */
28
29
/* -------------------------------------------------------------------- */
30
/*      Runtime check of various configuration items.                   */
31
/* -------------------------------------------------------------------- */
32
CPL_C_START
33
34
/*! @cond Doxygen_Suppress */
35
void CPL_DLL CPLVerifyConfiguration(void);
36
/*! @endcond */
37
38
bool CPL_DLL CPLIsDebugEnabled(void);
39
40
const char CPL_DLL *CPL_STDCALL CPLGetConfigOption(const char *, const char *)
41
    CPL_WARN_UNUSED_RESULT;
42
const char CPL_DLL *CPL_STDCALL CPLGetThreadLocalConfigOption(
43
    const char *, const char *) CPL_WARN_UNUSED_RESULT;
44
const char CPL_DLL *CPL_STDCALL
45
CPLGetGlobalConfigOption(const char *, const char *) CPL_WARN_UNUSED_RESULT;
46
void CPL_DLL CPL_STDCALL CPLSetConfigOption(const char *, const char *);
47
void CPL_DLL CPL_STDCALL CPLSetThreadLocalConfigOption(const char *pszKey,
48
                                                       const char *pszValue);
49
void CPL_DLL CPLDeclareKnownConfigOption(const char *pszKey,
50
                                         const char *pszDefinition);
51
char CPL_DLL **CPLGetKnownConfigOptions(void);
52
53
/** Callback for CPLSubscribeToSetConfigOption() */
54
typedef void (*CPLSetConfigOptionSubscriber)(const char *pszKey,
55
                                             const char *pszValue,
56
                                             bool bThreadLocal,
57
                                             void *pUserData);
58
int CPL_DLL CPLSubscribeToSetConfigOption(
59
    CPLSetConfigOptionSubscriber pfnCallback, void *pUserData);
60
void CPL_DLL CPLUnsubscribeToSetConfigOption(int nSubscriberId);
61
62
/*! @cond Doxygen_Suppress */
63
void CPL_DLL CPL_STDCALL CPLFreeConfig(void);
64
/*! @endcond */
65
char CPL_DLL **CPLGetConfigOptions(void);
66
void CPL_DLL CPLSetConfigOptions(const char *const *papszConfigOptions);
67
char CPL_DLL **CPLGetThreadLocalConfigOptions(void);
68
void CPL_DLL
69
CPLSetThreadLocalConfigOptions(const char *const *papszConfigOptions);
70
void CPL_DLL CPLLoadConfigOptionsFromFile(const char *pszFilename,
71
                                          int bOverrideEnvVars);
72
void CPL_DLL CPLLoadConfigOptionsFromPredefinedFiles(void);
73
74
/* -------------------------------------------------------------------- */
75
/*      Safe malloc() API.  Thin cover over VSI functions with fatal    */
76
/*      error reporting if memory allocation fails.                     */
77
/* -------------------------------------------------------------------- */
78
void CPL_DLL *CPLMalloc(size_t) CPL_WARN_UNUSED_RESULT;
79
void CPL_DLL *CPLCalloc(size_t, size_t) CPL_WARN_UNUSED_RESULT;
80
void CPL_DLL *CPLRealloc(void *, size_t) CPL_WARN_UNUSED_RESULT;
81
char CPL_DLL *
82
CPLStrdup(const char *) CPL_WARN_UNUSED_RESULT CPL_RETURNS_NONNULL;
83
char CPL_DLL *CPLStrlwr(char *);
84
85
/** Alias of VSIFree() */
86
41.7M
#define CPLFree VSIFree
87
88
/* -------------------------------------------------------------------- */
89
/*      Read a line from a text file, and strip of CR/LF.               */
90
/* -------------------------------------------------------------------- */
91
char CPL_DLL *CPLFGets(char *, int, FILE *);
92
const char CPL_DLL *CPLReadLine(FILE *);
93
const char CPL_DLL *CPLReadLineL(VSILFILE *);
94
const char CPL_DLL *CPLReadLine2L(VSILFILE *, int, CSLConstList);
95
const char CPL_DLL *CPLReadLine3L(VSILFILE *, int, int *, CSLConstList);
96
97
/* -------------------------------------------------------------------- */
98
/*      Convert ASCII string to floating point number                  */
99
/*      (THESE FUNCTIONS ARE NOT LOCALE AWARE!).                        */
100
/* -------------------------------------------------------------------- */
101
double CPL_DLL CPLAtof(const char *);
102
double CPL_DLL CPLAtofDelim(const char *, char);
103
double CPL_DLL CPLStrtod(const char *, char **);
104
double CPL_DLL CPLStrtodM(const char *, char **);
105
double CPL_DLL CPLStrtodDelim(const char *, char **, char);
106
float CPL_DLL CPLStrtof(const char *, char **);
107
float CPL_DLL CPLStrtofDelim(const char *, char **, char);
108
109
/* -------------------------------------------------------------------- */
110
/*      Convert number to string.  This function is locale agnostic     */
111
/*      (i.e. it will support "," or "." regardless of current locale)  */
112
/* -------------------------------------------------------------------- */
113
double CPL_DLL CPLAtofM(const char *);
114
115
/* -------------------------------------------------------------------- */
116
/*      Read a numeric value from an ASCII character string.            */
117
/* -------------------------------------------------------------------- */
118
char CPL_DLL *CPLScanString(const char *, int, int, int);
119
double CPL_DLL CPLScanDouble(const char *, int);
120
long CPL_DLL CPLScanLong(const char *, int);
121
unsigned long CPL_DLL CPLScanULong(const char *, int);
122
GUIntBig CPL_DLL CPLScanUIntBig(const char *, int);
123
GIntBig CPL_DLL CPLAtoGIntBig(const char *pszString);
124
GIntBig CPL_DLL CPLAtoGIntBigEx(const char *pszString, int bWarn,
125
                                int *pbOverflow);
126
void CPL_DLL *CPLScanPointer(const char *, int);
127
128
/* -------------------------------------------------------------------- */
129
/*      Print a value to an ASCII character string.                     */
130
/* -------------------------------------------------------------------- */
131
int CPL_DLL CPLPrintString(char *, const char *, int);
132
int CPL_DLL CPLPrintStringFill(char *, const char *, int);
133
int CPL_DLL CPLPrintInt32(char *, GInt32, int);
134
int CPL_DLL CPLPrintUIntBig(char *, GUIntBig, int);
135
int CPL_DLL CPLPrintDouble(char *, const char *, double, const char *);
136
int CPL_DLL CPLPrintTime(char *, int, const char *, const struct tm *,
137
                         const char *);
138
int CPL_DLL CPLPrintPointer(char *, void *, int);
139
140
#if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
141
extern "C++"
142
{
143
    std::string CPL_DLL CPLFormatReadableFileSize(uint64_t nSizeInBytes);
144
    std::string CPL_DLL CPLFormatReadableFileSize(double dfSizeInBytes);
145
}
146
#endif
147
148
/* -------------------------------------------------------------------- */
149
/*      Fetch a function from DLL / so.                                 */
150
/* -------------------------------------------------------------------- */
151
152
void CPL_DLL *CPLGetSymbol(const char *, const char *);
153
154
/* -------------------------------------------------------------------- */
155
/*      Fetch executable path.                                          */
156
/* -------------------------------------------------------------------- */
157
int CPL_DLL CPLGetExecPath(char *pszPathBuf, int nMaxLength);
158
159
/* -------------------------------------------------------------------- */
160
/*      Filename handling functions.                                    */
161
/* -------------------------------------------------------------------- */
162
163
#if defined(DOXYGEN_SKIP) || !defined(__cplusplus) ||                          \
164
    !defined(GDAL_COMPILATION) ||                                              \
165
    (defined(__cplusplus) && defined(ALLOW_DEPRECATED_CPL_PATH_FUNCTIONS))
166
const char CPL_DLL *
167
CPLGetPath(const char *) CPL_WARN_UNUSED_RESULT CPL_RETURNS_NONNULL;
168
const char CPL_DLL *
169
CPLGetDirname(const char *) CPL_WARN_UNUSED_RESULT CPL_RETURNS_NONNULL;
170
const char CPL_DLL *
171
CPLGetBasename(const char *) CPL_WARN_UNUSED_RESULT CPL_RETURNS_NONNULL;
172
const char CPL_DLL *
173
CPLGetExtension(const char *) CPL_WARN_UNUSED_RESULT CPL_RETURNS_NONNULL;
174
const char CPL_DLL *CPLFormFilename(
175
    const char *pszPath, const char *pszBasename,
176
    const char *pszExtension) CPL_WARN_UNUSED_RESULT CPL_RETURNS_NONNULL;
177
const char CPL_DLL *CPLFormCIFilename(
178
    const char *pszPath, const char *pszBasename,
179
    const char *pszExtension) CPL_WARN_UNUSED_RESULT CPL_RETURNS_NONNULL;
180
const char CPL_DLL *CPLResetExtension(const char *, const char *)
181
    CPL_WARN_UNUSED_RESULT CPL_RETURNS_NONNULL;
182
const char CPL_DLL *CPLProjectRelativeFilename(const char *pszProjectDir,
183
                                               const char *pszSecondaryFilename)
184
    CPL_WARN_UNUSED_RESULT CPL_RETURNS_NONNULL;
185
const char CPL_DLL *
186
CPLCleanTrailingSlash(const char *) CPL_WARN_UNUSED_RESULT CPL_RETURNS_NONNULL;
187
const char CPL_DLL *CPLGenerateTempFilename(const char *pszStem)
188
    CPL_WARN_UNUSED_RESULT CPL_RETURNS_NONNULL;
189
const char CPL_DLL *CPLExpandTilde(const char *pszFilename)
190
    CPL_WARN_UNUSED_RESULT CPL_RETURNS_NONNULL;
191
const char CPL_DLL *
192
CPLLaunderForFilename(const char *pszName,
193
                      const char *pszOutputPath) CPL_WARN_UNUSED_RESULT;
194
#endif
195
196
char CPL_DLL *CPLGetCurrentDir(void);
197
const char CPL_DLL *
198
CPLGetFilename(const char *) CPL_WARN_UNUSED_RESULT CPL_RETURNS_NONNULL;
199
int CPL_DLL CPLIsFilenameRelative(const char *pszFilename);
200
const char CPL_DLL *CPLExtractRelativePath(const char *, const char *, int *)
201
    CPL_WARN_UNUSED_RESULT CPL_RETURNS_NONNULL;
202
char CPL_DLL **
203
CPLCorrespondingPaths(const char *pszOldFilename, const char *pszNewFilename,
204
                      char **papszFileList) CPL_WARN_UNUSED_RESULT;
205
int CPL_DLL CPLCheckForFile(char *pszFilename, char **papszSiblingList);
206
207
const char CPL_DLL *CPLGetHomeDir(void) CPL_WARN_UNUSED_RESULT;
208
209
#if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
210
211
extern "C++"
212
{
213
    std::string CPL_DLL CPLGetPathSafe(const char *) CPL_WARN_UNUSED_RESULT;
214
    std::string CPL_DLL CPLGetDirnameSafe(const char *) CPL_WARN_UNUSED_RESULT;
215
    std::string CPL_DLL CPLGetBasenameSafe(const char *) CPL_WARN_UNUSED_RESULT;
216
    std::string CPL_DLL CPLGetExtensionSafe(const char *)
217
        CPL_WARN_UNUSED_RESULT;
218
    std::string CPL_DLL CPLFormFilenameSafe(
219
        const char *pszPath, const char *pszBasename,
220
        const char *pszExtension = nullptr) CPL_WARN_UNUSED_RESULT;
221
    std::string CPL_DLL CPLFormCIFilenameSafe(
222
        const char *pszPath, const char *pszBasename,
223
        const char *pszExtension = nullptr) CPL_WARN_UNUSED_RESULT;
224
    std::string CPL_DLL CPLResetExtensionSafe(const char *, const char *)
225
        CPL_WARN_UNUSED_RESULT;
226
    std::string CPL_DLL CPLProjectRelativeFilenameSafe(
227
        const char *pszProjectDir,
228
        const char *pszSecondaryFilename) CPL_WARN_UNUSED_RESULT;
229
    std::string CPL_DLL CPLCleanTrailingSlashSafe(const char *pszPath)
230
        CPL_WARN_UNUSED_RESULT;
231
    std::string CPL_DLL CPLGenerateTempFilenameSafe(const char *pszStem)
232
        CPL_WARN_UNUSED_RESULT;
233
    std::string CPL_DLL CPLExpandTildeSafe(const char *pszFilename)
234
        CPL_WARN_UNUSED_RESULT;
235
    std::string CPL_DLL CPLLaunderForFilenameSafe(
236
        const char *pszName, const char *pszOutputPath) CPL_WARN_UNUSED_RESULT;
237
}
238
239
#endif  // defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
240
241
/* -------------------------------------------------------------------- */
242
/*      Find File Function                                              */
243
/* -------------------------------------------------------------------- */
244
245
/** Callback for CPLPushFileFinder */
246
typedef char const *(*CPLFileFinder)(const char *, const char *);
247
248
const char CPL_DLL *CPLFindFile(const char *pszClass, const char *pszBasename);
249
const char CPL_DLL *CPLDefaultFindFile(const char *pszClass,
250
                                       const char *pszBasename);
251
void CPL_DLL CPLPushFileFinder(CPLFileFinder pfnFinder);
252
CPLFileFinder CPL_DLL CPLPopFileFinder(void);
253
void CPL_DLL CPLPushFinderLocation(const char *);
254
void CPL_DLL CPLPopFinderLocation(void);
255
void CPL_DLL CPLFinderClean(void);
256
257
/* -------------------------------------------------------------------- */
258
/*      Safe version of stat() that works properly on stuff like "C:".  */
259
/* -------------------------------------------------------------------- */
260
int CPL_DLL CPLStat(const char *, VSIStatBuf *) CPL_WARN_UNUSED_RESULT;
261
262
/* -------------------------------------------------------------------- */
263
/*      Reference counted file handle manager.  Makes sharing file      */
264
/*      handles more practical.                                         */
265
/* -------------------------------------------------------------------- */
266
267
/** Information on a shared file */
268
typedef struct
269
{
270
    FILE *fp;          /**< File pointer */
271
    int nRefCount;     /**< Reference counter */
272
    int bLarge;        /**< Whether fp must be interpreted as VSIFILE* */
273
    char *pszFilename; /**< Filename */
274
    char *pszAccess;   /**< Access mode */
275
} CPLSharedFileInfo;
276
277
FILE CPL_DLL *CPLOpenShared(const char *, const char *, int);
278
void CPL_DLL CPLCloseShared(FILE *);
279
CPLSharedFileInfo CPL_DLL *CPLGetSharedList(int *);
280
void CPL_DLL CPLDumpSharedList(FILE *);
281
/*! @cond Doxygen_Suppress */
282
void CPL_DLL CPLCleanupSharedFileMutex(void);
283
/*! @endcond */
284
285
/* -------------------------------------------------------------------- */
286
/*      DMS to Dec to DMS conversion.                                   */
287
/* -------------------------------------------------------------------- */
288
double CPL_DLL CPLDMSToDec(const char *is);
289
const char CPL_DLL *CPLDecToDMS(double dfAngle, const char *pszAxis,
290
                                int nPrecision);
291
double CPL_DLL CPLPackedDMSToDec(double);
292
double CPL_DLL CPLDecToPackedDMS(double dfDec);
293
294
CPLErr CPL_DLL CPLStringToComplex(const char *pszString, double *pdfReal,
295
                                  double *pdfImag);
296
297
/* -------------------------------------------------------------------- */
298
/*      Misc other functions.                                           */
299
/* -------------------------------------------------------------------- */
300
int CPL_DLL CPLUnlinkTree(const char *);
301
int CPL_DLL CPLCopyFile(const char *pszNewPath, const char *pszOldPath);
302
int CPL_DLL CPLCopyTree(const char *pszNewPath, const char *pszOldPath);
303
int CPL_DLL CPLMoveFile(const char *pszNewPath, const char *pszOldPath);
304
int CPL_DLL CPLSymlink(const char *pszOldPath, const char *pszNewPath,
305
                       CSLConstList papszOptions);
306
307
/* -------------------------------------------------------------------- */
308
/*      Lock related functions.                                         */
309
/* -------------------------------------------------------------------- */
310
311
/** Return code of CPLLockFileEx(). */
312
typedef enum
313
{
314
    CLFS_OK,                     /**< CPLLockFileEx() succeeded. */
315
    CLFS_CANNOT_CREATE_LOCK,     /**< Lock file creation failed. */
316
    CLFS_LOCK_BUSY,              /**< Lock already taken (and still alive). */
317
    CLFS_API_MISUSE,             /**< API misuse. */
318
    CLFS_THREAD_CREATION_FAILED, /**< Thread creation failed. */
319
} CPLLockFileStatus;
320
321
/** Handle type returned by CPLLockFileEx(). */
322
typedef struct CPLLockFileStruct *CPLLockFileHandle;
323
324
CPLLockFileStatus CPL_DLL CPLLockFileEx(const char *pszLockFileName,
325
                                        CPLLockFileHandle *phLockFileHandle,
326
                                        CSLConstList papszOptions);
327
328
void CPL_DLL CPLUnlockFileEx(CPLLockFileHandle hLockFileHandle);
329
330
/* -------------------------------------------------------------------- */
331
/*      ZIP Creation.                                                   */
332
/* -------------------------------------------------------------------- */
333
334
/*! @cond Doxygen_Suppress */
335
#define CPL_ZIP_API_OFFERED
336
/*! @endcond */
337
void CPL_DLL *CPLCreateZip(const char *pszZipFilename, char **papszOptions);
338
CPLErr CPL_DLL CPLCreateFileInZip(void *hZip, const char *pszFilename,
339
                                  char **papszOptions);
340
CPLErr CPL_DLL CPLWriteFileInZip(void *hZip, const void *pBuffer,
341
                                 int nBufferSize);
342
CPLErr CPL_DLL CPLCloseFileInZip(void *hZip);
343
CPLErr CPL_DLL CPLAddFileInZip(void *hZip, const char *pszArchiveFilename,
344
                               const char *pszInputFilename, VSILFILE *fpInput,
345
                               CSLConstList papszOptions,
346
                               GDALProgressFunc pProgressFunc,
347
                               void *pProgressData);
348
CPLErr CPL_DLL CPLCloseZip(void *hZip);
349
350
/* -------------------------------------------------------------------- */
351
/*      ZLib compression                                                */
352
/* -------------------------------------------------------------------- */
353
354
void CPL_DLL *CPLZLibDeflate(const void *ptr, size_t nBytes, int nLevel,
355
                             void *outptr, size_t nOutAvailableBytes,
356
                             size_t *pnOutBytes);
357
void CPL_DLL *CPLZLibInflate(const void *ptr, size_t nBytes, void *outptr,
358
                             size_t nOutAvailableBytes, size_t *pnOutBytes);
359
void CPL_DLL *CPLZLibInflateEx(const void *ptr, size_t nBytes, void *outptr,
360
                               size_t nOutAvailableBytes,
361
                               bool bAllowResizeOutptr, size_t *pnOutBytes);
362
363
/* -------------------------------------------------------------------- */
364
/*      XML validation.                                                 */
365
/* -------------------------------------------------------------------- */
366
int CPL_DLL CPLValidateXML(const char *pszXMLFilename,
367
                           const char *pszXSDFilename,
368
                           CSLConstList papszOptions);
369
370
/* -------------------------------------------------------------------- */
371
/*      Locale handling. Prevents parallel executions of setlocale().   */
372
/* -------------------------------------------------------------------- */
373
char *CPLsetlocale(int category, const char *locale);
374
/*! @cond Doxygen_Suppress */
375
void CPLCleanupSetlocaleMutex(void);
376
/*! @endcond */
377
378
/*!
379
    CPLIsPowerOfTwo()
380
    @param i - tested number
381
    @return TRUE if i is power of two otherwise return FALSE
382
*/
383
int CPL_DLL CPLIsPowerOfTwo(unsigned int i);
384
385
/* -------------------------------------------------------------------- */
386
/*      Terminal related                                                */
387
/* -------------------------------------------------------------------- */
388
389
bool CPL_DLL CPLIsInteractive(FILE *f);
390
391
CPL_C_END
392
393
/* -------------------------------------------------------------------- */
394
/*      C++ object for temporarily forcing a LC_NUMERIC locale to "C".  */
395
/* -------------------------------------------------------------------- */
396
397
//! @cond Doxygen_Suppress
398
#if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
399
400
extern "C++"
401
{
402
    class CPL_DLL CPLLocaleC
403
    {
404
        CPL_DISALLOW_COPY_ASSIGN(CPLLocaleC)
405
      public:
406
        CPLLocaleC();
407
        ~CPLLocaleC();
408
409
      private:
410
        char *pszOldLocale;
411
    };
412
413
    // Does the same as CPLLocaleC except that, when available, it tries to
414
    // only affect the current thread. But code that would be dependent of
415
    // setlocale(LC_NUMERIC, NULL) returning "C", such as current proj.4
416
    // versions, will not work depending on the actual implementation
417
    class CPLThreadLocaleCPrivate;
418
419
    class CPL_DLL CPLThreadLocaleC
420
    {
421
        CPL_DISALLOW_COPY_ASSIGN(CPLThreadLocaleC)
422
423
      public:
424
        CPLThreadLocaleC();
425
        ~CPLThreadLocaleC();
426
427
      private:
428
        CPLThreadLocaleCPrivate *m_private;
429
    };
430
}
431
432
#endif /* def __cplusplus */
433
//! @endcond
434
435
/* -------------------------------------------------------------------- */
436
/*      C++ object for temporarily forcing a config option              */
437
/* -------------------------------------------------------------------- */
438
439
//! @cond Doxygen_Suppress
440
#if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
441
442
extern "C++"
443
{
444
    class CPL_DLL CPLConfigOptionSetter
445
    {
446
        CPL_DISALLOW_COPY_ASSIGN(CPLConfigOptionSetter)
447
      public:
448
        CPLConfigOptionSetter(const char *pszKey, const char *pszValue,
449
                              bool bSetOnlyIfUndefined);
450
        ~CPLConfigOptionSetter();
451
452
      private:
453
        char *m_pszKey;
454
        char *m_pszOldValue;
455
        bool m_bRestoreOldValue;
456
    };
457
}
458
459
#endif /* def __cplusplus */
460
//! @endcond
461
462
#if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
463
464
extern "C++"
465
{
466
467
#ifndef DOXYGEN_SKIP
468
#include <type_traits>  // for std::is_base_of
469
#endif
470
471
    namespace cpl
472
    {
473
    /** Use cpl::down_cast<Derived*>(pointer_to_base) as equivalent of
474
     * static_cast<Derived*>(pointer_to_base) with safe checking in debug
475
     * mode.
476
     *
477
     * Only works if no virtual inheritance is involved.
478
     *
479
     * @param f pointer to a base class
480
     * @return pointer to a derived class
481
     */
482
    template <typename To, typename From> inline To down_cast(From *f)
483
10.8M
    {
484
10.8M
        static_assert(
485
10.8M
            (std::is_base_of<From,
486
10.8M
                             typename std::remove_pointer<To>::type>::value),
487
10.8M
            "target type not derived from source type");
488
10.8M
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
10.8M
        return static_cast<To>(f);
490
10.8M
    }
Unexecuted instantiation: OGRPoint* cpl::down_cast<OGRPoint*, OGRGeometry>(OGRGeometry*)
Unexecuted instantiation: OGRPoint const* cpl::down_cast<OGRPoint const*, OGRGeometry const>(OGRGeometry const*)
Unexecuted instantiation: OGRCurve* cpl::down_cast<OGRCurve*, OGRGeometry>(OGRGeometry*)
Unexecuted instantiation: OGRCurve const* cpl::down_cast<OGRCurve const*, OGRGeometry const>(OGRGeometry const*)
Unexecuted instantiation: OGRSimpleCurve* cpl::down_cast<OGRSimpleCurve*, OGRGeometry>(OGRGeometry*)
Unexecuted instantiation: OGRSimpleCurve const* cpl::down_cast<OGRSimpleCurve const*, OGRGeometry const>(OGRGeometry const*)
Unexecuted instantiation: OGRLineString* cpl::down_cast<OGRLineString*, OGRGeometry>(OGRGeometry*)
Unexecuted instantiation: OGRLineString const* cpl::down_cast<OGRLineString const*, OGRGeometry const>(OGRGeometry const*)
OGRLinearRing* cpl::down_cast<OGRLinearRing*, OGRGeometry>(OGRGeometry*)
Line
Count
Source
483
2.63k
    {
484
2.63k
        static_assert(
485
2.63k
            (std::is_base_of<From,
486
2.63k
                             typename std::remove_pointer<To>::type>::value),
487
2.63k
            "target type not derived from source type");
488
2.63k
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
2.63k
        return static_cast<To>(f);
490
2.63k
    }
Unexecuted instantiation: OGRLinearRing const* cpl::down_cast<OGRLinearRing const*, OGRGeometry const>(OGRGeometry const*)
Unexecuted instantiation: OGRCircularString* cpl::down_cast<OGRCircularString*, OGRGeometry>(OGRGeometry*)
Unexecuted instantiation: OGRCircularString const* cpl::down_cast<OGRCircularString const*, OGRGeometry const>(OGRGeometry const*)
Unexecuted instantiation: OGRCompoundCurve* cpl::down_cast<OGRCompoundCurve*, OGRGeometry>(OGRGeometry*)
Unexecuted instantiation: OGRCompoundCurve const* cpl::down_cast<OGRCompoundCurve const*, OGRGeometry const>(OGRGeometry const*)
Unexecuted instantiation: OGRSurface* cpl::down_cast<OGRSurface*, OGRGeometry>(OGRGeometry*)
Unexecuted instantiation: OGRSurface const* cpl::down_cast<OGRSurface const*, OGRGeometry const>(OGRGeometry const*)
Unexecuted instantiation: OGRPolygon* cpl::down_cast<OGRPolygon*, OGRGeometry>(OGRGeometry*)
Unexecuted instantiation: OGRPolygon const* cpl::down_cast<OGRPolygon const*, OGRGeometry const>(OGRGeometry const*)
Unexecuted instantiation: OGRTriangle* cpl::down_cast<OGRTriangle*, OGRGeometry>(OGRGeometry*)
Unexecuted instantiation: OGRTriangle const* cpl::down_cast<OGRTriangle const*, OGRGeometry const>(OGRGeometry const*)
Unexecuted instantiation: OGRCurvePolygon* cpl::down_cast<OGRCurvePolygon*, OGRGeometry>(OGRGeometry*)
Unexecuted instantiation: OGRCurvePolygon const* cpl::down_cast<OGRCurvePolygon const*, OGRGeometry const>(OGRGeometry const*)
Unexecuted instantiation: OGRGeometryCollection* cpl::down_cast<OGRGeometryCollection*, OGRGeometry>(OGRGeometry*)
Unexecuted instantiation: OGRGeometryCollection const* cpl::down_cast<OGRGeometryCollection const*, OGRGeometry const>(OGRGeometry const*)
Unexecuted instantiation: OGRMultiPoint* cpl::down_cast<OGRMultiPoint*, OGRGeometry>(OGRGeometry*)
Unexecuted instantiation: OGRMultiPoint const* cpl::down_cast<OGRMultiPoint const*, OGRGeometry const>(OGRGeometry const*)
Unexecuted instantiation: OGRMultiLineString* cpl::down_cast<OGRMultiLineString*, OGRGeometry>(OGRGeometry*)
Unexecuted instantiation: OGRMultiLineString const* cpl::down_cast<OGRMultiLineString const*, OGRGeometry const>(OGRGeometry const*)
Unexecuted instantiation: OGRMultiPolygon* cpl::down_cast<OGRMultiPolygon*, OGRGeometry>(OGRGeometry*)
Unexecuted instantiation: OGRMultiPolygon const* cpl::down_cast<OGRMultiPolygon const*, OGRGeometry const>(OGRGeometry const*)
Unexecuted instantiation: OGRMultiCurve* cpl::down_cast<OGRMultiCurve*, OGRGeometry>(OGRGeometry*)
Unexecuted instantiation: OGRMultiCurve const* cpl::down_cast<OGRMultiCurve const*, OGRGeometry const>(OGRGeometry const*)
Unexecuted instantiation: OGRMultiSurface* cpl::down_cast<OGRMultiSurface*, OGRGeometry>(OGRGeometry*)
Unexecuted instantiation: OGRMultiSurface const* cpl::down_cast<OGRMultiSurface const*, OGRGeometry const>(OGRGeometry const*)
Unexecuted instantiation: OGRPolyhedralSurface* cpl::down_cast<OGRPolyhedralSurface*, OGRGeometry>(OGRGeometry*)
Unexecuted instantiation: OGRPolyhedralSurface const* cpl::down_cast<OGRPolyhedralSurface const*, OGRGeometry const>(OGRGeometry const*)
Unexecuted instantiation: OGRTriangulatedSurface* cpl::down_cast<OGRTriangulatedSurface*, OGRGeometry>(OGRGeometry*)
Unexecuted instantiation: OGRTriangulatedSurface const* cpl::down_cast<OGRTriangulatedSurface const*, OGRGeometry const>(OGRGeometry const*)
Unexecuted instantiation: OGRSimpleCurve* cpl::down_cast<OGRSimpleCurve*, OGRCurve>(OGRCurve*)
Unexecuted instantiation: OGRSimpleCurve const* cpl::down_cast<OGRSimpleCurve const*, OGRCurve const>(OGRCurve const*)
Unexecuted instantiation: cpl::VSIADLSFSHandler* cpl::down_cast<cpl::VSIADLSFSHandler*, cpl::VSICurlFilesystemHandlerBase>(cpl::VSICurlFilesystemHandlerBase*)
Unexecuted instantiation: cpl::VSIAzureFSHandler* cpl::down_cast<cpl::VSIAzureFSHandler*, cpl::VSICurlFilesystemHandlerBase>(cpl::VSICurlFilesystemHandlerBase*)
Unexecuted instantiation: VSIGZipFilesystemHandler* cpl::down_cast<VSIGZipFilesystemHandler*, VSIFilesystemHandler>(VSIFilesystemHandler*)
Unexecuted instantiation: OGRStylePen* cpl::down_cast<OGRStylePen*, OGRStyleTool>(OGRStyleTool*)
Unexecuted instantiation: GMLReader* cpl::down_cast<GMLReader*, IGMLReader>(IGMLReader*)
Unexecuted instantiation: OGRPGDumpGeomFieldDefn* cpl::down_cast<OGRPGDumpGeomFieldDefn*, OGRGeomFieldDefn>(OGRGeomFieldDefn*)
Unexecuted instantiation: OpenFileGDB::FileGDBGeomField* cpl::down_cast<OpenFileGDB::FileGDBGeomField*, OpenFileGDB::FileGDBField>(OpenFileGDB::FileGDBField*)
Unexecuted instantiation: OGROpenFileGDBGeomFieldDefn* cpl::down_cast<OGROpenFileGDBGeomFieldDefn*, OGRGeomFieldDefn>(OGRGeomFieldDefn*)
Unexecuted instantiation: OpenFileGDB::FileGDBGeomField const* cpl::down_cast<OpenFileGDB::FileGDBGeomField const*, OpenFileGDB::FileGDBField>(OpenFileGDB::FileGDBField*)
Unexecuted instantiation: OGRStyleBrush* cpl::down_cast<OGRStyleBrush*, OGRStyleTool>(OGRStyleTool*)
Unexecuted instantiation: OGRSQLiteGeomFieldDefn* cpl::down_cast<OGRSQLiteGeomFieldDefn*, OGRGeomFieldDefn>(OGRGeomFieldDefn*)
Unexecuted instantiation: GDALGPKGMBTilesLikeRasterBand* cpl::down_cast<GDALGPKGMBTilesLikeRasterBand*, GDALRasterBand>(GDALRasterBand*)
GDALGeoPackageDataset* cpl::down_cast<GDALGeoPackageDataset*, GDALDataset>(GDALDataset*)
Line
Count
Source
483
24
    {
484
24
        static_assert(
485
24
            (std::is_base_of<From,
486
24
                             typename std::remove_pointer<To>::type>::value),
487
24
            "target type not derived from source type");
488
24
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
24
        return static_cast<To>(f);
490
24
    }
Unexecuted instantiation: GDALGeoPackageRasterBand* cpl::down_cast<GDALGeoPackageRasterBand*, GDALRasterBand>(GDALRasterBand*)
Unexecuted instantiation: OGRILI1Layer* cpl::down_cast<OGRILI1Layer*, OGRLayer>(OGRLayer*)
Unexecuted instantiation: GDALInConstructionAlgorithmArg* cpl::down_cast<GDALInConstructionAlgorithmArg*, GDALAlgorithmArg>(GDALAlgorithmArg*)
GDALPamRasterBand* cpl::down_cast<GDALPamRasterBand*, GDALRasterBand>(GDALRasterBand*)
Line
Count
Source
483
668k
    {
484
668k
        static_assert(
485
668k
            (std::is_base_of<From,
486
668k
                             typename std::remove_pointer<To>::type>::value),
487
668k
            "target type not derived from source type");
488
668k
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
668k
        return static_cast<To>(f);
490
668k
    }
GDALProxyPoolDataset* cpl::down_cast<GDALProxyPoolDataset*, GDALDataset>(GDALDataset*)
Line
Count
Source
483
193k
    {
484
193k
        static_assert(
485
193k
            (std::is_base_of<From,
486
193k
                             typename std::remove_pointer<To>::type>::value),
487
193k
            "target type not derived from source type");
488
193k
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
193k
        return static_cast<To>(f);
490
193k
    }
Unexecuted instantiation: GDALOverviewBand* cpl::down_cast<GDALOverviewBand*, GDALRasterBand>(GDALRasterBand*)
Unexecuted instantiation: GDALOverviewDataset* cpl::down_cast<GDALOverviewDataset*, GDALDataset>(GDALDataset*)
VRTSourcedRasterBand* cpl::down_cast<VRTSourcedRasterBand*, GDALRasterBand>(GDALRasterBand*)
Line
Count
Source
483
4.97k
    {
484
4.97k
        static_assert(
485
4.97k
            (std::is_base_of<From,
486
4.97k
                             typename std::remove_pointer<To>::type>::value),
487
4.97k
            "target type not derived from source type");
488
4.97k
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
4.97k
        return static_cast<To>(f);
490
4.97k
    }
Unexecuted instantiation: GDALMDArrayResampledDataset* cpl::down_cast<GDALMDArrayResampledDataset*, GDALDataset>(GDALDataset*)
Unexecuted instantiation: GDALDatasetFromArray* cpl::down_cast<GDALDatasetFromArray*, GDALDataset>(GDALDataset*)
Unexecuted instantiation: OGRLinearRing* cpl::down_cast<OGRLinearRing*, OGRCurve>(OGRCurve*)
Unexecuted instantiation: OGRCodedFieldDomain* cpl::down_cast<OGRCodedFieldDomain*, OGRFieldDomain>(OGRFieldDomain*)
JPGDatasetCommon* cpl::down_cast<JPGDatasetCommon*, GDALDataset>(GDALDataset*)
Line
Count
Source
483
512
    {
484
512
        static_assert(
485
512
            (std::is_base_of<From,
486
512
                             typename std::remove_pointer<To>::type>::value),
487
512
            "target type not derived from source type");
488
512
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
512
        return static_cast<To>(f);
490
512
    }
Unexecuted instantiation: MEMRasterBand* cpl::down_cast<MEMRasterBand*, GDALRasterBand>(GDALRasterBand*)
VRTDataset* cpl::down_cast<VRTDataset*, GDALDataset>(GDALDataset*)
Line
Count
Source
483
425
    {
484
425
        static_assert(
485
425
            (std::is_base_of<From,
486
425
                             typename std::remove_pointer<To>::type>::value),
487
425
            "target type not derived from source type");
488
425
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
425
        return static_cast<To>(f);
490
425
    }
VRTSimpleSource* cpl::down_cast<VRTSimpleSource*, VRTSource>(VRTSource*)
Line
Count
Source
483
4.96k
    {
484
4.96k
        static_assert(
485
4.96k
            (std::is_base_of<From,
486
4.96k
                             typename std::remove_pointer<To>::type>::value),
487
4.96k
            "target type not derived from source type");
488
4.96k
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
4.96k
        return static_cast<To>(f);
490
4.96k
    }
Unexecuted instantiation: VRTComplexSource* cpl::down_cast<VRTComplexSource*, VRTSource>(VRTSource*)
Unexecuted instantiation: GDALProxyPoolRasterBand* cpl::down_cast<GDALProxyPoolRasterBand*, GDALRasterBand>(GDALRasterBand*)
VRTRasterBand* cpl::down_cast<VRTRasterBand*, GDALRasterBand>(GDALRasterBand*)
Line
Count
Source
483
4.83k
    {
484
4.83k
        static_assert(
485
4.83k
            (std::is_base_of<From,
486
4.83k
                             typename std::remove_pointer<To>::type>::value),
487
4.83k
            "target type not derived from source type");
488
4.83k
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
4.83k
        return static_cast<To>(f);
490
4.83k
    }
Unexecuted instantiation: VRTComplexSource* cpl::down_cast<VRTComplexSource*, VRTSimpleSource>(VRTSimpleSource*)
Unexecuted instantiation: VRTSourcedRasterBand* cpl::down_cast<VRTSourcedRasterBand*, VRTRasterBand>(VRTRasterBand*)
Unexecuted instantiation: VRTProcessedDataset* cpl::down_cast<VRTProcessedDataset*, GDALDataset>(GDALDataset*)
Unexecuted instantiation: GDALTileIndexBand* cpl::down_cast<GDALTileIndexBand*, GDALRasterBand>(GDALRasterBand*)
LIBERTIFFDataset* cpl::down_cast<LIBERTIFFDataset*, GDALDataset>(GDALDataset*)
Line
Count
Source
483
8.67k
    {
484
8.67k
        static_assert(
485
8.67k
            (std::is_base_of<From,
486
8.67k
                             typename std::remove_pointer<To>::type>::value),
487
8.67k
            "target type not derived from source type");
488
8.67k
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
8.67k
        return static_cast<To>(f);
490
8.67k
    }
LIBERTIFFBand* cpl::down_cast<LIBERTIFFBand*, GDALRasterBand>(GDALRasterBand*)
Line
Count
Source
483
7.07k
    {
484
7.07k
        static_assert(
485
7.07k
            (std::is_base_of<From,
486
7.07k
                             typename std::remove_pointer<To>::type>::value),
487
7.07k
            "target type not derived from source type");
488
7.07k
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
7.07k
        return static_cast<To>(f);
490
7.07k
    }
HFADataset* cpl::down_cast<HFADataset*, GDALDataset>(GDALDataset*)
Line
Count
Source
483
34
    {
484
34
        static_assert(
485
34
            (std::is_base_of<From,
486
34
                             typename std::remove_pointer<To>::type>::value),
487
34
            "target type not derived from source type");
488
34
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
34
        return static_cast<To>(f);
490
34
    }
GDALPamDataset* cpl::down_cast<GDALPamDataset*, GDALDataset>(GDALDataset*)
Line
Count
Source
483
21
    {
484
21
        static_assert(
485
21
            (std::is_base_of<From,
486
21
                             typename std::remove_pointer<To>::type>::value),
487
21
            "target type not derived from source type");
488
21
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
21
        return static_cast<To>(f);
490
21
    }
Unexecuted instantiation: GXFDataset* cpl::down_cast<GXFDataset*, GDALDataset>(GDALDataset*)
CEOSDataset* cpl::down_cast<CEOSDataset*, GDALDataset>(GDALDataset*)
Line
Count
Source
483
91
    {
484
91
        static_assert(
485
91
            (std::is_base_of<From,
486
91
                             typename std::remove_pointer<To>::type>::value),
487
91
            "target type not derived from source type");
488
91
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
91
        return static_cast<To>(f);
490
91
    }
Unexecuted instantiation: SAR_CEOSDataset* cpl::down_cast<SAR_CEOSDataset*, GDALDataset>(GDALDataset*)
DTEDDataset* cpl::down_cast<DTEDDataset*, GDALDataset>(GDALDataset*)
Line
Count
Source
483
1.09k
    {
484
1.09k
        static_assert(
485
1.09k
            (std::is_base_of<From,
486
1.09k
                             typename std::remove_pointer<To>::type>::value),
487
1.09k
            "target type not derived from source type");
488
1.09k
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
1.09k
        return static_cast<To>(f);
490
1.09k
    }
JDEMDataset* cpl::down_cast<JDEMDataset*, GDALDataset>(GDALDataset*)
Line
Count
Source
483
1
    {
484
1
        static_assert(
485
1
            (std::is_base_of<From,
486
1
                             typename std::remove_pointer<To>::type>::value),
487
1
            "target type not derived from source type");
488
1
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
1
        return static_cast<To>(f);
490
1
    }
L1BDataset* cpl::down_cast<L1BDataset*, GDALDataset>(GDALDataset*)
Line
Count
Source
483
3.37k
    {
484
3.37k
        static_assert(
485
3.37k
            (std::is_base_of<From,
486
3.37k
                             typename std::remove_pointer<To>::type>::value),
487
3.37k
            "target type not derived from source type");
488
3.37k
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
3.37k
        return static_cast<To>(f);
490
3.37k
    }
Unexecuted instantiation: L1BGeolocDataset* cpl::down_cast<L1BGeolocDataset*, GDALDataset>(GDALDataset*)
Unexecuted instantiation: L1BSolarZenithAnglesDataset* cpl::down_cast<L1BSolarZenithAnglesDataset*, GDALDataset>(GDALDataset*)
Unexecuted instantiation: L1BNOAA15AnglesDataset* cpl::down_cast<L1BNOAA15AnglesDataset*, GDALDataset>(GDALDataset*)
Unexecuted instantiation: L1BCloudsDataset* cpl::down_cast<L1BCloudsDataset*, GDALDataset>(GDALDataset*)
Unexecuted instantiation: GDAL::ILWISDataset* cpl::down_cast<GDAL::ILWISDataset*, GDALDataset>(GDALDataset*)
Unexecuted instantiation: GDAL::ILWISRasterBand* cpl::down_cast<GDAL::ILWISRasterBand*, GDALRasterBand>(GDALRasterBand*)
RMFDataset* cpl::down_cast<RMFDataset*, GDALDataset>(GDALDataset*)
Line
Count
Source
483
2.93k
    {
484
2.93k
        static_assert(
485
2.93k
            (std::is_base_of<From,
486
2.93k
                             typename std::remove_pointer<To>::type>::value),
487
2.93k
            "target type not derived from source type");
488
2.93k
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
2.93k
        return static_cast<To>(f);
490
2.93k
    }
Unexecuted instantiation: IdrisiRasterBand* cpl::down_cast<IdrisiRasterBand*, GDALRasterBand>(GDALRasterBand*)
Unexecuted instantiation: IdrisiDataset* cpl::down_cast<IdrisiDataset*, GDALDataset>(GDALDataset*)
GS7BGDataset* cpl::down_cast<GS7BGDataset*, GDALDataset>(GDALDataset*)
Line
Count
Source
483
20
    {
484
20
        static_assert(
485
20
            (std::is_base_of<From,
486
20
                             typename std::remove_pointer<To>::type>::value),
487
20
            "target type not derived from source type");
488
20
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
20
        return static_cast<To>(f);
490
20
    }
GS7BGRasterBand* cpl::down_cast<GS7BGRasterBand*, GDALRasterBand>(GDALRasterBand*)
Line
Count
Source
483
1
    {
484
1
        static_assert(
485
1
            (std::is_base_of<From,
486
1
                             typename std::remove_pointer<To>::type>::value),
487
1
            "target type not derived from source type");
488
1
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
1
        return static_cast<To>(f);
490
1
    }
Unexecuted instantiation: GSBGDataset* cpl::down_cast<GSBGDataset*, GDALDataset>(GDALDataset*)
Unexecuted instantiation: GSBGRasterBand* cpl::down_cast<GSBGRasterBand*, GDALRasterBand>(GDALRasterBand*)
ERSDataset* cpl::down_cast<ERSDataset*, GDALDataset>(GDALDataset*)
Line
Count
Source
483
17
    {
484
17
        static_assert(
485
17
            (std::is_base_of<From,
486
17
                             typename std::remove_pointer<To>::type>::value),
487
17
            "target type not derived from source type");
488
17
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
17
        return static_cast<To>(f);
490
17
    }
Unexecuted instantiation: DIMAPRasterBand* cpl::down_cast<DIMAPRasterBand*, GDALRasterBand>(GDALRasterBand*)
Unexecuted instantiation: GFFDataset* cpl::down_cast<GFFDataset*, GDALDataset>(GDALDataset*)
Unexecuted instantiation: COSARDataset* cpl::down_cast<COSARDataset*, COSARDataset>(COSARDataset*)
Unexecuted instantiation: COSARDataset* cpl::down_cast<COSARDataset*, GDALDataset>(GDALDataset*)
Unexecuted instantiation: PDS4FixedWidthTable* cpl::down_cast<PDS4FixedWidthTable*, OGRLayer>(OGRLayer*)
Unexecuted instantiation: PDS4DelimitedTable* cpl::down_cast<PDS4DelimitedTable*, OGRLayer>(OGRLayer*)
Unexecuted instantiation: PDS4TableBaseLayer* cpl::down_cast<PDS4TableBaseLayer*, OGRLayer>(OGRLayer*)
Unexecuted instantiation: ADRGDataset* cpl::down_cast<ADRGDataset*, GDALDataset>(GDALDataset*)
Unexecuted instantiation: SRPDataset* cpl::down_cast<SRPDataset*, GDALDataset>(GDALDataset*)
Unexecuted instantiation: MSGNDataset* cpl::down_cast<MSGNDataset*, GDALDataset>(GDALDataset*)
NWT_GRDDataset* cpl::down_cast<NWT_GRDDataset*, GDALDataset>(GDALDataset*)
Line
Count
Source
483
5.47k
    {
484
5.47k
        static_assert(
485
5.47k
            (std::is_base_of<From,
486
5.47k
                             typename std::remove_pointer<To>::type>::value),
487
5.47k
            "target type not derived from source type");
488
5.47k
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
5.47k
        return static_cast<To>(f);
490
5.47k
    }
NWT_GRCDataset* cpl::down_cast<NWT_GRCDataset*, GDALDataset>(GDALDataset*)
Line
Count
Source
483
182
    {
484
182
        static_assert(
485
182
            (std::is_base_of<From,
486
182
                             typename std::remove_pointer<To>::type>::value),
487
182
            "target type not derived from source type");
488
182
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
182
        return static_cast<To>(f);
490
182
    }
Unexecuted instantiation: HF2Dataset* cpl::down_cast<HF2Dataset*, GDALDataset>(GDALDataset*)
Unexecuted instantiation: KmlSuperOverlayReadDataset* cpl::down_cast<KmlSuperOverlayReadDataset*, GDALDataset>(GDALDataset*)
Unexecuted instantiation: KmlSingleDocRasterDataset* cpl::down_cast<KmlSingleDocRasterDataset*, GDALDataset>(GDALDataset*)
CTGDataset* cpl::down_cast<CTGDataset*, GDALDataset>(GDALDataset*)
Line
Count
Source
483
6
    {
484
6
        static_assert(
485
6
            (std::is_base_of<From,
486
6
                             typename std::remove_pointer<To>::type>::value),
487
6
            "target type not derived from source type");
488
6
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
6
        return static_cast<To>(f);
490
6
    }
Unexecuted instantiation: ZMapDataset* cpl::down_cast<ZMapDataset*, GDALDataset>(GDALDataset*)
WMTSDataset* cpl::down_cast<WMTSDataset*, GDALDataset>(GDALDataset*)
Line
Count
Source
483
620
    {
484
620
        static_assert(
485
620
            (std::is_base_of<From,
486
620
                             typename std::remove_pointer<To>::type>::value),
487
620
            "target type not derived from source type");
488
620
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
620
        return static_cast<To>(f);
490
620
    }
BMPDataset* cpl::down_cast<BMPDataset*, GDALDataset>(GDALDataset*)
Line
Count
Source
483
1.28k
    {
484
1.28k
        static_assert(
485
1.28k
            (std::is_base_of<From,
486
1.28k
                             typename std::remove_pointer<To>::type>::value),
487
1.28k
            "target type not derived from source type");
488
1.28k
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
1.28k
        return static_cast<To>(f);
490
1.28k
    }
STACTADataset* cpl::down_cast<STACTADataset*, GDALDataset>(GDALDataset*)
Line
Count
Source
483
44
    {
484
44
        static_assert(
485
44
            (std::is_base_of<From,
486
44
                             typename std::remove_pointer<To>::type>::value),
487
44
            "target type not derived from source type");
488
44
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
44
        return static_cast<To>(f);
490
44
    }
STACTARawDataset* cpl::down_cast<STACTARawDataset*, GDALDataset>(GDALDataset*)
Line
Count
Source
483
24
    {
484
24
        static_assert(
485
24
            (std::is_base_of<From,
486
24
                             typename std::remove_pointer<To>::type>::value),
487
24
            "target type not derived from source type");
488
24
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
24
        return static_cast<To>(f);
490
24
    }
BSBDataset* cpl::down_cast<BSBDataset*, GDALDataset>(GDALDataset*)
Line
Count
Source
483
2.90k
    {
484
2.90k
        static_assert(
485
2.90k
            (std::is_base_of<From,
486
2.90k
                             typename std::remove_pointer<To>::type>::value),
487
2.90k
            "target type not derived from source type");
488
2.90k
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
2.90k
        return static_cast<To>(f);
490
2.90k
    }
Unexecuted instantiation: AIGDataset* cpl::down_cast<AIGDataset*, GDALDataset>(GDALDataset*)
Unexecuted instantiation: AirSARDataset* cpl::down_cast<AirSARDataset*, GDALDataset>(GDALDataset*)
PDFDataset* cpl::down_cast<PDFDataset*, GDALDataset>(GDALDataset*)
Line
Count
Source
483
8.02M
    {
484
8.02M
        static_assert(
485
8.02M
            (std::is_base_of<From,
486
8.02M
                             typename std::remove_pointer<To>::type>::value),
487
8.02M
            "target type not derived from source type");
488
8.02M
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
8.02M
        return static_cast<To>(f);
490
8.02M
    }
PDFRasterBand* cpl::down_cast<PDFRasterBand*, GDALRasterBand>(GDALRasterBand*)
Line
Count
Source
483
8
    {
484
8
        static_assert(
485
8
            (std::is_base_of<From,
486
8
                             typename std::remove_pointer<To>::type>::value),
487
8
            "target type not derived from source type");
488
8
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
8
        return static_cast<To>(f);
490
8
    }
GDALPDFObjectPoppler* cpl::down_cast<GDALPDFObjectPoppler*, GDALPDFObject>(GDALPDFObject*)
Line
Count
Source
483
11.0k
    {
484
11.0k
        static_assert(
485
11.0k
            (std::is_base_of<From,
486
11.0k
                             typename std::remove_pointer<To>::type>::value),
487
11.0k
            "target type not derived from source type");
488
11.0k
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
11.0k
        return static_cast<To>(f);
490
11.0k
    }
PNGDataset* cpl::down_cast<PNGDataset*, GDALDataset>(GDALDataset*)
Line
Count
Source
483
5.63k
    {
484
5.63k
        static_assert(
485
5.63k
            (std::is_base_of<From,
486
5.63k
                             typename std::remove_pointer<To>::type>::value),
487
5.63k
            "target type not derived from source type");
488
5.63k
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
5.63k
        return static_cast<To>(f);
490
5.63k
    }
Unexecuted instantiation: PNGRasterBand* cpl::down_cast<PNGRasterBand*, GDALRasterBand>(GDALRasterBand*)
BIGGIFDataset* cpl::down_cast<BIGGIFDataset*, GDALDataset>(GDALDataset*)
Line
Count
Source
483
3.20k
    {
484
3.20k
        static_assert(
485
3.20k
            (std::is_base_of<From,
486
3.20k
                             typename std::remove_pointer<To>::type>::value),
487
3.20k
            "target type not derived from source type");
488
3.20k
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
3.20k
        return static_cast<To>(f);
490
3.20k
    }
Unexecuted instantiation: netCDFDataset* cpl::down_cast<netCDFDataset*, GDALDataset>(GDALDataset*)
Unexecuted instantiation: nccfdriver::OGR_SGFS_NC_Transaction_Generic<signed char, 1>* cpl::down_cast<nccfdriver::OGR_SGFS_NC_Transaction_Generic<signed char, 1>*, nccfdriver::OGR_SGFS_Transaction>(nccfdriver::OGR_SGFS_Transaction*)
Unexecuted instantiation: nccfdriver::OGR_SGFS_NC_Transaction_Generic<short, 3>* cpl::down_cast<nccfdriver::OGR_SGFS_NC_Transaction_Generic<short, 3>*, nccfdriver::OGR_SGFS_Transaction>(nccfdriver::OGR_SGFS_Transaction*)
Unexecuted instantiation: nccfdriver::OGR_SGFS_NC_Transaction_Generic<int, 4>* cpl::down_cast<nccfdriver::OGR_SGFS_NC_Transaction_Generic<int, 4>*, nccfdriver::OGR_SGFS_Transaction>(nccfdriver::OGR_SGFS_Transaction*)
Unexecuted instantiation: nccfdriver::OGR_SGFS_NC_Transaction_Generic<float, 5>* cpl::down_cast<nccfdriver::OGR_SGFS_NC_Transaction_Generic<float, 5>*, nccfdriver::OGR_SGFS_Transaction>(nccfdriver::OGR_SGFS_Transaction*)
Unexecuted instantiation: nccfdriver::OGR_SGFS_NC_Transaction_Generic<double, 6>* cpl::down_cast<nccfdriver::OGR_SGFS_NC_Transaction_Generic<double, 6>*, nccfdriver::OGR_SGFS_Transaction>(nccfdriver::OGR_SGFS_Transaction*)
Unexecuted instantiation: nccfdriver::OGR_SGFS_NC_Transaction_Generic<unsigned int, 9>* cpl::down_cast<nccfdriver::OGR_SGFS_NC_Transaction_Generic<unsigned int, 9>*, nccfdriver::OGR_SGFS_Transaction>(nccfdriver::OGR_SGFS_Transaction*)
Unexecuted instantiation: nccfdriver::OGR_SGFS_NC_Transaction_Generic<unsigned long long, 11>* cpl::down_cast<nccfdriver::OGR_SGFS_NC_Transaction_Generic<unsigned long long, 11>*, nccfdriver::OGR_SGFS_Transaction>(nccfdriver::OGR_SGFS_Transaction*)
Unexecuted instantiation: nccfdriver::OGR_SGFS_NC_Transaction_Generic<long long, 10>* cpl::down_cast<nccfdriver::OGR_SGFS_NC_Transaction_Generic<long long, 10>*, nccfdriver::OGR_SGFS_Transaction>(nccfdriver::OGR_SGFS_Transaction*)
Unexecuted instantiation: nccfdriver::OGR_SGFS_NC_Transaction_Generic<unsigned char, 7>* cpl::down_cast<nccfdriver::OGR_SGFS_NC_Transaction_Generic<unsigned char, 7>*, nccfdriver::OGR_SGFS_Transaction>(nccfdriver::OGR_SGFS_Transaction*)
Unexecuted instantiation: nccfdriver::OGR_SGFS_NC_Transaction_Generic<unsigned short, 8>* cpl::down_cast<nccfdriver::OGR_SGFS_NC_Transaction_Generic<unsigned short, 8>*, nccfdriver::OGR_SGFS_Transaction>(nccfdriver::OGR_SGFS_Transaction*)
Unexecuted instantiation: ZarrRasterBand* cpl::down_cast<ZarrRasterBand*, GDALRasterBand>(GDALRasterBand*)
Unexecuted instantiation: ZarrDataset* cpl::down_cast<ZarrDataset*, GDALDataset>(GDALDataset*)
Unexecuted instantiation: VSIKerchunkJSONRefFileSystem* cpl::down_cast<VSIKerchunkJSONRefFileSystem*, VSIFilesystemHandler>(VSIFilesystemHandler*)
Unexecuted instantiation: GDALDAASRasterBand* cpl::down_cast<GDALDAASRasterBand*, GDALRasterBand>(GDALRasterBand*)
Unexecuted instantiation: GDALEEDAIRasterBand* cpl::down_cast<GDALEEDAIRasterBand*, GDALRasterBand>(GDALRasterBand*)
Unexecuted instantiation: OGCAPIDataset* cpl::down_cast<OGCAPIDataset*, GDALDataset>(GDALDataset*)
Unexecuted instantiation: TABMAPIndexBlock* cpl::down_cast<TABMAPIndexBlock*, TABRawBinBlock>(TABRawBinBlock*)
Unexecuted instantiation: TABMAPHeaderBlock* cpl::down_cast<TABMAPHeaderBlock*, TABRawBinBlock>(TABRawBinBlock*)
Unexecuted instantiation: TABMAPObjectBlock* cpl::down_cast<TABMAPObjectBlock*, TABRawBinBlock>(TABRawBinBlock*)
Unexecuted instantiation: TABMAPCoordBlock* cpl::down_cast<TABMAPCoordBlock*, TABRawBinBlock>(TABRawBinBlock*)
Unexecuted instantiation: TABMAPObjHdrWithCoord* cpl::down_cast<TABMAPObjHdrWithCoord*, TABMAPObjHdr>(TABMAPObjHdr*)
Unexecuted instantiation: TABText* cpl::down_cast<TABText*, TABFeature>(TABFeature*)
Unexecuted instantiation: TABPoint* cpl::down_cast<TABPoint*, TABFeature>(TABFeature*)
Unexecuted instantiation: TABRegion* cpl::down_cast<TABRegion*, TABFeature>(TABFeature*)
Unexecuted instantiation: TABPolyline* cpl::down_cast<TABPolyline*, TABFeature>(TABFeature*)
Unexecuted instantiation: TABFeature* cpl::down_cast<TABFeature*, OGRFeature>(OGRFeature*)
Unexecuted instantiation: OGRShapeLayer* cpl::down_cast<OGRShapeLayer*, OGRLayer>(OGRLayer*)
Unexecuted instantiation: OGRShapeGeomFieldDefn* cpl::down_cast<OGRShapeGeomFieldDefn*, OGRGeomFieldDefn>(OGRGeomFieldDefn*)
Unexecuted instantiation: OGRProxiedLayer* cpl::down_cast<OGRProxiedLayer*, OGRLayer>(OGRLayer*)
Unexecuted instantiation: OGRVRTLayer* cpl::down_cast<OGRVRTLayer*, OGRLayer>(OGRLayer*)
Unexecuted instantiation: OGRVRTDataSource* cpl::down_cast<OGRVRTDataSource*, GDALDataset>(GDALDataset*)
Unexecuted instantiation: OGRCSVEditableLayerSynchronizer* cpl::down_cast<OGRCSVEditableLayerSynchronizer*, IOGREditableLayerSynchronizer>(IOGREditableLayerSynchronizer*)
Unexecuted instantiation: OGRStyleSymbol* cpl::down_cast<OGRStyleSymbol*, OGRStyleTool>(OGRStyleTool*)
Unexecuted instantiation: OGRStyleLabel* cpl::down_cast<OGRStyleLabel*, OGRStyleTool>(OGRStyleTool*)
Unexecuted instantiation: OpenFileGDB::FileGDBRasterField const* cpl::down_cast<OpenFileGDB::FileGDBRasterField const*, OpenFileGDB::FileGDBField>(OpenFileGDB::FileGDBField*)
Unexecuted instantiation: OpenFileGDB::FileGDBOGRLineString* cpl::down_cast<OpenFileGDB::FileGDBOGRLineString*, OGRLineString>(OGRLineString*)
Unexecuted instantiation: OpenFileGDB::FileGDBGeomField const* cpl::down_cast<OpenFileGDB::FileGDBGeomField const*, OpenFileGDB::FileGDBField const>(OpenFileGDB::FileGDBField const*)
Unexecuted instantiation: OGROpenFileGDBGroup* cpl::down_cast<OGROpenFileGDBGroup*, GDALGroup>(GDALGroup*)
Unexecuted instantiation: OGRCodedFieldDomain const* cpl::down_cast<OGRCodedFieldDomain const*, OGRFieldDomain const>(OGRFieldDomain const*)
Unexecuted instantiation: OGRRangeFieldDomain const* cpl::down_cast<OGRRangeFieldDomain const*, OGRFieldDomain const>(OGRFieldDomain const*)
Unexecuted instantiation: GDALOpenFileGDBRasterBand* cpl::down_cast<GDALOpenFileGDBRasterBand*, GDALRasterBand>(GDALRasterBand*)
Unexecuted instantiation: OGROpenFileGDBDataSource* cpl::down_cast<OGROpenFileGDBDataSource*, GDALDataset>(GDALDataset*)
Unexecuted instantiation: OGRJSONFGStreamedLayer* cpl::down_cast<OGRJSONFGStreamedLayer*, OGRLayer>(OGRLayer*)
OGRSQLiteTableLayer* cpl::down_cast<OGRSQLiteTableLayer*, OGRSQLiteLayer>(OGRSQLiteLayer*)
Line
Count
Source
483
3.32k
    {
484
3.32k
        static_assert(
485
3.32k
            (std::is_base_of<From,
486
3.32k
                             typename std::remove_pointer<To>::type>::value),
487
3.32k
            "target type not derived from source type");
488
3.32k
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
3.32k
        return static_cast<To>(f);
490
3.32k
    }
Unexecuted instantiation: OGRSQLiteLayer* cpl::down_cast<OGRSQLiteLayer*, OGRLayer>(OGRLayer*)
Unexecuted instantiation: OGRGeoPackageLayer* cpl::down_cast<OGRGeoPackageLayer*, OGRLayer>(OGRLayer*)
Unexecuted instantiation: OGRGeoPackageTableLayer* cpl::down_cast<OGRGeoPackageTableLayer*, OGRLayer>(OGRLayer*)
Unexecuted instantiation: OGRCodedFieldDomain const* cpl::down_cast<OGRCodedFieldDomain const*, OGRFieldDomain>(OGRFieldDomain*)
Unexecuted instantiation: OGRRangeFieldDomain const* cpl::down_cast<OGRRangeFieldDomain const*, OGRFieldDomain>(OGRFieldDomain*)
Unexecuted instantiation: OGRGlobFieldDomain const* cpl::down_cast<OGRGlobFieldDomain const*, OGRFieldDomain>(OGRFieldDomain*)
Unexecuted instantiation: VFKFeature* cpl::down_cast<VFKFeature*, IVFKFeature>(IVFKFeature*)
Unexecuted instantiation: VFKDataBlock* cpl::down_cast<VFKDataBlock*, IVFKDataBlock>(IVFKDataBlock*)
Unexecuted instantiation: VFKDataBlockSQLite* cpl::down_cast<VFKDataBlockSQLite*, IVFKDataBlock>(IVFKDataBlock*)
Unexecuted instantiation: VFKDataBlockSQLite* cpl::down_cast<VFKDataBlockSQLite*, VFKDataBlockSQLite>(VFKDataBlockSQLite*)
Unexecuted instantiation: VFKReaderSQLite* cpl::down_cast<VFKReaderSQLite*, IVFKReader>(IVFKReader*)
Unexecuted instantiation: OGRAmigoCloudGeomFieldDefn* cpl::down_cast<OGRAmigoCloudGeomFieldDefn*, OGRGeomFieldDefn>(OGRGeomFieldDefn*)
Unexecuted instantiation: OGRCartoGeomFieldDefn* cpl::down_cast<OGRCartoGeomFieldDefn*, OGRGeomFieldDefn>(OGRGeomFieldDefn*)
Unexecuted instantiation: OGRILI2Layer* cpl::down_cast<OGRILI2Layer*, OGRLayer>(OGRLayer*)
Unexecuted instantiation: CADPoint3D* cpl::down_cast<CADPoint3D*, CADGeometry>(CADGeometry*)
Unexecuted instantiation: CADLine* cpl::down_cast<CADLine*, CADGeometry>(CADGeometry*)
Unexecuted instantiation: CADSolid* cpl::down_cast<CADSolid*, CADGeometry>(CADGeometry*)
Unexecuted instantiation: CADCircle* cpl::down_cast<CADCircle*, CADGeometry>(CADGeometry*)
Unexecuted instantiation: CADArc* cpl::down_cast<CADArc*, CADGeometry>(CADGeometry*)
Unexecuted instantiation: CADFace3D* cpl::down_cast<CADFace3D*, CADGeometry>(CADGeometry*)
Unexecuted instantiation: CADLWPolyline* cpl::down_cast<CADLWPolyline*, CADGeometry>(CADGeometry*)
Unexecuted instantiation: CADPolyline3D* cpl::down_cast<CADPolyline3D*, CADGeometry>(CADGeometry*)
Unexecuted instantiation: CADText* cpl::down_cast<CADText*, CADGeometry>(CADGeometry*)
Unexecuted instantiation: CADMText* cpl::down_cast<CADMText*, CADGeometry>(CADGeometry*)
Unexecuted instantiation: CADSpline* cpl::down_cast<CADSpline*, CADGeometry>(CADGeometry*)
Unexecuted instantiation: CADEllipse* cpl::down_cast<CADEllipse*, CADGeometry>(CADGeometry*)
Unexecuted instantiation: CADAttdef* cpl::down_cast<CADAttdef*, CADGeometry>(CADGeometry*)
Unexecuted instantiation: OGRGenSQLGeomFieldDefn* cpl::down_cast<OGRGenSQLGeomFieldDefn*, OGRGeomFieldDefn>(OGRGeomFieldDefn*)
Unexecuted instantiation: OGRUnionLayerGeomFieldDefn* cpl::down_cast<OGRUnionLayerGeomFieldDefn*, OGRGeomFieldDefn>(OGRGeomFieldDefn*)
Unexecuted instantiation: GDALOrientedDataset* cpl::down_cast<GDALOrientedDataset*, GDALDataset>(GDALDataset*)
RawRasterBand* cpl::down_cast<RawRasterBand*, GDALRasterBand>(GDALRasterBand*)
Line
Count
Source
483
45.5k
    {
484
45.5k
        static_assert(
485
45.5k
            (std::is_base_of<From,
486
45.5k
                             typename std::remove_pointer<To>::type>::value),
487
45.5k
            "target type not derived from source type");
488
45.5k
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
45.5k
        return static_cast<To>(f);
490
45.5k
    }
Unexecuted instantiation: EHdrRasterBand* cpl::down_cast<EHdrRasterBand*, GDALRasterBand>(GDALRasterBand*)
Unexecuted instantiation: ENVIDataset* cpl::down_cast<ENVIDataset*, GDALDataset>(GDALDataset*)
GTiffRasterBand* cpl::down_cast<GTiffRasterBand*, GDALRasterBand>(GDALRasterBand*)
Line
Count
Source
483
1.84M
    {
484
1.84M
        static_assert(
485
1.84M
            (std::is_base_of<From,
486
1.84M
                             typename std::remove_pointer<To>::type>::value),
487
1.84M
            "target type not derived from source type");
488
1.84M
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
1.84M
        return static_cast<To>(f);
490
1.84M
    }
GTiffDataset* cpl::down_cast<GTiffDataset*, GDALDataset>(GDALDataset*)
Line
Count
Source
483
50
    {
484
50
        static_assert(
485
50
            (std::is_base_of<From,
486
50
                             typename std::remove_pointer<To>::type>::value),
487
50
            "target type not derived from source type");
488
50
        CPLAssert(f == nullptr || dynamic_cast<To>(f) != nullptr);
489
50
        return static_cast<To>(f);
490
50
    }
Unexecuted instantiation: GTiffJPEGOverviewDS* cpl::down_cast<GTiffJPEGOverviewDS*, GDALDataset>(GDALDataset*)
Unexecuted instantiation: GTiffOddBitsBand* cpl::down_cast<GTiffOddBitsBand*, GDALRasterBand>(GDALRasterBand*)
Unexecuted instantiation: TABMAPObjPoint* cpl::down_cast<TABMAPObjPoint*, TABMAPObjHdr>(TABMAPObjHdr*)
Unexecuted instantiation: TABFontPoint* cpl::down_cast<TABFontPoint*, TABPoint>(TABPoint*)
Unexecuted instantiation: TABCustomPoint* cpl::down_cast<TABCustomPoint*, TABPoint>(TABPoint*)
Unexecuted instantiation: TABMAPObjFontPoint* cpl::down_cast<TABMAPObjFontPoint*, TABMAPObjHdr>(TABMAPObjHdr*)
Unexecuted instantiation: TABMAPObjCustomPoint* cpl::down_cast<TABMAPObjCustomPoint*, TABMAPObjHdr>(TABMAPObjHdr*)
Unexecuted instantiation: TABMAPObjLine* cpl::down_cast<TABMAPObjLine*, TABMAPObjHdr>(TABMAPObjHdr*)
Unexecuted instantiation: TABMAPObjPLine* cpl::down_cast<TABMAPObjPLine*, TABMAPObjHdr>(TABMAPObjHdr*)
Unexecuted instantiation: TABMAPObjRectEllipse* cpl::down_cast<TABMAPObjRectEllipse*, TABMAPObjHdr>(TABMAPObjHdr*)
Unexecuted instantiation: TABMAPObjArc* cpl::down_cast<TABMAPObjArc*, TABMAPObjHdr>(TABMAPObjHdr*)
Unexecuted instantiation: TABMAPObjText* cpl::down_cast<TABMAPObjText*, TABMAPObjHdr>(TABMAPObjHdr*)
Unexecuted instantiation: TABMAPObjMultiPoint* cpl::down_cast<TABMAPObjMultiPoint*, TABMAPObjHdr>(TABMAPObjHdr*)
Unexecuted instantiation: TABMultiPoint* cpl::down_cast<TABMultiPoint*, TABFeature>(TABFeature*)
Unexecuted instantiation: TABMAPObjCollection* cpl::down_cast<TABMAPObjCollection*, TABMAPObjHdr>(TABMAPObjHdr*)
Unexecuted instantiation: VFKFeatureSQLite* cpl::down_cast<VFKFeatureSQLite*, IVFKFeature>(IVFKFeature*)
Unexecuted instantiation: VFKFeatureSQLite* cpl::down_cast<VFKFeatureSQLite*, VFKFeatureSQLite>(VFKFeatureSQLite*)
491
492
    /** Computes ceil(a/b) where a and b are integers */
493
    template <class T, class U> inline T div_round_up(T a, U b)
494
190
    {
495
190
        return a / b + (((a % b) == 0) ? 0 : 1);
496
190
    }
int cpl::div_round_up<int, int>(int, int)
Line
Count
Source
494
190
    {
495
190
        return a / b + (((a % b) == 0) ? 0 : 1);
496
190
    }
Unexecuted instantiation: unsigned long cpl::div_round_up<unsigned long, unsigned long>(unsigned long, unsigned long)
Unexecuted instantiation: long cpl::div_round_up<long, int>(long, int)
Unexecuted instantiation: long cpl::div_round_up<long, unsigned long>(long, unsigned long)
Unexecuted instantiation: unsigned long long cpl::div_round_up<unsigned long long, unsigned long>(unsigned long long, unsigned long)
Unexecuted instantiation: unsigned long long cpl::div_round_up<unsigned long long, unsigned long long>(unsigned long long, unsigned long long)
497
498
    }  // namespace cpl
499
}  // extern "C++"
500
501
#endif /* def __cplusplus */
502
503
#endif /* ndef CPL_CONV_H_INCLUDED */