Feature/globe speedup (#862)

* Updated GDAL version to 2.4.1
 * Add vtune performance commands
 * Add Nvtools performance commands
 * Add warning if GDAL dataset could not be loaded
This commit is contained in:
Alexander Bock
2019-05-17 18:24:14 +02:00
committed by GitHub
parent 514d6e6a78
commit 512e35bea6
67 changed files with 2043 additions and 520 deletions

View File

@@ -123,7 +123,7 @@ if (WIN32)
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/ext/gdal/lib/gdal_i.lib
)
register_external_libraries("${CMAKE_CURRENT_SOURCE_DIR}/ext/gdal/lib/gdal203.dll")
register_external_libraries("${CMAKE_CURRENT_SOURCE_DIR}/ext/gdal/lib/gdal241.dll")
else (WIN32)
find_package(GDAL REQUIRED)

View File

@@ -1,5 +1,5 @@
/**********************************************************************
* $Id: cpl_alibaba_oss.h e648607661fdd5cbc6bb778c17c20c3e7979a734 2018-04-04 19:27:08 +0200 Even Rouault $
* $Id: cpl_alibaba_oss.h c39d156816d937c3139360b11786c769aeabd21e 2018-05-05 19:48:08 +0200 Even Rouault $
*
* Name: cpl_alibaba_oss.h
* Project: CPL - Common Portability Library
@@ -45,14 +45,16 @@
class VSIOSSHandleHelper final: public IVSIS3LikeHandleHelper
{
CPLString m_osURL;
CPLString m_osSecretAccessKey;
CPLString m_osAccessKeyId;
CPLString m_osEndpoint;
CPLString m_osBucket;
CPLString m_osObjectKey;
bool m_bUseHTTPS;
bool m_bUseVirtualHosting;
CPL_DISALLOW_COPY_ASSIGN(VSIOSSHandleHelper)
CPLString m_osURL{};
CPLString m_osSecretAccessKey{};
CPLString m_osAccessKeyId{};
CPLString m_osEndpoint{};
CPLString m_osBucket{};
CPLString m_osObjectKey{};
bool m_bUseHTTPS = false;
bool m_bUseVirtualHosting = false;
void RebuildURL() override;
@@ -104,9 +106,9 @@ class VSIOSSHandleHelper final: public IVSIS3LikeHandleHelper
class VSIOSSUpdateParams
{
public:
CPLString m_osEndpoint;
CPLString m_osEndpoint{};
VSIOSSUpdateParams() {}
VSIOSSUpdateParams() = default;
explicit VSIOSSUpdateParams(const VSIOSSHandleHelper* poHelper) :
m_osEndpoint(poHelper->GetEndpoint()) {}

View File

@@ -0,0 +1,85 @@
/**********************************************************************
* $Id: cpl_auto_close.h 928c6bcbd3901094d5680a73a623acc194f55afc 2018-10-07 18:11:27 +0800 小旋风 $
*
* Name: cpl_auto_close.h
* Project: CPL - Common Portability Library
* Purpose: CPL Auto Close handling
* Author: Liu Yimin, ymwh@foxmail.com
*
**********************************************************************
* Copyright (c) 2018, Liu Yimin
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
****************************************************************************/
#ifndef CPL_AUTO_CLOSE_H_INCLUDED
#define CPL_AUTO_CLOSE_H_INCLUDED
#if defined(__cplusplus)
#include <type_traits>
/************************************************************************/
/* CPLAutoClose */
/************************************************************************/
/**
* The class use the destructor to automatically close the resource.
* Example:
* GDALDatasetH hDset = GDALOpen(path,GA_ReadOnly);
* CPLAutoClose<GDALDatasetH,void(*)(void*)> autoclosehDset(hDset,GDALClose);
* Or:
* GDALDatasetH hDset = GDALOpen(path,GA_ReadOnly);
* CPL_AUTO_CLOSE_WARP(hDset,GDALClose);
*/
template<typename _Ty,typename _Dx>
class CPLAutoClose {
static_assert( !std::is_const<_Ty>::value && std::is_pointer<_Ty>::value,
"_Ty must is pointer type,_Dx must is function type");
private:
_Ty& m_ResourcePtr;
_Dx m_CloseFunc;
private:
CPLAutoClose(const CPLAutoClose&) = delete;
void operator=(const CPLAutoClose&) = delete;
public:
/**
* @brief Constructor.
* @param ptr Pointer to the resource object.
* @param dt Resource release(close) function.
*/
explicit CPLAutoClose(_Ty& ptr,_Dx dt) :
m_ResourcePtr(ptr),
m_CloseFunc(dt)
{}
/**
* @brief Destructor.
*/
~CPLAutoClose()
{
if(m_ResourcePtr && m_CloseFunc)
m_CloseFunc(m_ResourcePtr);
}
};
#define CPL_AUTO_CLOSE_WARP(hObject,closeFunc) \
CPLAutoClose<decltype(hObject),decltype(closeFunc)*> tAutoClose##hObject(hObject,closeFunc)
#endif /* __cplusplus */
#endif /* CPL_AUTO_CLOSE_H_INCLUDED */

View File

@@ -1,5 +1,5 @@
/**********************************************************************
* $Id: cpl_aws.h 1d0f559204e90d0e54d4aebe6ea8b65f0851be69 2018-06-20 16:38:42 +0200 Even Rouault $
* $Id: cpl_aws.h 5318f6d39d2006a10cb6c1410334c56d76a74aa6 2018-06-20 16:38:42 +0200 Even Rouault $
*
* Name: cpl_aws.h
* Project: CPL - Common Portability Library
@@ -83,15 +83,17 @@ CPLString CPLGetAWS_SIGN4_Authorization(const CPLString& osSecretAccessKey,
class IVSIS3LikeHandleHelper
{
CPL_DISALLOW_COPY_ASSIGN(IVSIS3LikeHandleHelper)
protected:
std::map<CPLString, CPLString> m_oMapQueryParameters;
std::map<CPLString, CPLString> m_oMapQueryParameters{};
virtual void RebuildURL() = 0;
CPLString GetQueryString(bool bAddEmptyValueAfterEqual) const;
public:
IVSIS3LikeHandleHelper() {}
virtual ~IVSIS3LikeHandleHelper() {}
IVSIS3LikeHandleHelper() = default;
virtual ~IVSIS3LikeHandleHelper() = default;
void ResetQueryParameters();
void AddQueryParameter(const CPLString& osKey, const CPLString& osValue);
@@ -123,17 +125,19 @@ public:
class VSIS3HandleHelper final: public IVSIS3LikeHandleHelper
{
CPLString m_osURL;
CPLString m_osSecretAccessKey;
CPLString m_osAccessKeyId;
CPLString m_osSessionToken;
CPLString m_osEndpoint;
CPLString m_osRegion;
CPLString m_osRequestPayer;
CPLString m_osBucket;
CPLString m_osObjectKey;
bool m_bUseHTTPS;
bool m_bUseVirtualHosting;
CPL_DISALLOW_COPY_ASSIGN(VSIS3HandleHelper)
CPLString m_osURL{};
CPLString m_osSecretAccessKey{};
CPLString m_osAccessKeyId{};
CPLString m_osSessionToken{};
CPLString m_osEndpoint{};
CPLString m_osRegion{};
CPLString m_osRequestPayer{};
CPLString m_osBucket{};
CPLString m_osObjectKey{};
bool m_bUseHTTPS = false;
bool m_bUseVirtualHosting = false;
void RebuildURL() override;
@@ -208,13 +212,12 @@ class VSIS3HandleHelper final: public IVSIS3LikeHandleHelper
class VSIS3UpdateParams
{
public:
CPLString m_osRegion;
CPLString m_osEndpoint;
CPLString m_osRequestPayer;
bool m_bUseVirtualHosting;
CPLString m_osRegion{};
CPLString m_osEndpoint{};
CPLString m_osRequestPayer{};
bool m_bUseVirtualHosting = false;
VSIS3UpdateParams() :
m_bUseVirtualHosting(false) {}
VSIS3UpdateParams() = default;
explicit VSIS3UpdateParams(const VSIS3HandleHelper* poHelper) :
m_osRegion(poHelper->GetRegion()),

View File

@@ -41,6 +41,7 @@ class VSIAzureBlobHandleHelper final: public IVSIS3LikeHandleHelper
{
CPLString m_osURL;
CPLString m_osEndpoint;
CPLString m_osBlobEndpoint;
CPLString m_osBucket;
CPLString m_osObjectKey;
CPLString m_osStorageAccount;
@@ -50,10 +51,12 @@ class VSIAzureBlobHandleHelper final: public IVSIS3LikeHandleHelper
static bool GetConfiguration(CSLConstList papszOptions,
bool& bUseHTTPS,
CPLString& osEndpoint,
CPLString& osBlobEndpoint,
CPLString& osStorageAccount,
CPLString& osStorageKey);
static CPLString BuildURL(const CPLString& osEndpoint,
const CPLString& osBlobEndpoint,
const CPLString& osStorageAccount,
const CPLString& osBucket,
const CPLString& osObjectKey,
@@ -63,6 +66,7 @@ class VSIAzureBlobHandleHelper final: public IVSIS3LikeHandleHelper
public:
VSIAzureBlobHandleHelper(const CPLString& osEndpoint,
const CPLString& osBlobEndpoint,
const CPLString& osBucket,
const CPLString& osObjectKey,
const CPLString& osStorageAccount,

View File

@@ -1,6 +1,5 @@
#ifndef CPL_CONFIG_H
#define CPL_CONFIG_H
/* We define this here in general so that a VC++ build will publicly
declare STDCALL interfaces even if an application is built against it
using MinGW */
@@ -111,9 +110,6 @@
#pragma warning(disable: 4786)
/* #define CPL_DISABLE_DLL */
/* Define to 1, if your compiler supports long long data type */
#define HAVE_LONG_LONG 1
#endif /* CPL_CONFIG_H */

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: cpl_conv.h dfac92801bd83819cbae2501803e02e06b361a43 2018-04-23 18:07:32 +0200 Martin Landa $
* $Id: cpl_conv.h c39d156816d937c3139360b11786c769aeabd21e 2018-05-05 19:48:08 +0200 Even Rouault $
*
* Project: CPL - Common Portability Library
* Purpose: Convenience functions declarations.
@@ -296,14 +296,11 @@ extern "C++"
{
class CPL_DLL CPLLocaleC
{
CPL_DISALLOW_COPY_ASSIGN(CPLLocaleC)
public:
CPLLocaleC();
~CPLLocaleC();
/* Make it non-copyable */
CPLLocaleC(const CPLLocaleC&) = delete;
CPLLocaleC& operator=(const CPLLocaleC&) = delete;
private:
char *pszOldLocale;
};
@@ -315,14 +312,12 @@ private:
class CPLThreadLocaleCPrivate;
class CPL_DLL CPLThreadLocaleC
{
CPL_DISALLOW_COPY_ASSIGN(CPLThreadLocaleC)
public:
CPLThreadLocaleC();
~CPLThreadLocaleC();
/* Make it non-copyable */
CPLThreadLocaleC(const CPLThreadLocaleC&) = delete;
CPLThreadLocaleC& operator=(const CPLThreadLocaleC&) = delete;
private:
CPLThreadLocaleCPrivate* m_private;
};
@@ -344,15 +339,12 @@ extern "C++"
{
class CPL_DLL CPLConfigOptionSetter
{
CPL_DISALLOW_COPY_ASSIGN(CPLConfigOptionSetter)
public:
CPLConfigOptionSetter(const char* pszKey, const char* pszValue,
bool bSetOnlyIfUndefined);
~CPLConfigOptionSetter();
/* Make it non-copyable */
CPLConfigOptionSetter(const CPLConfigOptionSetter&) = delete;
CPLConfigOptionSetter& operator=(const CPLConfigOptionSetter&) = delete;
private:
char* m_pszKey;
char *m_pszOldValue;

View File

@@ -1,5 +1,5 @@
/**********************************************************************
* $Id: cpl_error.h f5361e0be8e2ae819dde996e6c6aa5985b8fefec 2018-04-02 15:11:21 +0200 Even Rouault $
* $Id: cpl_error.h 340ad0d703534a256ec3de94176c95b0cf20cbd4 2018-10-13 00:33:14 +0200 Even Rouault $
*
* Name: cpl_error.h
* Project: CPL - Common Portability Library
@@ -130,7 +130,9 @@ typedef int CPLErrorNum;
/** AWSInvalidCredentials */
#define CPLE_AWSInvalidCredentials 15
/** AWSSignatureDoesNotMatch */
#define CPLE_AWSSignatureDoesNotMatch 16
#define CPLE_AWSSignatureDoesNotMatch 16
/** VSIE_AWSError */
#define CPLE_AWSError 17
/* 100 - 299 reserved for GDAL */
@@ -177,9 +179,18 @@ void CPL_DLL CPL_STDCALL _CPLAssert( const char *, const char *, int ) CPL_NO_RE
#ifdef DEBUG
/** Assert on an expression. Only enabled in DEBUG mode */
# define CPLAssert(expr) ((expr) ? (void)(0) : _CPLAssert(#expr,__FILE__,__LINE__))
/** Assert on an expression in DEBUG mode. Evaluate it also in non-DEBUG mode (useful to 'consume' a error return variable) */
# define CPLAssertAlwaysEval(expr) CPLAssert(expr)
#else
/** Assert on an expression. Only enabled in DEBUG mode */
# define CPLAssert(expr)
#ifdef __cplusplus
/** Assert on an expression in DEBUG mode. Evaluate it also in non-DEBUG mode (useful to 'consume' a error return variable) */
# define CPLAssertAlwaysEval(expr) CPL_IGNORE_RET_VAL(expr)
#else
/** Assert on an expression in DEBUG mode. Evaluate it also in non-DEBUG mode (useful to 'consume' a error return variable) */
# define CPLAssertAlwaysEval(expr) (void)(expr)
#endif
#endif
CPL_C_END

View File

@@ -43,6 +43,8 @@
class VSIGSHandleHelper final: public IVSIS3LikeHandleHelper
{
CPL_DISALLOW_COPY_ASSIGN(VSIGSHandleHelper)
CPLString m_osURL;
CPLString m_osEndpoint;
CPLString m_osBucketObjectKey;

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: cpl_http.h 07238f4cbcdc1a56c9db7e8dc3a5727346194074 2018-04-02 14:34:13 +0200 Even Rouault $
* $Id: cpl_http.h 15748d502551e341d73d0e388eb9f2e5209aa902 2018-10-06 19:05:17 +0200 Denis Rykov $
*
* Project: Common Portability Library
* Purpose: Function wrapper for libcurl HTTP access.
@@ -136,9 +136,9 @@ CPL_C_END
#if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
/*! @cond Doxygen_Suppress */
// Not sure if this belong here, used in cpl_http.cpp, cpl_vsil_curl.cpp and frmts/wms/gdalhttp.cpp
void* CPLHTTPSetOptions(void *pcurl, const char * const* papszOptions);
void* CPLHTTPSetOptions(void *pcurl, const char *pszURL, const char * const* papszOptions);
char** CPLHTTPGetOptionsFromEnv();
double CPLHTTPGetNewRetryDelay(int response_code, double dfOldDelay);
double CPLHTTPGetNewRetryDelay(int response_code, double dfOldDelay, const char* pszErrBuf);
void* CPLHTTPIgnoreSigPipe();
void CPLHTTPRestoreSigPipeHandler(void* old_handler);
bool CPLMultiPerformWait(void* hCurlMultiHandle, int& repeats);
@@ -193,22 +193,22 @@ class GOA2Manager
private:
mutable CPLString m_osCurrentBearer;
mutable time_t m_nExpirationTime;
AuthMethod m_eMethod;
mutable CPLString m_osCurrentBearer{};
mutable time_t m_nExpirationTime = 0;
AuthMethod m_eMethod = NONE;
// for ACCESS_TOKEN_FROM_REFRESH
CPLString m_osClientId;
CPLString m_osClientSecret;
CPLString m_osRefreshToken;
CPLString m_osClientId{};
CPLString m_osClientSecret{};
CPLString m_osRefreshToken{};
// for SERVICE_ACCOUNT
CPLString m_osPrivateKey;
CPLString m_osClientEmail;
CPLString m_osScope;
CPLStringList m_aosAdditionalClaims;
CPLString m_osPrivateKey{};
CPLString m_osClientEmail{};
CPLString m_osScope{};
CPLStringList m_aosAdditionalClaims{};
CPLStringList m_aosOptions;
CPLStringList m_aosOptions{};
};

View File

@@ -149,8 +149,8 @@ protected:
/*! @endcond */
private:
JSONObjectH m_poJsonObject;
std::string m_osKey;
JSONObjectH m_poJsonObject = nullptr;
std::string m_osKey{};
};
/**

View File

@@ -39,6 +39,8 @@
class CPL_DLL CPLJSonStreamingParser
{
CPL_DISALLOW_COPY_ASSIGN(CPLJSonStreamingParser)
enum State
{
INIT,
@@ -51,19 +53,25 @@ class CPL_DLL CPLJSonStreamingParser
STATE_NULL
};
bool m_bExceptionOccurred;
bool m_bElementFound;
int m_nLastChar;
int m_nLineCounter;
int m_nCharCounter;
std::vector<State> m_aState;
std::string m_osToken;
std::vector<bool> m_abFirstElement;
bool m_bInStringEscape;
bool m_bInUnicode;
std::string m_osUnicodeHex;
size_t m_nMaxDepth;
size_t m_nMaxStringSize;
bool m_bExceptionOccurred = false;
bool m_bElementFound = false;
int m_nLastChar = 0;
int m_nLineCounter = 1;
int m_nCharCounter = 1;
std::vector<State> m_aState{};
std::string m_osToken{};
enum class ArrayState
{
INIT,
AFTER_COMMA,
AFTER_VALUE
};
std::vector<ArrayState> m_abArrayState{};
bool m_bInStringEscape = false;
bool m_bInUnicode = false;
std::string m_osUnicodeHex{};
size_t m_nMaxDepth = 1024;
size_t m_nMaxStringSize = 10000000;
enum MemberState
{
@@ -72,13 +80,13 @@ class CPL_DLL CPLJSonStreamingParser
KEY_FINISHED,
IN_VALUE
};
std::vector<MemberState> m_aeObjectState;
std::vector<MemberState> m_aeObjectState{};
enum State currentState() { return m_aState.back(); }
void SkipSpace(const char*& pStr, size_t& nLength);
void AdvanceChar(const char*& pStr, size_t& nLength);
bool EmitException(const char* pszMessage);
bool EmitUnexpectedChar(char ch);
bool EmitUnexpectedChar(char ch, const char* pszExpecting = nullptr);
bool StartNewToken(const char*& pStr, size_t& nLength);
bool CheckAndEmitTrueFalseOrNull(char ch);
bool CheckStackEmpty();

View File

@@ -172,6 +172,16 @@ class Cache {
return cache_.find(k) != cache_.end();
}
bool getOldestEntry(Key& kOut, Value& vOut) {
Guard g(lock_);
if( keys_.empty() ) {
return false;
}
kOut = keys_.back().key;
vOut = keys_.back().value;
return true;
}
size_t getMaxSize() const { return maxSize_; }
size_t getElasticity() const { return elasticity_; }
size_t getMaxAllowedSize() const { return maxSize_ + elasticity_; }

View File

@@ -1,4 +1,4 @@
/* $Id: cpl_minizip_ioapi.h 2f03d19efafeda04a990e03e7fb3cf56dd11b213 2016-11-24 06:35:54Z Kurt Schwehr $ */
/* $Id: cpl_minizip_ioapi.h 105d437a91a1a110bdeaba3bab046cd235701173 2018-07-02 12:01:26 +0200 Even Rouault $ */
/* Modified version by Even Rouault. :
- change fill_fopen_filefunc to cpl_fill_fopen_filefunc
@@ -80,6 +80,13 @@ void cpl_fill_fopen_filefunc (zlib_filefunc_def* pzlib_filefunc_def);
#define ZCLOSE(filefunc,filestream) ((*((filefunc).zclose_file))((filefunc).opaque,filestream))
#define ZERROR(filefunc,filestream) ((*((filefunc).zerror_file))((filefunc).opaque,filestream))
#define ZREAD64 ZREAD
#define ZWRITE64 ZWRITE
#define ZTELL64 ZTELL
#define ZSEEK64 ZSEEK
#define ZCLOSE64 ZCLOSE
#define ZERROR64 ZERROR
#ifdef __cplusplus
}
#endif

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: cpl_minizip_zip.h 44e0c0ecc2e12f7885d8572d0f18dd94e7fbda1c 2016-10-25 02:28:29Z Kurt Schwehr $
* $Id: cpl_minizip_zip.h 105d437a91a1a110bdeaba3bab046cd235701173 2018-07-02 12:01:26 +0200 Even Rouault $
*
* Project: CPL - Common Portability Library
* Author: Frank Warmerdam, warmerdam@pobox.com
@@ -64,6 +64,7 @@
#include "cpl_vsi.h"
#define uLong64 vsi_l_offset
typedef vsi_l_offset ZPOS64_T;
#ifdef __cplusplus
extern "C" {
@@ -234,7 +235,7 @@ extern int ZEXPORT cpl_zipCloseFileInZip (zipFile file);
*/
extern int ZEXPORT cpl_zipCloseFileInZipRaw (zipFile file,
uLong uncompressed_size,
ZPOS64_T uncompressed_size,
uLong crc32);
/*
Close the current file in the zipfile, for file opened with

View File

@@ -1,5 +1,5 @@
/**********************************************************************
* $Id: cpl_multiproc.h b5fb552a68377945dc4bff235f0e1af3728c75c6 2018-03-11 23:57:13Z Even Rouault $
* $Id: cpl_multiproc.h 49f2075cf4be6b103a5ab0b5a64f1ed3e2e7f46b 2018-11-27 21:21:53Z Robert Coup $
*
* Project: CPL - Common Portability Library
* Purpose: CPL Multi-Threading, and process handling portability functions.
@@ -139,22 +139,24 @@ CPL_C_END
class CPL_DLL CPLMutexHolder
{
private:
CPLMutex *hMutex;
CPLMutex *hMutex = nullptr;
// Only used for debugging.
const char *pszFile;
int nLine;
const char *pszFile = nullptr;
int nLine = 0;
CPL_DISALLOW_COPY_ASSIGN(CPLMutexHolder)
public:
/** Instantiates the mutex if not already done. */
CPLMutexHolder( CPLMutex **phMutex, double dfWaitInSeconds = 1000.0,
explicit CPLMutexHolder( CPLMutex **phMutex, double dfWaitInSeconds = 1000.0,
const char *pszFile = __FILE__,
int nLine = __LINE__,
int nOptions = CPL_MUTEX_RECURSIVE);
/** This variant assumes the mutex has already been created. If not, it will
* be a no-op */
CPLMutexHolder( CPLMutex* hMutex, double dfWaitInSeconds = 1000.0,
explicit CPLMutexHolder( CPLMutex* hMutex, double dfWaitInSeconds = 1000.0,
const char *pszFile = __FILE__,
int nLine = __LINE__ );
@@ -172,9 +174,11 @@ class CPL_DLL CPLMutexHolder
class CPL_DLL CPLLockHolder
{
private:
CPLLock *hLock;
const char *pszFile;
int nLine;
CPLLock *hLock = nullptr;
const char *pszFile = nullptr;
int nLine = 0;
CPL_DISALLOW_COPY_ASSIGN(CPLLockHolder)
public:
@@ -185,7 +189,7 @@ class CPL_DLL CPLLockHolder
/** This variant assumes the lock has already been created. If not, it will
* be a no-op */
CPLLockHolder( CPLLock* hSpin,
explicit CPLLockHolder( CPLLock* hSpin,
const char *pszFile = __FILE__,
int nLine = __LINE__ );
@@ -203,7 +207,7 @@ class CPL_DLL CPLLockHolder
#define CTLS_CSVTABLEPTR 3 /* cpl_csv.cpp */
#define CTLS_CSVDEFAULTFILENAME 4 /* cpl_csv.cpp */
#define CTLS_ERRORCONTEXT 5 /* cpl_error.cpp */
#define CTLS_GDALDATASET_REC_PROTECT_MAP 6 /* gdaldataset.cpp */
/* 6: unused */
#define CTLS_PATHBUF 7 /* cpl_path.cpp */
#define CTLS_ABSTRACTARCHIVE_SPLIT 8 /* cpl_vsil_abstract_archive.cpp */
#define CTLS_UNUSED4 9
@@ -214,6 +218,7 @@ class CPL_DLL CPLLockHolder
#define CTLS_CONFIGOPTIONS 14 /* cpl_conv.cpp */
#define CTLS_FINDFILE 15 /* cpl_findfile.cpp */
#define CTLS_VSIERRORCONTEXT 16 /* cpl_vsi_error.cpp */
#define CTLS_ERRORHANDLERACTIVEDATA 17 /* cpl_error.cpp */
#define CTLS_MAX 32

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: cpl_odbc.h 7e07230bbff24eb333608de4dbd460b7312839d0 2017-12-11 19:08:47Z Even Rouault $
* $Id: cpl_odbc.h 97890c6814b40588defbe147a3189f056d50cf97 2018-05-14 20:12:48 +0200 KovBal $
*
* Project: OGR ODBC Driver
* Purpose: Declarations for ODBC Access Cover API.
@@ -159,11 +159,14 @@ class CPLODBCStatement;
*/
class CPL_DLL CPLODBCSession {
char m_szLastError[SQL_MAX_MESSAGE_LENGTH + 1];
HENV m_hEnv;
HDBC m_hDBC;
int m_bInTransaction;
int m_bAutoCommit;
CPL_DISALLOW_COPY_ASSIGN(CPLODBCSession)
CPLString m_osLastError{};
HENV m_hEnv = nullptr;
HDBC m_hDBC = nullptr;
int m_bInTransaction = false;
int m_bAutoCommit = true;
public:
CPLODBCSession();
@@ -205,26 +208,28 @@ class CPL_DLL CPLODBCSession {
class CPL_DLL CPLODBCStatement {
CPLODBCSession *m_poSession;
HSTMT m_hStmt;
CPL_DISALLOW_COPY_ASSIGN(CPLODBCStatement)
SQLSMALLINT m_nColCount;
char **m_papszColNames;
SQLSMALLINT *m_panColType;
char **m_papszColTypeNames;
CPL_SQLULEN *m_panColSize;
SQLSMALLINT *m_panColPrecision;
SQLSMALLINT *m_panColNullable;
char **m_papszColColumnDef;
CPLODBCSession *m_poSession = nullptr;
HSTMT m_hStmt = nullptr;
char **m_papszColValues;
CPL_SQLLEN *m_panColValueLengths;
SQLSMALLINT m_nColCount = 0;
char **m_papszColNames = nullptr;
SQLSMALLINT *m_panColType = nullptr;
char **m_papszColTypeNames = nullptr;
CPL_SQLULEN *m_panColSize = nullptr;
SQLSMALLINT *m_panColPrecision = nullptr;
SQLSMALLINT *m_panColNullable = nullptr;
char **m_papszColColumnDef = nullptr;
char **m_papszColValues = nullptr;
CPL_SQLLEN *m_panColValueLengths = nullptr;
int Failed( int );
char *m_pszStatement;
size_t m_nStatementMax;
size_t m_nStatementLen;
char *m_pszStatement = nullptr;
size_t m_nStatementMax = 0;
size_t m_nStatementLen = 0;
public:
explicit CPLODBCStatement( CPLODBCSession * );

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: cpl_port.h 9b81cd476af4dd1a40b1a79f9e3e355114e2cd33 2018-05-08 11:21:07 +0200 Even Rouault $
* $Id: cpl_port.h c55171b249f96a1cfa0e54f83dfa872c722e493c 2018-05-12 13:46:40 -0700 Lucian Plesea $
*
* Project: CPL - Common Portability Library
* Author: Frank Warmerdam, warmerdam@pobox.com
@@ -186,10 +186,12 @@
# if !(__cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1900))
# error Must have C++11 or newer.
# endif
# if __cplusplus >= 201402L
# if __cplusplus >= 201402L || (defined(_MSVC_LANG) && _MSVC_LANG >= 201402L)
# define HAVE_CXX14 1
# endif
/* TODO(schwehr): What is the correct test for C++ 17? */
# if __cplusplus >= 201703L || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L)
# define HAVE_CXX17 1
# endif
#endif /* __cplusplus */
/*---------------------------------------------------------------------

View File

@@ -1,5 +1,5 @@
/**********************************************************************
* $Id: cpl_string.h 2a269ed2b136bd254b213f39846587c1eb237662 2018-04-18 23:42:24 +0200 Even Rouault $
* $Id: cpl_string.h e12a0fc61edef91a039e13c7baff2ce58288a552 2018-08-10 00:53:29 +0200 Juergen E. Fischer $
*
* Name: cpl_string.h
* Project: CPL - Common Portability Library
@@ -177,6 +177,8 @@ char CPL_DLL ** CSLParseCommandLine(const char* pszCommandLine);
#define CPLES_XML_BUT_QUOTES 5
/** Scheme for CPLEscapeString()/CPLUnescapeString() for CSV (forced quoting) */
#define CPLES_CSV_FORCE_QUOTING 6
/** Scheme for CPLEscapeString()/CPLUnescapeString() for SQL identifiers */
#define CPLES_SQLI 7
char CPL_DLL *CPLEscapeString( const char *pszString, int nLength,
int nScheme ) CPL_WARN_UNUSED_RESULT;
@@ -304,51 +306,40 @@ extern "C++"
#include <string>
#endif
// VC++ implicitly applies __declspec(dllexport) to template base
// classes of classes marked with __declspec(dllexport).
// Hence, VC++ would export symbols for the specialization of std::basic_string<char>,
// since it is a base class of CPLString, which is marked with CPL_DLL.
// VC++ implicitly applies __declspec(dllexport) to template base classes
// of classes marked with __declspec(dllexport).
// Hence, if marked with CPL_DLL, VC++ would export symbols for the specialization
// of std::basic_string<char>, since it is a base class of CPLString.
// As a result, if an application linked both gdal.dll and a static library that
// (implicitly) instantiates std::string (almost all do!), then the linker would
// emit an error concerning duplicate symbols for std::string.
// The least intrusive solution is to turn CPLString into a template class
// (that is not marked with CPL_DLL), make CPLString a typedef for a specialization
// of that template class, and mark only the few non-inline member functions of
// CPLStringT with CPL_DLL.
// The least intrusive solution is to not mark the whole class with
// __declspec(dllexport) for VC++, but only its non-inline methods.
#ifdef _MSC_VER
# define CPLSTRING_DLL CPL_DLL
template< class Dummy = void > class CPLStringT;
typedef CPLStringT<> CPLString;
template< class Dummy >
class CPLStringT : public std::string
# define CPLSTRING_CLASS_DLL
# define CPLSTRING_METHOD_DLL CPL_DLL
#else
/*! @cond Doxygen_Suppress */
# define CPLSTRING_DLL
# define CPLStringT CPLString
# define CPLSTRING_CLASS_DLL CPL_DLL
# define CPLSTRING_METHOD_DLL
/*! @endcond */
#endif
//! Convenient string class based on std::string.
class CPL_DLL CPLString : public std::string
#endif
class CPLSTRING_CLASS_DLL CPLString : public std::string
{
public:
/** Constructor */
CPLStringT(void) {}
CPLString(void) {}
/** Constructor */
// cppcheck-suppress noExplicitConstructor
CPLStringT( const std::string &oStr ) : std::string( oStr ) {}
CPLString( const std::string &oStr ) : std::string( oStr ) {}
/** Constructor */
// cppcheck-suppress noExplicitConstructor
CPLStringT( const char *pszStr ) : std::string( pszStr ) {}
CPLString( const char *pszStr ) : std::string( pszStr ) {}
/** Constructor */
CPLStringT( const char *pszStr, size_t n ) : std::string( pszStr, n ) {}
CPLString( const char *pszStr, size_t n ) : std::string( pszStr, n ) {}
/** Return string as zero terminated character array */
operator const char* (void) const { return c_str(); }
@@ -398,39 +389,39 @@ public:
/* There seems to be a bug in the way the compiler count indices...
* Should be CPL_PRINT_FUNC_FORMAT (1, 2) */
CPLSTRING_DLL CPLString &Printf(
CPLSTRING_METHOD_DLL CPLString &Printf(
CPL_FORMAT_STRING(const char *pszFormat), ... )
CPL_PRINT_FUNC_FORMAT (2, 3);
CPLSTRING_DLL CPLString &vPrintf(
CPLSTRING_METHOD_DLL CPLString &vPrintf(
CPL_FORMAT_STRING(const char *pszFormat), va_list args )
CPL_PRINT_FUNC_FORMAT(2, 0);
CPLSTRING_DLL CPLString &FormatC( double dfValue, const char *pszFormat = nullptr );
CPLSTRING_DLL CPLString &Trim();
CPLSTRING_DLL CPLString &Recode( const char *pszSrcEncoding, const char *pszDstEncoding );
CPLSTRING_DLL CPLString &replaceAll(
CPLSTRING_METHOD_DLL CPLString &FormatC( double dfValue, const char *pszFormat = nullptr );
CPLSTRING_METHOD_DLL CPLString &Trim();
CPLSTRING_METHOD_DLL CPLString &Recode( const char *pszSrcEncoding, const char *pszDstEncoding );
CPLSTRING_METHOD_DLL CPLString &replaceAll(
const std::string &osBefore, const std::string& osAfter );
CPLSTRING_DLL CPLString &replaceAll( const std::string &osBefore, char chAfter );
CPLSTRING_DLL CPLString &replaceAll( char chBefore, const std::string &osAfter );
CPLSTRING_DLL CPLString &replaceAll( char chBefore, char chAfter );
CPLSTRING_METHOD_DLL CPLString &replaceAll( const std::string &osBefore, char chAfter );
CPLSTRING_METHOD_DLL CPLString &replaceAll( char chBefore, const std::string &osAfter );
CPLSTRING_METHOD_DLL CPLString &replaceAll( char chBefore, char chAfter );
/* case insensitive find alternates */
CPLSTRING_DLL size_t ifind( const std::string & str, size_t pos = 0 ) const;
CPLSTRING_DLL size_t ifind( const char * s, size_t pos = 0 ) const;
CPLSTRING_DLL CPLString &toupper( void );
CPLSTRING_DLL CPLString &tolower( void );
CPLSTRING_METHOD_DLL size_t ifind( const std::string & str, size_t pos = 0 ) const;
CPLSTRING_METHOD_DLL size_t ifind( const char * s, size_t pos = 0 ) const;
CPLSTRING_METHOD_DLL CPLString &toupper( void );
CPLSTRING_METHOD_DLL CPLString &tolower( void );
CPLSTRING_DLL bool endsWith( const std::string& osStr ) const;
CPLSTRING_METHOD_DLL bool endsWith( const std::string& osStr ) const;
};
#ifndef _MSC_VER
# undef CPLStringT
#endif
#undef CPLSTRING_CLASS_DLL
#undef CPLSTRING_METHOD_DLL
CPLString CPL_DLL CPLOPrintf(CPL_FORMAT_STRING(const char *pszFormat), ... )
CPL_PRINT_FUNC_FORMAT (1, 2);
CPLString CPL_DLL CPLOvPrintf(
CPL_FORMAT_STRING(const char *pszFormat), va_list args)
CPL_PRINT_FUNC_FORMAT (1, 0);
CPLString CPL_DLL CPLQuotedSQLIdentifier(const char *pszIdent);
/* -------------------------------------------------------------------- */
/* URL processing functions, here since they depend on CPLString. */
@@ -446,22 +437,20 @@ CPLString CPL_DLL CPLURLAddKVP(const char* pszURL, const char* pszKey,
//! String list class designed around our use of C "char**" string lists.
class CPL_DLL CPLStringList
{
char **papszList;
mutable int nCount;
mutable int nAllocation;
bool bOwnList;
bool bIsSorted;
char **papszList = nullptr;
mutable int nCount = 0;
mutable int nAllocation = 0;
bool bOwnList = false;
bool bIsSorted = false;
void Initialize();
void MakeOurOwnCopy();
void EnsureAllocation( int nMaxLength );
int FindSortedInsertionPoint( const char *pszLine );
public:
CPLStringList();
CPLStringList( char **papszList, int bTakeOwnership=TRUE );
// cppcheck-suppress noExplicitConstructor
CPLStringList( CSLConstList papszList );
explicit CPLStringList( char **papszList, int bTakeOwnership=TRUE );
explicit CPLStringList( CSLConstList papszList );
CPLStringList( const CPLStringList& oOther );
~CPLStringList();

View File

@@ -0,0 +1,52 @@
/******************************************************************************
*
* Name: cpl_userfault.h
* Project: CPL - Common Portability Library
* Purpose: Use userfaultfd and VSIL to service page faults
* Author: James McClain, <james.mcclain@gmail.com>
*
******************************************************************************
* Copyright (c) 2018, Dr. James McClain <james.mcclain@gmail.com>
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
****************************************************************************/
#ifndef CPL_USERFAULTFD
#define CPL_USERFAULTFD
#include <stdint.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <linux/userfaultfd.h>
#define GDAL_UFFD_LIMIT "GDAL_UFFD_LIMIT"
typedef struct cpl_uffd_context cpl_uffd_context;
bool CPLIsUserFaultMappingSupported();
cpl_uffd_context * CPLCreateUserFaultMapping(const char * pszFilename, void ** ppVma, uint64_t * pnVmaSize);
void CPLDeleteUserFaultMapping(cpl_uffd_context * ctx);
#endif

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: cpl_vsi.h 07238f4cbcdc1a56c9db7e8dc3a5727346194074 2018-04-02 14:34:13 +0200 Even Rouault $
* $Id: cpl_vsi.h fe66521fc5854bf38bc2eb42326d9a17d2f0f275 2018-12-22 13:46:01 +0100 Juergen E. Fischer $
*
* Project: CPL - Common Portability Library
* Author: Frank Warmerdam, warmerdam@pobox.com
@@ -33,6 +33,7 @@
#define CPL_VSI_H_INCLUDED
#include "cpl_port.h"
#include "cpl_progress.h"
/**
* \file cpl_vsi.h
@@ -301,12 +302,59 @@ GIntBig CPL_DLL CPLGetUsablePhysicalRAM(void);
char CPL_DLL **VSIReadDir( const char * );
char CPL_DLL **VSIReadDirRecursive( const char *pszPath );
char CPL_DLL **VSIReadDirEx( const char *pszPath, int nMaxFiles );
/** Opaque type for a directory iterator */
typedef struct VSIDIR VSIDIR;
VSIDIR CPL_DLL *VSIOpenDir( const char *pszPath,
int nRecurseDepth,
const char* const *papszOptions);
/** Directory entry. */
typedef struct VSIDIREntry
{
/** Filename */
char* pszName;
/** File mode. See VSI_ISREG() / VSI_ISDIR() */
int nMode;
/** File size */
vsi_l_offset nSize;
/** Last modification time (seconds since 1970/01/01) */
GIntBig nMTime;
/** Whether nMode is known: 0 = unknown, 1 = known. */
char bModeKnown;
/** Whether nSize is known: 0 = unknown, 1 = known. */
char bSizeKnown;
/** Whether nMTime is known: 0 = unknown, 1 = known. */
char bMTimeKnown;
/** NULL-terminated list of extra properties. */
char** papszExtra;
#if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
/*! @cond Doxygen_Suppress */
VSIDIREntry();
~VSIDIREntry();
VSIDIREntry(const VSIDIREntry&) = delete;
VSIDIREntry& operator=(VSIDIREntry&) = delete;
/*! @endcond */
#endif
} VSIDIREntry;
const VSIDIREntry CPL_DLL *VSIGetNextDirEntry(VSIDIR* dir);
void CPL_DLL VSICloseDir(VSIDIR* dir);
int CPL_DLL VSIMkdir( const char * pszPathname, long mode );
int CPL_DLL VSIMkdirRecursive( const char * pszPathname, long mode );
int CPL_DLL VSIRmdir( const char * pszDirname );
int CPL_DLL VSIRmdirRecursive( const char * pszDirname );
int CPL_DLL VSIUnlink( const char * pszFilename );
int CPL_DLL VSIRename( const char * oldpath, const char * newpath );
int CPL_DLL VSISync( const char* pszSource, const char* pszTarget,
const char* const * papszOptions,
GDALProgressFunc pProgressFunc,
void *pProgressData,
char*** ppapszOutputs );
char CPL_DLL *VSIStrerror( int );
GIntBig CPL_DLL VSIGetDiskFreeSpace(const char *pszDirname);
@@ -320,6 +368,7 @@ void CPL_DLL VSIInstallLargeFileHandler(void);
void CPL_DLL VSIInstallSubFileHandler(void);
void VSIInstallCurlFileHandler(void);
void CPL_DLL VSICurlClearCache(void);
void CPL_DLL VSICurlPartialClearCache(const char* pszFilenamePrefix);
void VSIInstallCurlStreamingFileHandler(void);
void VSIInstallS3FileHandler(void);
void VSIInstallS3StreamingFileHandler(void);
@@ -334,6 +383,8 @@ void VSIInstallSwiftStreamingFileHandler(void);
void VSIInstallGZipFileHandler(void); /* No reason to export that */
void VSIInstallZipFileHandler(void); /* No reason to export that */
void VSIInstallStdinHandler(void); /* No reason to export that */
void VSIInstallHdfsHandler(void); /* No reason to export that */
void VSIInstallWebHdfsHandler(void); /* No reason to export that */
void VSIInstallStdoutHandler(void); /* No reason to export that */
void CPL_DLL VSIInstallSparseFileHandler(void);
void VSIInstallTarFileHandler(void); /* No reason to export that */

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: cpl_vsi_virtual.h 07238f4cbcdc1a56c9db7e8dc3a5727346194074 2018-04-02 14:34:13 +0200 Even Rouault $
* $Id: cpl_vsi_virtual.h 7b937306fdeb31f6adefa6675d83ccd60f99e619 2018-11-25 23:10:44 +0100 Even Rouault $
*
* Project: VSI Virtual File System
* Purpose: Declarations for classes related to the virtual filesystem.
@@ -113,6 +113,14 @@ public:
virtual const char* GetActualURL(const char* /*pszFilename*/) { return nullptr; }
virtual const char* GetOptions() { return nullptr; }
virtual char* GetSignedURL(const char* /*pszFilename*/, CSLConstList /* papszOptions */) { return nullptr; }
virtual bool Sync( const char* pszSource, const char* pszTarget,
const char* const * papszOptions,
GDALProgressFunc pProgressFunc,
void *pProgressData,
char*** ppapszOutputs );
virtual VSIDIR* OpenDir( const char *pszPath, int nRecurseDepth,
const char* const *papszOptions);
};
#endif /* #ifndef DOXYGEN_SKIP */
@@ -124,13 +132,15 @@ public:
class CPL_DLL VSIFileManager
{
private:
VSIFilesystemHandler *poDefaultHandler;
std::map<std::string, VSIFilesystemHandler *> oHandlers;
VSIFilesystemHandler *poDefaultHandler = nullptr;
std::map<std::string, VSIFilesystemHandler *> oHandlers{};
VSIFileManager();
static VSIFileManager *Get();
CPL_DISALLOW_COPY_ASSIGN(VSIFileManager)
public:
~VSIFileManager();
@@ -170,12 +180,11 @@ typedef struct
class VSIArchiveContent
{
public:
time_t mTime;
vsi_l_offset nFileSize;
int nEntries;
VSIArchiveEntry* entries;
time_t mTime = 0;
vsi_l_offset nFileSize = 0;
int nEntries = 0;
VSIArchiveEntry* entries = nullptr;
VSIArchiveContent() : mTime(0), nFileSize(0), nEntries(0), entries(nullptr) {}
~VSIArchiveContent();
};
@@ -195,12 +204,14 @@ class VSIArchiveReader
class VSIArchiveFilesystemHandler : public VSIFilesystemHandler
{
CPL_DISALLOW_COPY_ASSIGN(VSIArchiveFilesystemHandler)
protected:
CPLMutex* hMutex;
CPLMutex* hMutex = nullptr;
/* We use a cache that contains the list of files contained in a VSIArchive file as */
/* unarchive.c is quite inefficient in listing them. This speeds up access to VSIArchive files */
/* containing ~1000 files like a CADRG product */
std::map<CPLString,VSIArchiveContent*> oFileList;
std::map<CPLString,VSIArchiveContent*> oFileList{};
virtual const char* GetPrefix() = 0;
virtual std::vector<CPLString> GetExtensions() = 0;
@@ -224,6 +235,22 @@ public:
virtual int FindFileInArchive(const char* archiveFilename, const char* fileInArchiveName, const VSIArchiveEntry** archiveEntry);
};
/************************************************************************/
/* VSIDIR */
/************************************************************************/
struct CPL_DLL VSIDIR
{
VSIDIR() = default;
virtual ~VSIDIR();
virtual const VSIDIREntry* NextDirEntry() = 0;
private:
VSIDIR(const VSIDIR&) = delete;
VSIDIR& operator=(const VSIDIR&) = delete;
};
#endif /* #ifndef DOXYGEN_SKIP */
VSIVirtualHandle CPL_DLL *VSICreateBufferedReaderHandle(VSIVirtualHandle* poBaseHandle);
@@ -231,6 +258,10 @@ VSIVirtualHandle* VSICreateBufferedReaderHandle(VSIVirtualHandle* poBaseHandle,
const GByte* pabyBeginningContent,
vsi_l_offset nCheatFileSize);
VSIVirtualHandle CPL_DLL *VSICreateCachedFile( VSIVirtualHandle* poBaseHandle, size_t nChunkSize = 32768, size_t nCacheSize = 0 );
VSIVirtualHandle CPL_DLL *VSICreateGZipWritable( VSIVirtualHandle* poBaseHandle, int bRegularZLibIn, int bAutoCloseBaseHandle );
const int CPL_DEFLATE_TYPE_GZIP = 0;
const int CPL_DEFLATE_TYPE_ZLIB = 1;
const int CPL_DEFLATE_TYPE_RAW_DEFLATE = 2;
VSIVirtualHandle CPL_DLL *VSICreateGZipWritable( VSIVirtualHandle* poBaseHandle, int nDeflateType, int bAutoCloseBaseHandle );
#endif /* ndef CPL_VSI_VIRTUAL_H_INCLUDED */

View File

@@ -0,0 +1,554 @@
/******************************************************************************
*
* Project: CPL - Common Portability Library
* Purpose: Declarations for /vsicurl/ and related file systems
* Author: Even Rouault, even.rouault at spatialys.com
*
******************************************************************************
* Copyright (c) 2010-2018, Even Rouault <even.rouault at spatialys.com>
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
****************************************************************************/
#ifndef CPL_VSIL_CURL_CLASS_H_INCLUDED
#define CPL_VSIL_CURL_CLASS_H_INCLUDED
#ifdef HAVE_CURL
#include "cpl_aws.h"
#include "cpl_port.h"
#include "cpl_string.h"
#include "cpl_vsil_curl_priv.h"
#include "cpl_mem_cache.h"
#include <curl/curl.h>
#include <set>
#include <map>
#include <memory>
//! @cond Doxygen_Suppress
// 7.18.1
#if LIBCURL_VERSION_NUM >= 0x071201
#define HAVE_CURLINFO_REDIRECT_URL
#endif
void VSICurlStreamingClearCache( void ); // from cpl_vsil_curl_streaming.cpp
struct curl_slist* VSICurlSetOptions(CURL* hCurlHandle, const char* pszURL,
const char * const* papszOptions);
struct curl_slist* VSICurlMergeHeaders( struct curl_slist* poDest,
struct curl_slist* poSrcToDestroy );
namespace cpl {
typedef enum
{
EXIST_UNKNOWN = -1,
EXIST_NO,
EXIST_YES,
} ExistStatus;
class FileProp
{
public:
ExistStatus eExists = EXIST_UNKNOWN;
vsi_l_offset fileSize = 0;
time_t mTime = 0;
time_t nExpireTimestampLocal = 0;
CPLString osRedirectURL{};
bool bHasComputedFileSize = false;
bool bIsDirectory = false;
bool bS3LikeRedirect = false;
CPLString ETag{};
};
typedef struct
{
bool bGotFileList = false;
CPLStringList oFileList{}; /* only file name without path */
} CachedDirList;
typedef struct
{
char* pBuffer;
size_t nSize;
bool bIsHTTP;
bool bIsInHeader;
bool bMultiRange;
vsi_l_offset nStartOffset;
vsi_l_offset nEndOffset;
int nHTTPCode;
vsi_l_offset nContentLength;
bool bFoundContentRange;
bool bError;
bool bDownloadHeaderOnly;
bool bDetectRangeDownloadingError;
GIntBig nTimestampDate; // Corresponds to Date: header field
VSILFILE *fp;
VSICurlReadCbkFunc pfnReadCbk;
void *pReadCbkUserData;
bool bInterrupted;
} WriteFuncStruct;
/************************************************************************/
/* VSICurlFilesystemHandler */
/************************************************************************/
class VSICurlHandle;
class VSICurlFilesystemHandler : public VSIFilesystemHandler
{
CPL_DISALLOW_COPY_ASSIGN(VSICurlFilesystemHandler)
struct FilenameOffsetPair
{
std::string filename_;
vsi_l_offset offset_;
FilenameOffsetPair(const std::string& filename,
vsi_l_offset offset) :
filename_(filename), offset_(offset) {}
bool operator==(const FilenameOffsetPair& other) const
{
return filename_ == other.filename_ &&
offset_ == other.offset_;
}
};
struct FilenameOffsetPairHasher
{
std::size_t operator()(const FilenameOffsetPair& k) const
{
return std::hash<std::string>()(k.filename_) ^
std::hash<vsi_l_offset>()(k.offset_);
}
};
using RegionCacheType =
lru11::Cache<FilenameOffsetPair, std::shared_ptr<std::string>,
lru11::NullLock,
std::unordered_map<
FilenameOffsetPair,
typename std::list<lru11::KeyValuePair<FilenameOffsetPair,
std::shared_ptr<std::string>>>::iterator,
FilenameOffsetPairHasher>>;
RegionCacheType oRegionCache;
lru11::Cache<std::string, FileProp> oCacheFileProp;
int nCachedFilesInDirList = 0;
lru11::Cache<std::string, CachedDirList> oCacheDirList;
char** ParseHTMLFileList(const char* pszFilename,
int nMaxFiles,
char* pszData,
bool* pbGotFileList);
protected:
CPLMutex *hMutex = nullptr;
virtual VSICurlHandle* CreateFileHandle(const char* pszFilename);
virtual char** GetFileList(const char *pszFilename,
int nMaxFiles,
bool* pbGotFileList);
void RegisterEmptyDir( const CPLString& osDirname );
bool AnalyseS3FileList( const CPLString& osBaseURL,
const char* pszXML,
CPLStringList& osFileList,
int nMaxFiles,
bool bIgnoreGlacierStorageClass,
bool& bIsTruncated );
void AnalyseSwiftFileList( const CPLString& osBaseURL,
const CPLString& osPrefix,
const char* pszJson,
CPLStringList& osFileList,
int nMaxFilesThisQuery,
int nMaxFiles,
bool& bIsTruncated,
CPLString& osNextMarker );
static const char* GetOptionsStatic();
static bool IsAllowedFilename( const char* pszFilename );
public:
VSICurlFilesystemHandler();
~VSICurlFilesystemHandler() override;
VSIVirtualHandle *Open( const char *pszFilename,
const char *pszAccess,
bool bSetError ) override;
int Stat( const char *pszFilename, VSIStatBufL *pStatBuf,
int nFlags ) override;
int Unlink( const char *pszFilename ) override;
int Rename( const char *oldpath, const char *newpath ) override;
int Mkdir( const char *pszDirname, long nMode ) override;
int Rmdir( const char *pszDirname ) override;
char **ReadDir( const char *pszDirname ) override
{ return ReadDirEx(pszDirname, 0); }
char **ReadDirEx( const char *pszDirname, int nMaxFiles ) override;
int HasOptimizedReadMultiRange( const char* /* pszPath */ )
override { return true; }
const char* GetActualURL(const char* pszFilename) override;
const char* GetOptions() override;
char **ReadDirInternal( const char *pszDirname, int nMaxFiles,
bool* pbGotFileList );
void InvalidateDirContent( const char *pszDirname );
virtual CPLString GetFSPrefix() { return "/vsicurl/"; }
virtual bool AllowCachedDataFor(const char* pszFilename);
std::shared_ptr<std::string> GetRegion( const char* pszURL,
vsi_l_offset nFileOffsetStart );
void AddRegion( const char* pszURL,
vsi_l_offset nFileOffsetStart,
size_t nSize,
const char *pData );
bool GetCachedFileProp( const char* pszURL,
FileProp& oFileProp );
void SetCachedFileProp( const char* pszURL,
const FileProp& oFileProp );
void InvalidateCachedData( const char* pszURL );
CURLM *GetCurlMultiHandleFor( const CPLString& osURL );
virtual void ClearCache();
virtual void PartialClearCache(const char* pszFilename);
bool GetCachedDirList( const char* pszURL,
CachedDirList& oCachedDirList );
void SetCachedDirList( const char* pszURL,
const CachedDirList& oCachedDirList );
bool ExistsInCacheDirList( const CPLString& osDirname, bool *pbIsDir );
virtual CPLString GetURLFromFilename( const CPLString& osFilename );
};
/************************************************************************/
/* VSICurlHandle */
/************************************************************************/
class VSICurlHandle : public VSIVirtualHandle
{
CPL_DISALLOW_COPY_ASSIGN(VSICurlHandle)
protected:
VSICurlFilesystemHandler* poFS = nullptr;
bool m_bCached = true;
FileProp oFileProp{};
CPLString m_osFilename{}; // e.g "/vsicurl/http://example.com/foo"
char* m_pszURL = nullptr; // e.g "http://example.com/foo"
char **m_papszHTTPOptions = nullptr;
vsi_l_offset lastDownloadedOffset = VSI_L_OFFSET_MAX;
int nBlocksToDownload = 1;
bool bStopOnInterruptUntilUninstall = false;
bool bInterrupted = false;
VSICurlReadCbkFunc pfnReadCbk = nullptr;
void *pReadCbkUserData = nullptr;
int m_nMaxRetry = 0;
double m_dfRetryDelay = 0.0;
void DownloadRegionPostProcess( const vsi_l_offset startOffset,
const int nBlocks,
const char* pBuffer,
size_t nSize );
private:
vsi_l_offset curOffset = 0;
bool bEOF = false;
virtual bool DownloadRegion(vsi_l_offset startOffset, int nBlocks);
bool m_bUseHead = false;
int ReadMultiRangeSingleGet( int nRanges, void ** ppData,
const vsi_l_offset* panOffsets,
const size_t* panSizes );
CPLString GetRedirectURLIfValid(bool& bHasExpired);
protected:
virtual struct curl_slist* GetCurlHeaders( const CPLString& /*osVerb*/,
const struct curl_slist* /* psExistingHeaders */)
{ return nullptr; }
virtual bool AllowAutomaticRedirection() { return true; }
virtual bool CanRestartOnError( const char*, const char*, bool ) { return false; }
virtual bool UseLimitRangeGetInsteadOfHead() { return false; }
virtual bool IsDirectoryFromExists( const char* /*pszVerb*/, int /*response_code*/ ) { return false; }
virtual void ProcessGetFileSizeResult(const char* /* pszContent */ ) {}
void SetURL(const char* pszURL);
public:
VSICurlHandle( VSICurlFilesystemHandler* poFS,
const char* pszFilename,
const char* pszURLIn = nullptr );
~VSICurlHandle() override;
int Seek( vsi_l_offset nOffset, int nWhence ) override;
vsi_l_offset Tell() override;
size_t Read( void *pBuffer, size_t nSize, size_t nMemb ) override;
int ReadMultiRange( int nRanges, void ** ppData,
const vsi_l_offset* panOffsets,
const size_t* panSizes ) override;
size_t Write( const void *pBuffer, size_t nSize, size_t nMemb ) override;
int Eof() override;
int Flush() override;
int Close() override;
bool IsKnownFileSize() const { return oFileProp.bHasComputedFileSize; }
vsi_l_offset GetFileSize() { return GetFileSize(false); }
virtual vsi_l_offset GetFileSize( bool bSetError );
bool Exists( bool bSetError );
bool IsDirectory() const { return oFileProp.bIsDirectory; }
time_t GetMTime() const { return oFileProp.mTime; }
int InstallReadCbk( VSICurlReadCbkFunc pfnReadCbk,
void* pfnUserData,
int bStopOnInterruptUntilUninstall );
int UninstallReadCbk();
const char *GetURL() const { return m_pszURL; }
};
/************************************************************************/
/* IVSIS3LikeFSHandler */
/************************************************************************/
class IVSIS3LikeFSHandler: public VSICurlFilesystemHandler
{
CPL_DISALLOW_COPY_ASSIGN(IVSIS3LikeFSHandler)
protected:
char** GetFileList( const char *pszFilename,
int nMaxFiles,
bool* pbGotFileList ) override;
virtual IVSIS3LikeHandleHelper* CreateHandleHelper(
const char* pszURI, bool bAllowNoObject) = 0;
IVSIS3LikeFSHandler() = default;
public:
int Unlink( const char *pszFilename ) override;
int Mkdir( const char *pszDirname, long nMode ) override;
int Rmdir( const char *pszDirname ) override;
int Stat( const char *pszFilename, VSIStatBufL *pStatBuf,
int nFlags ) override;
virtual int DeleteObject( const char *pszFilename );
virtual const char* GetDebugKey() const = 0;
virtual void UpdateMapFromHandle(IVSIS3LikeHandleHelper*) {}
virtual void UpdateHandleFromMap( IVSIS3LikeHandleHelper * ) {}
bool Sync( const char* pszSource, const char* pszTarget,
const char* const * papszOptions,
GDALProgressFunc pProgressFunc,
void *pProgressData,
char*** ppapszOutputs ) override;
VSIDIR* OpenDir( const char *pszPath, int nRecurseDepth,
const char* const *papszOptions) override;
};
/************************************************************************/
/* IVSIS3LikeHandle */
/************************************************************************/
class IVSIS3LikeHandle: public VSICurlHandle
{
CPL_DISALLOW_COPY_ASSIGN(IVSIS3LikeHandle)
protected:
bool UseLimitRangeGetInsteadOfHead() override { return true; }
bool IsDirectoryFromExists( const char* pszVerb,
int response_code ) override
{
// A bit dirty, but on S3, a GET on a existing directory returns a 416
return response_code == 416 && EQUAL(pszVerb, "GET") &&
CPLString(m_pszURL).back() == '/';
}
void ProcessGetFileSizeResult( const char* pszContent ) override
{
oFileProp.bIsDirectory = strstr(pszContent, "ListBucketResult") != nullptr;
}
public:
IVSIS3LikeHandle( VSICurlFilesystemHandler* poFSIn,
const char* pszFilename,
const char* pszURLIn = nullptr ) :
VSICurlHandle(poFSIn, pszFilename, pszURLIn) {}
~IVSIS3LikeHandle() override {}
};
/************************************************************************/
/* VSIS3WriteHandle */
/************************************************************************/
class VSIS3WriteHandle final : public VSIVirtualHandle
{
CPL_DISALLOW_COPY_ASSIGN(VSIS3WriteHandle)
IVSIS3LikeFSHandler *m_poFS = nullptr;
CPLString m_osFilename{};
IVSIS3LikeHandleHelper *m_poS3HandleHelper = nullptr;
bool m_bUseChunked = false;
vsi_l_offset m_nCurOffset = 0;
int m_nBufferOff = 0;
int m_nBufferSize = 0;
int m_nBufferOffReadCallback = 0;
bool m_bClosed = false;
GByte *m_pabyBuffer = nullptr;
CPLString m_osUploadID{};
int m_nPartNumber = 0;
std::vector<CPLString> m_aosEtags{};
CPLString m_osXML{};
int m_nOffsetInXML = 0;
bool m_bError = false;
CURLM *m_hCurlMulti = nullptr;
CURL *m_hCurl = nullptr;
const void *m_pBuffer = nullptr;
CPLString m_osCurlErrBuf{};
size_t m_nChunkedBufferOff = 0;
size_t m_nChunkedBufferSize = 0;
static size_t ReadCallBackBuffer( char *buffer, size_t size,
size_t nitems, void *instream );
bool InitiateMultipartUpload();
bool UploadPart();
static size_t ReadCallBackXML( char *buffer, size_t size,
size_t nitems, void *instream );
bool CompleteMultipart();
bool AbortMultipart();
bool DoSinglePartPUT();
static size_t ReadCallBackBufferChunked( char *buffer, size_t size,
size_t nitems, void *instream );
size_t WriteChunked( const void *pBuffer,
size_t nSize, size_t nMemb );
int FinishChunkedTransfer();
void InvalidateParentDirectory();
public:
VSIS3WriteHandle( IVSIS3LikeFSHandler* poFS,
const char* pszFilename,
IVSIS3LikeHandleHelper* poS3HandleHelper,
bool bUseChunked );
~VSIS3WriteHandle() override;
int Seek( vsi_l_offset nOffset, int nWhence ) override;
vsi_l_offset Tell() override;
size_t Read( void *pBuffer, size_t nSize, size_t nMemb ) override;
size_t Write( const void *pBuffer, size_t nSize, size_t nMemb ) override;
int Eof() override;
int Close() override;
bool IsOK() { return m_bUseChunked || m_pabyBuffer != nullptr; }
};
/************************************************************************/
/* VSIAppendWriteHandle */
/************************************************************************/
class VSIAppendWriteHandle : public VSIVirtualHandle
{
CPL_DISALLOW_COPY_ASSIGN(VSIAppendWriteHandle)
protected:
VSICurlFilesystemHandler* m_poFS = nullptr;
CPLString m_osFSPrefix{};
CPLString m_osFilename{};
vsi_l_offset m_nCurOffset = 0;
int m_nBufferOff = 0;
int m_nBufferSize = 0;
int m_nBufferOffReadCallback = 0;
bool m_bClosed = false;
GByte *m_pabyBuffer = nullptr;
bool m_bError = false;
static size_t ReadCallBackBuffer( char *buffer, size_t size,
size_t nitems, void *instream );
virtual bool Send(bool bIsLastBlock) = 0;
public:
VSIAppendWriteHandle( VSICurlFilesystemHandler* poFS,
const char* pszFSPrefix,
const char* pszFilename,
int nChunkSize );
virtual ~VSIAppendWriteHandle();
int Seek( vsi_l_offset nOffset, int nWhence ) override;
vsi_l_offset Tell() override;
size_t Read( void *pBuffer, size_t nSize, size_t nMemb ) override;
size_t Write( const void *pBuffer, size_t nSize, size_t nMemb ) override;
int Eof() override;
int Close() override;
bool IsOK() { return m_pabyBuffer != nullptr; }
};
int VSICURLGetDownloadChunkSize();
void VSICURLInitWriteFuncStruct( WriteFuncStruct *psStruct,
VSILFILE *fp,
VSICurlReadCbkFunc pfnReadCbk,
void *pReadCbkUserData );
size_t VSICurlHandleWriteFunc( void *buffer, size_t count,
size_t nmemb, void *req );
void MultiPerform(CURLM* hCurlMultiHandle,
CURL* hEasyHandle = nullptr);
void VSICURLResetHeaderAndWriterFunctions(CURL* hCurlHandle);
} // namespace cpl
//! @endcond
#endif // HAVE_CURL
#endif // CPL_VSIL_CURL_CLASS_H_INCLUDED

View File

@@ -1,5 +1,5 @@
/**********************************************************************
* $Id: cpl_worker_thread_pool.h 9ff327806cd64df6d73a6c91f92d12ca0c5e07df 2018-04-07 20:25:06 +0200 Even Rouault $
* $Id: cpl_worker_thread_pool.h 9b93d5aaef0e512d52da849390cb72856db540b6 2018-07-01 22:10:36 +0200 Even Rouault $
*
* Project: CPL - Common Portability Library
* Purpose: CPL worker thread pool
@@ -74,15 +74,17 @@ typedef enum
/** Pool of worker threads */
class CPL_DLL CPLWorkerThreadPool
{
std::vector<CPLWorkerThread> aWT;
CPLCond* hCond;
CPLMutex* hMutex;
volatile CPLWorkerThreadState eState;
CPLList* psJobQueue;
volatile int nPendingJobs;
CPL_DISALLOW_COPY_ASSIGN(CPLWorkerThreadPool)
CPLList* psWaitingWorkerThreadsList;
int nWaitingWorkerThreads;
std::vector<CPLWorkerThread> aWT{};
CPLCond* hCond = nullptr;
CPLMutex* hMutex = nullptr;
volatile CPLWorkerThreadState eState = CPLWTS_OK;
CPLList* psJobQueue = nullptr;
volatile int nPendingJobs = 0;
CPLList* psWaitingWorkerThreadsList = nullptr;
int nWaitingWorkerThreads = 0;
static void WorkerThreadFunction(void* user_data);
@@ -96,9 +98,14 @@ class CPL_DLL CPLWorkerThreadPool
bool Setup(int nThreads,
CPLThreadFunc pfnInitFunc,
void** pasInitData);
bool Setup(int nThreads,
CPLThreadFunc pfnInitFunc,
void** pasInitData,
bool bWaitallStarted);
bool SubmitJob(CPLThreadFunc pfnFunc, void* pData);
bool SubmitJobs(CPLThreadFunc pfnFunc, const std::vector<void*>& apData);
void WaitCompletion(int nMaxRemainingJobs = 0);
void WaitEvent();
/** Return the number of threads setup */
int GetThreadCount() const { return static_cast<int>(aWT.size()); }

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: cplkeywordparser.h 21e39584409342c2c70c6635a2b0329113de8975 2018-01-06 16:34:40Z Even Rouault $
* $Id: cplkeywordparser.h c39d156816d937c3139360b11786c769aeabd21e 2018-05-05 19:48:08 +0200 Even Rouault $
*
* Project: Common Portability Library
* Purpose: Implementation of CPLKeywordParser - a class for parsing
@@ -45,16 +45,18 @@
class CPLKeywordParser
{
char **papszKeywordList;
char **papszKeywordList = nullptr;
CPLString osHeaderText;
const char *pszHeaderNext;
CPLString osHeaderText{};
const char *pszHeaderNext = nullptr;
void SkipWhite();
bool ReadWord( CPLString &osWord );
bool ReadPair( CPLString &osName, CPLString &osValue );
bool ReadGroup( const char *pszPathPrefix, int nRecLevel );
CPL_DISALLOW_COPY_ASSIGN(CPLKeywordParser)
public:
CPLKeywordParser();
~CPLKeywordParser();

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: gdal.h 2a145ae8e090b07cdddea4397fd43a26d2a78591 2018-05-07 20:12:57 +0200 Even Rouault $
* $Id: gdal.h 2519a7eb0e1649dbf8625ae8ffc7bb7c3ef9514b 2018-07-10 12:05:23 +0100 Robert Coup $
*
* Project: GDAL Core
* Purpose: GDAL Core C/Public declarations.
@@ -225,7 +225,7 @@ const char CPL_DLL *GDALGetPaletteInterpretationName( GDALPaletteInterp );
/* "well known" metadata items. */
/** Metadata item for dataset that indicates the spatial interpreation of a
/** Metadata item for dataset that indicates the spatial interpretation of a
* pixel */
#define GDALMD_AREA_OR_POINT "AREA_OR_POINT"
/** Value for GDALMD_AREA_OR_POINT that indicates that a pixel represents an
@@ -1102,8 +1102,17 @@ typedef enum {
/*! Maximum GFU value (equals to GFU_AlphaMax+1 currently) */ GFU_MaxCount
} GDALRATFieldUsage;
/** RAT table type (thematic or athematic)
* @since GDAL 2.4
*/
typedef enum {
/*! Thematic table type */ GRTT_THEMATIC,
/*! Athematic table type */ GRTT_ATHEMATIC
} GDALRATTableType;
GDALRasterAttributeTableH CPL_DLL CPL_STDCALL
GDALCreateRasterAttributeTable(void) CPL_WARN_UNUSED_RESULT;
void CPL_DLL CPL_STDCALL GDALDestroyRasterAttributeTable(
GDALRasterAttributeTableH );
@@ -1153,19 +1162,23 @@ CPLErr CPL_DLL CPL_STDCALL GDALRATSetLinearBinning( GDALRasterAttributeTableH,
double, double );
int CPL_DLL CPL_STDCALL GDALRATGetLinearBinning( GDALRasterAttributeTableH,
double *, double * );
CPLErr CPL_DLL CPL_STDCALL GDALRATSetTableType( GDALRasterAttributeTableH hRAT,
const GDALRATTableType eInTableType );
GDALRATTableType CPL_DLL CPL_STDCALL GDALRATGetTableType( GDALRasterAttributeTableH hRAT);
CPLErr CPL_DLL CPL_STDCALL GDALRATInitializeFromColorTable(
GDALRasterAttributeTableH, GDALColorTableH );
GDALColorTableH CPL_DLL CPL_STDCALL GDALRATTranslateToColorTable(
GDALRasterAttributeTableH, int nEntryCount );
void CPL_DLL CPL_STDCALL GDALRATDumpReadable( GDALRasterAttributeTableH,
FILE * );
GDALRasterAttributeTableH CPL_DLL CPL_STDCALL
GDALRATClone( GDALRasterAttributeTableH );
GDALRasterAttributeTableH CPL_DLL CPL_STDCALL
GDALRATClone( const GDALRasterAttributeTableH );
void CPL_DLL* CPL_STDCALL
GDALRATSerializeJSON( GDALRasterAttributeTableH ) CPL_WARN_UNUSED_RESULT;
int CPL_DLL CPL_STDCALL GDALRATGetRowOfValue( GDALRasterAttributeTableH, double );
void CPL_DLL CPL_STDCALL GDALRATRemoveStatistics( GDALRasterAttributeTableH );
/* ==================================================================== */
/* GDAL Cache Management */

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: gdal_alg.h ecc4064ad058e92440d85c2a83501cc45579c06c 2017-07-24 19:24:22Z Even Rouault $
* $Id: gdal_alg.h b9ddc19f9ccd776cac9388f260aebc24439f10aa 2018-10-09 11:45:33 +0200 Julien Cabieces $
*
* Project: GDAL Image Processing Algorithms
* Purpose: Prototypes, and definitions for various GDAL based algorithms.
@@ -306,6 +306,8 @@ typedef struct
double adfGeoTransform[6];
int nElevField;
int nElevFieldMin;
int nElevFieldMax;
int nIDField;
int nNextID;
} OGRContourWriterInfo;
@@ -316,11 +318,16 @@ OGRContourWriter( double, int, double *, double *, void *pInfo );
CPLErr CPL_DLL
GDALContourGenerate( GDALRasterBandH hBand,
double dfContourInterval, double dfContourBase,
int nFixedLevelCount, double *padfFixedLevels,
int bUseNoData, double dfNoDataValue,
void *hLayer, int iIDField, int iElevField,
GDALProgressFunc pfnProgress, void *pProgressArg );
double dfContourInterval, double dfContourBase,
int nFixedLevelCount, double *padfFixedLevels,
int bUseNoData, double dfNoDataValue,
void *hLayer, int iIDField, int iElevField,
GDALProgressFunc pfnProgress, void *pProgressArg );
CPLErr CPL_DLL
GDALContourGenerateEx( GDALRasterBandH hBand, void *hLayer,
CSLConstList options,
GDALProgressFunc pfnProgress, void *pProgressArg );
/************************************************************************/
/* Rasterizer API - geometries burned into GDAL raster. */

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: gdal_alg_priv.h e13dcd4dc171dfeed63f912ba06b9374ce4f3bb2 2018-03-18 21:37:41Z Even Rouault $
* $Id: gdal_alg_priv.h fe2d81c8819bf9794bce0210098e637565728350 2018-05-06 00:49:51 +0200 Even Rouault $
*
* Project: GDAL Image Processing Algorithms
* Purpose: Prototypes and definitions for various GDAL based algorithms:
@@ -112,15 +112,17 @@ private:
void MergePolygon( int nSrcId, int nDstId );
int NewPolygon( DataType nValue );
CPL_DISALLOW_COPY_ASSIGN(GDALRasterPolygonEnumeratorT)
public: // these are intended to be readonly.
GInt32 *panPolyIdMap;
DataType *panPolyValue;
GInt32 *panPolyIdMap = nullptr;
DataType *panPolyValue = nullptr;
int nNextPolygonId;
int nPolyAlloc;
int nNextPolygonId = 0;
int nPolyAlloc = 0;
int nConnectedness;
int nConnectedness = 0;
public:
explicit GDALRasterPolygonEnumeratorT( int nConnectedness=4 );

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: gdal_frmts.h cc3abf4797c390d97322b20caac26099104f0b58 2017-12-21 13:19:20Z Even Rouault $
* $Id: gdal_frmts.h 91d70b77cc330670d972f2317dbdf3a5b424f845 2018-10-15 00:43:04 +0200 Even Rouault $
*
* Project: GDAL
* Purpose: Prototypes for all format specific driver initialization.
@@ -157,6 +157,7 @@ void CPL_DLL GDALRegister_KMLSUPEROVERLAY(void);
void CPL_DLL GDALRegister_GTX(void);
void CPL_DLL GDALRegister_LOSLAS(void);
void CPL_DLL GDALRegister_Istar(void);
void CPL_DLL GDALRegister_NTv1(void);
void CPL_DLL GDALRegister_NTv2(void);
void CPL_DLL GDALRegister_CTable2(void);
void CPL_DLL GDALRegister_JP2OpenJPEG(void);
@@ -192,6 +193,11 @@ void CPL_DLL GDALRegister_JP2Lura(void);
void CPL_DLL GDALRegister_PRF(void);
void CPL_DLL GDALRegister_NULL(void);
void CPL_DLL GDALRegister_RDA(void);
void CPL_DLL GDALRegister_EEDAI(void);
void CPL_DLL GDALRegister_EEDA(void);
void CPL_DLL GDALRegister_SIGDEM(void);
void CPL_DLL GDALRegister_BYN(void);
void CPL_DLL GDALRegister_IGNFHeightASCIIGrid(void);
CPL_C_END
#endif /* ndef GDAL_FRMTS_H_INCLUDED */

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: gdal_mdreader.h 7cbc4992fe78542e3ade2da352b283218f4a5ffb 2017-12-19 16:39:24Z Even Rouault $
* $Id: gdal_mdreader.h e37e476c4cf8f4b0df8995e0d95d5d672fca1a9b 2018-05-05 16:54:18 +0200 Even Rouault $
*
* Project: GDAL Core
* Purpose: Read metadata (mainly the remote sensing imagery) from files of
@@ -97,6 +97,9 @@ typedef enum {
* The base class for all metadata readers
*/
class GDALMDReaderBase{
CPL_DISALLOW_COPY_ASSIGN(GDALMDReaderBase)
public:
GDALMDReaderBase(const char *pszPath, char **papszSiblingFiles);
virtual ~GDALMDReaderBase();
@@ -161,11 +164,11 @@ protected:
const char *pszValue);
protected:
//! @cond Doxygen_Suppress
char **m_papszIMDMD;
char **m_papszRPCMD;
char **m_papszIMAGERYMD;
char **m_papszDEFAULTMD;
bool m_bIsMetadataLoad;
char **m_papszIMDMD = nullptr;
char **m_papszRPCMD = nullptr;
char **m_papszIMAGERYMD = nullptr;
char **m_papszDEFAULTMD = nullptr;
bool m_bIsMetadataLoad = false;
//! @endcond
};
@@ -175,6 +178,9 @@ protected:
* for provided path.
*/
class CPL_DLL GDALMDReaderManager{
CPL_DISALLOW_COPY_ASSIGN(GDALMDReaderManager)
public:
GDALMDReaderManager();
virtual ~GDALMDReaderManager();
@@ -194,7 +200,7 @@ public:
GUInt32 nType = MDR_ANY);
protected:
//! @cond Doxygen_Suppress
GDALMDReaderBase *m_pReader;
GDALMDReaderBase *m_pReader = nullptr;
//! @endcond
};

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: gdal_pam.h 773b7550bb86d46bc587f547f5db549566665834 2017-12-18 04:05:13Z Kurt Schwehr $
* $Id: gdal_pam.h e37e476c4cf8f4b0df8995e0d95d5d672fca1a9b 2018-05-05 16:54:18 +0200 Even Rouault $
*
* Project: GDAL Core
* Purpose: Declaration for Peristable Auxiliary Metadata classes.
@@ -87,22 +87,22 @@ class GDALPamRasterBand;
class GDALDatasetPamInfo
{
public:
char *pszPamFilename;
char *pszPamFilename = nullptr;
char *pszProjection;
char *pszProjection = nullptr;
int bHaveGeoTransform;
double adfGeoTransform[6];
int bHaveGeoTransform = false;
double adfGeoTransform[6]{0,0,0,0,0,0};
int nGCPCount;
GDAL_GCP *pasGCPList;
char *pszGCPProjection;
int nGCPCount = 0;
GDAL_GCP *pasGCPList = nullptr;
char *pszGCPProjection = nullptr;
CPLString osPhysicalFilename;
CPLString osSubdatasetName;
CPLString osAuxFilename;
CPLString osPhysicalFilename{};
CPLString osSubdatasetName{};
CPLString osAuxFilename{};
int bHasMetadata;
int bHasMetadata = false;
};
//! @endcond
@@ -122,8 +122,8 @@ class CPL_DLL GDALPamDataset : public GDALDataset
GDALPamDataset(void);
//! @cond Doxygen_Suppress
int nPamFlags;
GDALDatasetPamInfo *psPam;
int nPamFlags = 0;
GDALDatasetPamInfo *psPam = nullptr;
virtual CPLXMLNode *SerializeToXML( const char *);
virtual CPLErr XMLInit( CPLXMLNode *, const char * );
@@ -249,7 +249,7 @@ class CPL_DLL GDALPamRasterBand : public GDALRasterBand
void PamInitialize();
void PamClear();
GDALRasterBandPamInfo *psPam;
GDALRasterBandPamInfo *psPam = nullptr;
//! @endcond
public:

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: gdal_priv.h 12e52bca5d2ef4d60eac422db198aefa9577be63 2018-07-14 19:04:33 +0200 Even Rouault $
* $Id: gdal_priv.h e5e7b313540f0ff913fadfe6a273fb7c356a22cb 2018-11-02 22:54:20 +0100 Even Rouault $
*
* Name: gdal_priv.h
* Project: GDAL Core
@@ -134,8 +134,8 @@ class CPL_DLL GDALMajorObject
protected:
//! @cond Doxygen_Suppress
int nFlags; // GMO_* flags.
CPLString sDescription;
GDALMultiDomainMetadata oMDMD;
CPLString sDescription{};
GDALMultiDomainMetadata oMDMD{};
//! @endcond
@@ -187,7 +187,7 @@ class CPL_DLL GDALDefaultOverviews
GDALDataset *poDS;
GDALDataset *poODS;
CPLString osOvrFilename;
CPLString osOvrFilename{};
bool bOvrIsAux;
@@ -323,10 +323,6 @@ class swq_select_parse_options;
typedef struct GDALSQLParseInfo GDALSQLParseInfo;
//! @endcond
#ifdef DETECT_OLD_IRASTERIO
typedef void signature_changed;
#endif
//! @cond Doxygen_Suppress
#ifdef GDAL_COMPILATION
#define OPTIONAL_OUTSIDE_GDAL(val)
@@ -352,26 +348,24 @@ class CPL_DLL GDALDataset : public GDALMajorObject
void AddToDatasetOpenList();
void Init( bool bForceCachedIO );
protected:
//! @cond Doxygen_Suppress
GDALDriver *poDriver;
GDALAccess eAccess;
GDALDriver *poDriver = nullptr;
GDALAccess eAccess = GA_ReadOnly;
// Stored raster information.
int nRasterXSize;
int nRasterYSize;
int nBands;
GDALRasterBand **papoBands;
int nRasterXSize = 512;
int nRasterYSize = 512;
int nBands = 0;
GDALRasterBand **papoBands = nullptr;
int nOpenFlags;
int nOpenFlags = 0;
int nRefCount;
bool bForceCachedIO;
bool bShared;
bool bIsInternal;
bool bSuppressOnClose;
int nRefCount = 1;
bool bForceCachedIO = false;
bool bShared = false;
bool bIsInternal = true;
bool bSuppressOnClose = false;
GDALDataset(void);
explicit GDALDataset(int bForceCachedIO);
@@ -379,17 +373,11 @@ class CPL_DLL GDALDataset : public GDALMajorObject
void RasterInitialize( int, int );
void SetBand( int, GDALRasterBand * );
GDALDefaultOverviews oOvManager;
GDALDefaultOverviews oOvManager{};
virtual CPLErr IBuildOverviews( const char *, int, int *,
int, int *, GDALProgressFunc, void * );
#ifdef DETECT_OLD_IRASTERIO
virtual signature_changed IRasterIO( GDALRWFlag, int, int, int, int,
void *, int, int, GDALDataType,
int, int *, int, int, int ) {};
#endif
virtual CPLErr IRasterIO( GDALRWFlag, int, int, int, int,
void *, int, int, GDALDataType,
int, int *, GSpacing, GSpacing, GSpacing,
@@ -441,7 +429,7 @@ class CPL_DLL GDALDataset : public GDALMajorObject
//! @cond Doxygen_Suppress
int ValidateLayerCreationOptions( const char* const* papszLCO );
char **papszOpenOptions;
char **papszOpenOptions = nullptr;
friend class GDALRasterBand;
@@ -484,7 +472,7 @@ class CPL_DLL GDALDataset : public GDALMajorObject
public:
Iterator(GDALDataset* poDS, bool bStart);
Iterator(const Iterator& oOther); // declared but not defined. Needed for gcc 5.4 at least
Iterator(Iterator&& oOther); // declared but not defined. Needed for gcc 5.4 at least
Iterator(Iterator&& oOther) noexcept; // declared but not defined. Needed for gcc 5.4 at least
~Iterator();
GDALRasterBand* operator*();
Iterator& operator++();
@@ -627,10 +615,10 @@ class CPL_DLL GDALDataset : public GDALMajorObject
struct FeatureLayerPair
{
/** Unique pointer to a OGRFeature. */
OGRFeatureUniquePtr feature;
OGRFeatureUniquePtr feature{};
/** Layer to which the feature belongs to. */
OGRLayer* layer;
OGRLayer* layer = nullptr;
};
private:
@@ -641,7 +629,7 @@ private:
OGRGeometry *poSpatialFilter,
const char *pszDialect,
swq_select_parse_options* poSelectParseOptions);
CPLStringList oDerivedMetadataList;
CPLStringList oDerivedMetadataList{};
public:
@@ -679,11 +667,11 @@ private:
Iterator(); /**< Default constructor */
Iterator(GDALDataset* poDS, bool bStart); /**< Constructor */
Iterator(const Iterator& oOther); /**< Copy constructor */
Iterator(Iterator&& oOther); /**< Move constructor */
Iterator(Iterator&& oOther) noexcept; /**< Move constructor */
~Iterator(); /**< Destructor */
Iterator& operator=(const Iterator& oOther); /**< Assignment operator */
Iterator& operator=(Iterator&& oOther); /**< Move assignment operator */
Iterator& operator=(Iterator&& oOther) noexcept; /**< Move assignment operator */
OGRLayer* operator*() const; /**< Dereference operator */
Iterator& operator++(); /**< Pre-increment operator */
@@ -729,7 +717,7 @@ private:
public:
Iterator(GDALDataset* poDS, bool bStart);
Iterator(const Iterator& oOther); // declared but not defined. Needed for gcc 5.4 at least
Iterator(Iterator&& oOther); // declared but not defined. Needed for gcc 5.4 at least
Iterator(Iterator&& oOther) noexcept; // declared but not defined. Needed for gcc 5.4 at least
~Iterator();
const FeatureLayerPair& operator*() const;
Iterator& operator++();
@@ -801,7 +789,7 @@ private:
OGRErr ProcessSQLAlterTableAlterColumn( const char * );
OGRErr ProcessSQLAlterTableRenameColumn( const char * );
OGRStyleTable *m_poStyleTable;
OGRStyleTable *m_poStyleTable = nullptr;
//! @endcond
private:
@@ -950,7 +938,7 @@ class CPL_DLL GDALColorTable
{
GDALPaletteInterp eInterp;
std::vector<GDALColorEntry> aoEntries;
std::vector<GDALColorEntry> aoEntries{};
public:
explicit GDALColorTable( GDALPaletteInterp = GPI_RGB );
@@ -995,13 +983,15 @@ public:
class CPL_DLL GDALAbstractBandBlockCache
{
// List of blocks that can be freed or recycled, and its lock
CPLLock *hSpinLock;
GDALRasterBlock *psListBlocksToFree;
CPLLock *hSpinLock = nullptr;
GDALRasterBlock *psListBlocksToFree = nullptr;
// Band keep alive counter, and its lock & condition
CPLCond *hCond;
CPLMutex *hCondMutex;
volatile int nKeepAliveCounter;
CPLCond *hCond = nullptr;
CPLMutex *hCondMutex = nullptr;
volatile int nKeepAliveCounter = 0;
CPL_DISALLOW_COPY_ASSIGN(GDALAbstractBandBlockCache)
protected:
GDALRasterBand *poBand;
@@ -1046,37 +1036,36 @@ class CPL_DLL GDALRasterBand : public GDALMajorObject
friend class GDALHashSetBandBlockCache;
friend class GDALRasterBlock;
CPLErr eFlushBlockErr;
GDALAbstractBandBlockCache* poBandBlockCache;
CPLErr eFlushBlockErr = CE_None;
GDALAbstractBandBlockCache* poBandBlockCache = nullptr;
void SetFlushBlockErr( CPLErr eErr );
CPLErr UnreferenceBlock( GDALRasterBlock* poBlock );
void Init(int bForceCachedIO);
void SetValidPercent( GUIntBig nSampleCount, GUIntBig nValidCount );
protected:
//! @cond Doxygen_Suppress
GDALDataset *poDS;
int nBand; /* 1 based */
GDALDataset *poDS = nullptr;
int nBand = 0; /* 1 based */
int nRasterXSize;
int nRasterYSize;
int nRasterXSize = 0;
int nRasterYSize = 0;
GDALDataType eDataType;
GDALAccess eAccess;
GDALDataType eDataType = GDT_Byte;
GDALAccess eAccess = GA_ReadOnly;
/* stuff related to blocking, and raster cache */
int nBlockXSize;
int nBlockYSize;
int nBlocksPerRow;
int nBlocksPerColumn;
int nBlockXSize = -1;
int nBlockYSize = -1;
int nBlocksPerRow = 0;
int nBlocksPerColumn = 0;
int nBlockReads;
int bForceCachedIO;
int nBlockReads = 0;
int bForceCachedIO = 0;
GDALRasterBand *poMask;
bool bOwnMask;
int nMaskFlags;
GDALRasterBand *poMask = nullptr;
bool bOwnMask = false;
int nMaskFlags = 0;
void InvalidateMaskBand();
@@ -1097,12 +1086,6 @@ class CPL_DLL GDALRasterBand : public GDALMajorObject
virtual CPLErr IReadBlock( int nBlockXOff, int nBlockYOff, void * pData ) = 0;
virtual CPLErr IWriteBlock( int nBlockXOff, int nBlockYOff, void * pData );
#ifdef DETECT_OLD_IRASTERIO
virtual signature_changed IRasterIO( GDALRWFlag, int, int, int, int,
void *, int, int, GDALDataType,
int, int ) {};
#endif
virtual CPLErr IRasterIO( GDALRWFlag, int, int, int, int,
void *, int, int, GDALDataType,
GSpacing, GSpacing, GDALRasterIOExtraArg* psExtraArg ) CPL_WARN_UNUSED_RESULT;
@@ -1283,12 +1266,20 @@ class CPL_DLL GDALAllValidMaskBand : public GDALRasterBand
protected:
CPLErr IReadBlock( int, int, void * ) override;
CPL_DISALLOW_COPY_ASSIGN(GDALAllValidMaskBand)
public:
explicit GDALAllValidMaskBand( GDALRasterBand * );
~GDALAllValidMaskBand() override;
GDALRasterBand *GetMaskBand() override;
int GetMaskFlags() override;
CPLErr ComputeStatistics( int bApproxOK,
double *pdfMin, double *pdfMax,
double *pdfMean, double *pdfStdDev,
GDALProgressFunc, void *pProgressData ) override;
};
/* ******************************************************************** */
@@ -1300,6 +1291,8 @@ class CPL_DLL GDALNoDataMaskBand : public GDALRasterBand
double dfNoDataValue;
GDALRasterBand *poParent;
CPL_DISALLOW_COPY_ASSIGN(GDALNoDataMaskBand)
protected:
CPLErr IReadBlock( int, int, void * ) override;
CPLErr IRasterIO( GDALRWFlag, int, int, int, int,
@@ -1322,6 +1315,8 @@ class CPL_DLL GDALNoDataValuesMaskBand : public GDALRasterBand
{
double *padfNodataValues;
CPL_DISALLOW_COPY_ASSIGN(GDALNoDataValuesMaskBand)
protected:
CPLErr IReadBlock( int, int, void * ) override;
@@ -1339,6 +1334,8 @@ class GDALRescaledAlphaBand : public GDALRasterBand
GDALRasterBand *poParent;
void *pTemp;
CPL_DISALLOW_COPY_ASSIGN(GDALRescaledAlphaBand)
protected:
CPLErr IReadBlock( int, int, void * ) override;
CPLErr IRasterIO( GDALRWFlag, int, int, int, int,
@@ -1472,6 +1469,12 @@ class CPL_DLL GDALDriver : public GDALMajorObject
static CPLErr DefaultCopyMasks( GDALDataset *poSrcDS,
GDALDataset *poDstDS,
int bStrict );
static CPLErr DefaultCopyMasks( GDALDataset *poSrcDS,
GDALDataset *poDstDS,
int bStrict,
CSLConstList papszOptions,
GDALProgressFunc pfnProgress,
void * pProgressData );
//! @endcond
static CPLErr QuietDelete( const char * pszName );
@@ -1511,9 +1514,9 @@ private:
class CPL_DLL GDALDriverManager : public GDALMajorObject
{
int nDrivers;
GDALDriver **papoDrivers;
std::map<CPLString, GDALDriver*> oMapNameToDrivers;
int nDrivers = 0;
GDALDriver **papoDrivers = nullptr;
std::map<CPLString, GDALDriver*> oMapNameToDrivers{};
GDALDriver *GetDriver_unlocked( int iDriver )
{ return (iDriver >= 0 && iDriver < nDrivers) ?
@@ -1522,6 +1525,8 @@ class CPL_DLL GDALDriverManager : public GDALMajorObject
GDALDriver *GetDriverByName_unlocked( const char * pszName )
{ return oMapNameToDrivers[CPLString(pszName).toupper()]; }
CPL_DISALLOW_COPY_ASSIGN(GDALDriverManager)
public:
GDALDriverManager();
~GDALDriverManager();
@@ -1553,6 +1558,9 @@ CPL_C_END
*/
class CPL_DLL GDALAsyncReader
{
CPL_DISALLOW_COPY_ASSIGN(GDALAsyncReader)
protected:
//! @cond Doxygen_Suppress
GDALDataset* poDS;
@@ -1811,6 +1819,8 @@ template<class T> inline bool ARE_REAL_EQUAL(T fVal1, T fVal2, int ulp = 2)
std::abs(fVal1 - fVal2) < std::numeric_limits<float>::epsilon() * std::abs(fVal1+fVal2) * ulp;
}
double GDALAdjustNoDataCloseToFloatMax(double dfVal);
#define DIV_ROUND_UP(a, b) ( ((a) % (b)) == 0 ? ((a) / (b)) : (((a) / (b)) + 1) )
// Number of data samples that will be used to compute approximate statistics

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: gdal_proxy.h d10f99bfacb1d7c3331a539c4667d1c95199313d 2017-12-18 12:00:18Z Kurt Schwehr $
* $Id: gdal_proxy.h b10430acb1303d18052fc20ebc36de01e01398fd 2018-10-25 14:49:58 -0500 Sander Jansen $
*
* Project: GDAL Core
* Purpose: GDAL Core C++/Private declarations
@@ -208,20 +208,20 @@ class GDALProxyPoolRasterBand;
class CPL_DLL GDALProxyPoolDataset : public GDALProxyDataset
{
private:
GIntBig responsiblePID;
GIntBig responsiblePID = -1;
char *pszProjectionRef;
double adfGeoTransform[6];
int bHasSrcProjection;
int bHasSrcGeoTransform;
char *pszGCPProjection;
int nGCPCount;
GDAL_GCP *pasGCPList;
CPLHashSet *metadataSet;
CPLHashSet *metadataItemSet;
char *pszProjectionRef = nullptr;
double adfGeoTransform[6]{0,1,0,0,0,1};
int bHasSrcProjection = false;
int bHasSrcGeoTransform = false;
char *pszGCPProjection = nullptr;
int nGCPCount = 0;
GDAL_GCP *pasGCPList = nullptr;
CPLHashSet *metadataSet = nullptr;
CPLHashSet *metadataItemSet = nullptr;
GDALProxyPoolCacheEntry* cacheEntry;
char *m_pszOwner;
GDALProxyPoolCacheEntry* cacheEntry = nullptr;
char *m_pszOwner = nullptr;
GDALDataset *RefUnderlyingDataset(bool bForceOpen);
@@ -245,6 +245,11 @@ class CPL_DLL GDALProxyPoolDataset : public GDALProxyDataset
void AddSrcBandDescription( GDALDataType eDataType, int nBlockXSize,
int nBlockYSize );
// Used by VRT SimpleSource to add a single GDALProxyPoolRasterBand while
// keeping all other bands initialized to a nullptr. This is under the assumption,
// VRT SimpleSource will not have to access any other bands than the one added.
void AddSrcBand(int nBand, GDALDataType eDataType, int nBlockXSize,
int nBlockYSize );
void FlushCache() override;
const char *GetProjectionRef() override;
@@ -279,17 +284,15 @@ class GDALProxyPoolMaskBand;
class CPL_DLL GDALProxyPoolRasterBand : public GDALProxyRasterBand
{
private:
CPLHashSet *metadataSet;
CPLHashSet *metadataItemSet;
char *pszUnitType;
char **papszCategoryNames;
GDALColorTable *poColorTable;
CPLHashSet *metadataSet = nullptr;
CPLHashSet *metadataItemSet = nullptr;
char *pszUnitType = nullptr;
char **papszCategoryNames = nullptr;
GDALColorTable *poColorTable = nullptr;
int nSizeProxyOverviewRasterBand;
GDALProxyPoolOverviewRasterBand **papoProxyOverviewRasterBand;
GDALProxyPoolMaskBand *poProxyMaskBand;
void Init();
int nSizeProxyOverviewRasterBand = 0;
GDALProxyPoolOverviewRasterBand **papoProxyOverviewRasterBand = nullptr;
GDALProxyPoolMaskBand *poProxyMaskBand = nullptr;
GDALRasterBand* RefUnderlyingRasterBand( bool bForceOpen );
@@ -338,11 +341,13 @@ class CPL_DLL GDALProxyPoolRasterBand : public GDALProxyRasterBand
class GDALProxyPoolOverviewRasterBand : public GDALProxyPoolRasterBand
{
private:
GDALProxyPoolRasterBand *poMainBand;
int nOverviewBand;
GDALProxyPoolRasterBand *poMainBand = nullptr;
int nOverviewBand = 0;
GDALRasterBand *poUnderlyingMainRasterBand;
int nRefCountUnderlyingMainRasterBand;
GDALRasterBand *poUnderlyingMainRasterBand = nullptr;
int nRefCountUnderlyingMainRasterBand = 0;
CPL_DISALLOW_COPY_ASSIGN(GDALProxyPoolOverviewRasterBand)
protected:
GDALRasterBand* RefUnderlyingRasterBand() override;
@@ -364,10 +369,12 @@ class GDALProxyPoolOverviewRasterBand : public GDALProxyPoolRasterBand
class GDALProxyPoolMaskBand : public GDALProxyPoolRasterBand
{
private:
GDALProxyPoolRasterBand *poMainBand;
GDALProxyPoolRasterBand *poMainBand = nullptr;
GDALRasterBand *poUnderlyingMainRasterBand;
int nRefCountUnderlyingMainRasterBand;
GDALRasterBand *poUnderlyingMainRasterBand = nullptr;
int nRefCountUnderlyingMainRasterBand = 0;
CPL_DISALLOW_COPY_ASSIGN(GDALProxyPoolMaskBand)
protected:
GDALRasterBand* RefUnderlyingRasterBand() override;

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: gdal_rat.h 3c5e4ec07e57067c187d87dad3b6be5490b76a4e 2018-04-02 23:38:56 +0200 Even Rouault $
* $Id: gdal_rat.h 2519a7eb0e1649dbf8625ae8ffc7bb7c3ef9514b 2018-07-10 12:05:23 +0100 Robert Coup $
*
* Project: GDAL Core
* Purpose: GDALRasterAttributeTable class declarations.
@@ -60,7 +60,7 @@ public:
*
* @return new copy of the RAT as an in-memory implementation.
*/
virtual GDALDefaultRasterAttributeTable *Clone() const = 0;
virtual GDALRasterAttributeTable *Clone() const = 0;
/**
* \brief Fetch table column count.
@@ -238,6 +238,25 @@ public:
*/
virtual int ChangesAreWrittenToFile() = 0;
/**
* \brief Set the RAT table type.
*
* Set whether the RAT is thematic or athematic (continuous).
*
* @since GDAL 2.4
*/
virtual CPLErr SetTableType(const GDALRATTableType eInTableType) = 0;
/**
* \brief Get the RAT table type.
*
* Indicates whether the RAT is thematic or athematic (continuous).
*
* @since GDAL 2.4
* @return table type
*/
virtual GDALRATTableType GetTableType() const = 0;
virtual CPLErr ValuesIO( GDALRWFlag eRWFlag, int iField,
int iStartRow, int iLength,
double *pdfData);
@@ -285,6 +304,13 @@ public:
*/
static inline GDALRasterAttributeTable* FromHandle(GDALRasterAttributeTableH hRAT)
{ return static_cast<GDALRasterAttributeTable*>(hRAT); }
/**
* \brief Remove statistics from the RAT.
*
* @since GDAL 2.4
*/
virtual void RemoveStatistics() = 0;
};
/************************************************************************/
@@ -296,15 +322,15 @@ public:
class GDALRasterAttributeField
{
public:
CPLString sName;
CPLString sName{};
GDALRATFieldType eType;
GDALRATFieldType eType = GFT_Integer;
GDALRATFieldUsage eUsage;
GDALRATFieldUsage eUsage = GFU_Generic;
std::vector<GInt32> anValues;
std::vector<double> adfValues;
std::vector<CPLString> aosValues;
std::vector<GInt32> anValues{};
std::vector<double> adfValues{};
std::vector<CPLString> aosValues{};
};
//! @endcond
@@ -314,28 +340,28 @@ class GDALRasterAttributeField
//! Raster Attribute Table container.
// cppcheck-suppress copyCtorAndEqOperator
class CPL_DLL GDALDefaultRasterAttributeTable : public GDALRasterAttributeTable
{
private:
std::vector<GDALRasterAttributeField> aoFields;
std::vector<GDALRasterAttributeField> aoFields{};
int bLinearBinning; // TODO(schwehr): Can this be a bool?
double dfRow0Min;
double dfBinSize;
int bLinearBinning = false; // TODO(schwehr): Can this be a bool?
double dfRow0Min = -0.5;
double dfBinSize = 1.0;
GDALRATTableType eTableType;
void AnalyseColumns();
int bColumnsAnalysed; // TODO(schwehr): Can this be a bool?
int nMinCol;
int nMaxCol;
int bColumnsAnalysed = false; // TODO(schwehr): Can this be a bool?
int nMinCol = -1;
int nMaxCol = -1;
int nRowCount;
int nRowCount = 0;
CPLString osWorkingResult;
CPLString osWorkingResult{};
public:
GDALDefaultRasterAttributeTable();
GDALDefaultRasterAttributeTable( const GDALDefaultRasterAttributeTable& );
~GDALDefaultRasterAttributeTable() override;
GDALDefaultRasterAttributeTable *Clone() const override;
@@ -372,6 +398,11 @@ class CPL_DLL GDALDefaultRasterAttributeTable : public GDALRasterAttributeTable
double dfBinSize ) override;
int GetLinearBinning( double *pdfRow0Min,
double *pdfBinSize ) const override;
CPLErr SetTableType(const GDALRATTableType eInTableType) override;
GDALRATTableType GetTableType() const override;
void RemoveStatistics() override;
};
#endif /* ndef GDAL_RAT_H_INCLUDED */

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: gdal_simplesurf.h 1b31a5ae8474bacb2fb8cce9c7121b390e192c4c 2016-12-04 04:32:31Z Kurt Schwehr $
* $Id: gdal_simplesurf.h fe2d81c8819bf9794bce0210098e637565728350 2018-05-06 00:49:51 +0200 Even Rouault $
* Project: GDAL
* Purpose: Correlator
* Author: Andrew Migal, migal.drew@gmail.com
@@ -187,6 +187,8 @@ private:
*/
class GDALIntegralImage
{
CPL_DISALLOW_COPY_ASSIGN(GDALIntegralImage)
public:
GDALIntegralImage();
virtual ~GDALIntegralImage();
@@ -260,9 +262,9 @@ public:
int GetWidth();
private:
double **pMatrix;
int nWidth;
int nHeight;
double **pMatrix = nullptr;
int nWidth = 0;
int nHeight = 0;
};
/**
@@ -275,6 +277,8 @@ private:
*/
class GDALOctaveLayer
{
CPL_DISALLOW_COPY_ASSIGN(GDALOctaveLayer)
public:
GDALOctaveLayer();
@@ -424,12 +428,8 @@ private:
class MatchedPointPairInfo
{
public:
MatchedPointPairInfo(int nInd_1, int nInd_2, double dfDist)
{
ind_1 = nInd_1;
ind_2 = nInd_2;
euclideanDist = dfDist;
}
MatchedPointPairInfo(int nInd_1, int nInd_2, double dfDist):
ind_1(nInd_1), ind_2(nInd_2), euclideanDist(dfDist) {}
int ind_1;
int ind_2;

View File

@@ -6,8 +6,8 @@
#ifndef GDAL_VERSION_MAJOR
# define GDAL_VERSION_MAJOR 2
# define GDAL_VERSION_MINOR 3
# define GDAL_VERSION_REV 2
# define GDAL_VERSION_MINOR 4
# define GDAL_VERSION_REV 1
# define GDAL_VERSION_BUILD 0
#endif
@@ -24,9 +24,9 @@
#if !defined(DO_NOT_DEFINE_GDAL_RELEASE_DATE_AND_GDAL_RELEASE_NAME)
#ifndef GDAL_RELEASE_DATE
# define GDAL_RELEASE_DATE 20180921
# define GDAL_RELEASE_DATE 20190315
#endif
#ifndef GDAL_RELEASE_NAME
# define GDAL_RELEASE_NAME "2.3.2"
# define GDAL_RELEASE_NAME "2.4.1"
#endif
#endif

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: gdalgeorefpamdataset.h 773b7550bb86d46bc587f547f5db549566665834 2017-12-18 04:05:13Z Kurt Schwehr $
* $Id: gdalgeorefpamdataset.h e37e476c4cf8f4b0df8995e0d95d5d672fca1a9b 2018-05-05 16:54:18 +0200 Even Rouault $
*
* Project: GDAL
* Purpose: GDALPamDataset with internal storage for georeferencing, with
@@ -59,6 +59,8 @@ class CPL_DLL GDALGeorefPamDataset : public GDALPamDataset
bool m_bPAMLoaded;
char** m_papszMainMD;
CPL_DISALLOW_COPY_ASSIGN(GDALGeorefPamDataset)
public:
GDALGeorefPamDataset();
~GDALGeorefPamDataset() override;

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: gdaljp2abstractdataset.h d10f99bfacb1d7c3331a539c4667d1c95199313d 2017-12-18 12:00:18Z Kurt Schwehr $
* $Id: gdaljp2abstractdataset.h e37e476c4cf8f4b0df8995e0d95d5d672fca1a9b 2018-05-05 16:54:18 +0200 Even Rouault $
*
* Project: GDAL
* Purpose: GDALGeorefPamDataset with helper to read georeferencing and other
@@ -36,11 +36,13 @@
class CPL_DLL GDALJP2AbstractDataset: public GDALGeorefPamDataset
{
char* pszWldFilename;
char* pszWldFilename = nullptr;
GDALDataset* poMemDS;
char** papszMetadataFiles;
int m_nWORLDFILEIndex;
GDALDataset* poMemDS = nullptr;
char** papszMetadataFiles = nullptr;
int m_nWORLDFILEIndex = -1;
CPL_DISALLOW_COPY_ASSIGN(GDALJP2AbstractDataset)
protected:
int CloseDependentDatasets() override;

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: gdaljp2metadata.h 7e07230bbff24eb333608de4dbd460b7312839d0 2017-12-11 19:08:47Z Even Rouault $
* $Id: gdaljp2metadata.h e37e476c4cf8f4b0df8995e0d95d5d672fca1a9b 2018-05-05 16:54:18 +0200 Even Rouault $
*
* Project: GDAL
* Purpose: JP2 Box Reader (and GMLJP2 Interpreter)
@@ -59,6 +59,8 @@ class CPL_DLL GDALJP2Box
GByte *pabyData;
CPL_DISALLOW_COPY_ASSIGN(GDALJP2Box)
public:
explicit GDALJP2Box( VSILFILE * = nullptr );
~GDALJP2Box();
@@ -140,6 +142,8 @@ private:
GDALDataset* poSrcDS,
int bMainMDDomainOnly );
CPL_DISALLOW_COPY_ASSIGN(GDALJP2Metadata)
public:
char **papszGMLMetadata;

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: gdalpansharpen.h 4971449609881d6ffdca70188292293852d12691 2017-12-17 16:48:14Z Even Rouault $
* $Id: gdalpansharpen.h fe2d81c8819bf9794bce0210098e637565728350 2018-05-06 00:49:51 +0200 Even Rouault $
*
* Project: GDAL Pansharpening module
* Purpose: Prototypes, and definitions for pansharpening related work.
@@ -187,13 +187,15 @@ typedef struct
*/
class GDALPansharpenOperation
{
GDALPansharpenOptions* psOptions;
std::vector<int> anInputBands;
std::vector<GDALDataset*> aVDS; // to destroy
std::vector<GDALRasterBand*> aMSBands; // original multispectral bands potentially warped into a VRT
int bPositiveWeights;
CPLWorkerThreadPool* poThreadPool;
int nKernelRadius;
CPL_DISALLOW_COPY_ASSIGN(GDALPansharpenOperation)
GDALPansharpenOptions* psOptions = nullptr;
std::vector<int> anInputBands{};
std::vector<GDALDataset*> aVDS{}; // to destroy
std::vector<GDALRasterBand*> aMSBands{}; // original multispectral bands potentially warped into a VRT
int bPositiveWeights = TRUE;
CPLWorkerThreadPool* poThreadPool = nullptr;
int nKernelRadius = 0;
static void PansharpenJobThreadFunc(void* pUserData);
static void PansharpenResampleJobThreadFunc(void* pUserData);

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: gdalsse_priv.h a82a268adfd10bccfa254f9e416a68c105315d25 2018-04-08 13:53:09 +0200 Even Rouault $
* $Id: gdalsse_priv.h e37e476c4cf8f4b0df8995e0d95d5d672fca1a9b 2018-05-05 16:54:18 +0200 Even Rouault $
*
* Project: GDAL
* Purpose: SSE2 helper
@@ -96,10 +96,17 @@ class XMMReg2Double
public:
__m128d xmm;
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Weffc++"
#endif
/* coverity[uninit_member] */
XMMReg2Double() {}
XMMReg2Double() = default;
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif
XMMReg2Double(double val) { xmm = _mm_load_sd (&val); }
XMMReg2Double(double val): xmm(_mm_load_sd (&val)) {}
XMMReg2Double(const XMMReg2Double& other) : xmm(other.xmm) {}
static inline XMMReg2Double Zero()
@@ -1001,7 +1008,16 @@ class XMMReg4Double
public:
XMMReg2Double low, high;
XMMReg4Double() {}
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Weffc++"
#endif
/* coverity[uninit_member] */
XMMReg4Double() = default;
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif
XMMReg4Double(const XMMReg4Double& other) : low(other.low), high(other.high) {}
static inline XMMReg4Double Zero()

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: gdalwarper.h 7e07230bbff24eb333608de4dbd460b7312839d0 2017-12-11 19:08:47Z Even Rouault $
* $Id: gdalwarper.h d16ecc80707f9c7097a11bfe47c8403bb9df310f 2018-07-27 20:14:48 -0700 piyush.agram@jpl.nasa.gov $
*
* Project: GDAL High Performance Warper
* Purpose: Prototypes, and definitions for warping related work.
@@ -155,13 +155,15 @@ typedef struct {
/*! The "nodata" value real component for each input band, if NULL there isn't one */
double *padfSrcNoDataReal;
/*! The "nodata" value imaginary component - may be NULL even if real
component is provided. */
component is provided. This value is not used to flag invalid values.
Only the real component is used. */
double *padfSrcNoDataImag;
/*! The "nodata" value real component for each output band, if NULL there isn't one */
double *padfDstNoDataReal;
/*! The "nodata" value imaginary component - may be NULL even if real
component is provided. */
component is provided. Note that warp operations only use real component
for flagging invalid data.*/
double *padfDstNoDataImag;
/*! GDALProgressFunc() compatible progress reporting function, or NULL
@@ -317,6 +319,8 @@ CPL_C_END
*/
class CPL_DLL GDALWarpKernel
{
CPL_DISALLOW_COPY_ASSIGN(GDALWarpKernel)
public:
/** Warp options */
char **papszWarpOptions;
@@ -436,6 +440,9 @@ typedef struct _GDALWarpChunk GDALWarpChunk;
/*! @endcond */
class CPL_DLL GDALWarpOperation {
CPL_DISALLOW_COPY_ASSIGN(GDALWarpOperation)
private:
GDALWarpOptions *psOptions;
@@ -449,6 +456,12 @@ private:
double *pdfSrcXExtraSize, double *pdfSrcYExtraSize,
double* pdfSrcFillRatio );
void ComputeSourceWindowStartingFromSource(
int nDstXOff, int nDstYOff,
int nDstXSize, int nDstYSize,
double* padfSrcMinX, double* padfSrcMinY,
double* padfSrcMaxX, double* padfSrcMaxY);
static CPLErr CreateKernelMask( GDALWarpKernel *, int iBand,
const char *pszType );

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: memdataset.h a570977d47b4689910835836ea861f77906d06ae 2018-03-13 17:44:13Z Even Rouault $
* $Id: memdataset.h e37e476c4cf8f4b0df8995e0d95d5d672fca1a9b 2018-05-05 16:54:18 +0200 Even Rouault $
*
* Project: Memory Array Translator
* Purpose: Declaration of MEMDataset, and MEMRasterBand.
@@ -54,6 +54,8 @@ class MEMRasterBand;
class CPL_DLL MEMDataset : public GDALDataset
{
CPL_DISALLOW_COPY_ASSIGN(MEMDataset)
friend class MEMRasterBand;
int bGeoTransformSet;
@@ -127,6 +129,8 @@ class CPL_DLL MEMRasterBand : public GDALPamRasterBand
MEMRasterBand( GByte *pabyDataIn, GDALDataType eTypeIn,
int nXSizeIn, int nYSizeIn );
CPL_DISALLOW_COPY_ASSIGN(MEMRasterBand)
protected:
friend class MEMDataset;

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: ogr_attrind.h 2bc98a67d106359cbf36780cb385979e6c9a3b59 2016-08-04 22:26:31Z Even Rouault $
* $Id: ogr_attrind.h e37e476c4cf8f4b0df8995e0d95d5d672fca1a9b 2018-05-05 16:54:18 +0200 Even Rouault $
*
* Project: OpenGIS Simple Features Reference Implementation
* Purpose: Classes related to generic implementation of attribute indexing.
@@ -72,6 +72,7 @@ protected:
char *pszIndexPath;
OGRLayerAttrIndex();
CPL_DISALLOW_COPY_ASSIGN(OGRLayerAttrIndex)
public:
virtual ~OGRLayerAttrIndex();

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: ogr_core.h 971ad299681ca1ea2e1b800e88209f426b77e9aa 2018-04-17 12:14:43 +0200 Even Rouault $
* $Id: ogr_core.h 1e082b59d067cf2edf5713e15101c0b369d37e9a 2018-12-02 22:16:23 +0300 drons $
*
* Project: OpenGIS Simple Features Reference Implementation
* Purpose: Define some core portability services for cross-platform OGR code.
@@ -628,7 +628,11 @@ typedef enum
OFSTInt16 = 2,
/** Single precision (32 bit) floating point. Only valid for OFTReal and OFTRealList. */
OFSTFloat32 = 3,
OFSTMaxSubType = 3
/** JSON content. Only valid for OFTString.
* @since GDAL 2.4
*/
OFSTJSON = 4,
OFSTMaxSubType = 4
} OGRFieldSubType;
/**
@@ -869,7 +873,7 @@ typedef enum ogr_style_tool_param_symbol_id
OGRSTSymbolPerp = 7, /**< Perpendicular */
OGRSTSymbolOffset = 8, /**< Offset */
OGRSTSymbolPriority = 9, /**< Priority */
OGRSTSymbolFontName = 10, /**< OBSOLETE; do not use */
OGRSTSymbolFontName = 10, /**< Font name */
OGRSTSymbolOColor = 11, /**< Outline color */
#ifndef DOXYGEN_SKIP
OGRSTSymbolLast = 12

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: ogr_feature.h 679491121ae29a3c28a310501b7dc3b89235ec1b 2018-04-11 13:53:49 +0200 Even Rouault $
* $Id: ogr_feature.h 03663aa9cc098380fe5420faa4f424c3dac45a08 2018-10-29 23:18:12 +0100 Even Rouault $
*
* Project: OpenGIS Simple Features Reference Implementation
* Purpose: Class for representing a whole feature, and layer schemas.
@@ -183,12 +183,12 @@ class CPL_DLL OGRGeomFieldDefn
{
protected:
//! @cond Doxygen_Suppress
char *pszName;
OGRwkbGeometryType eGeomType; /* all values possible except wkbNone */
mutable OGRSpatialReference* poSRS;
char *pszName = nullptr;
OGRwkbGeometryType eGeomType = wkbUnknown; /* all values possible except wkbNone */
mutable OGRSpatialReference* poSRS = nullptr;
int bIgnore;
mutable int bNullable;
int bIgnore = false;
mutable int bNullable = true;
void Initialize( const char *, OGRwkbGeometryType );
//! @endcond
@@ -284,6 +284,7 @@ class CPL_DLL OGRFeatureDefn
virtual OGRFieldDefn *GetFieldDefn( int i );
virtual const OGRFieldDefn *GetFieldDefn( int i ) const;
virtual int GetFieldIndex( const char * ) const;
int GetFieldIndexCaseSensitive( const char * ) const;
virtual void AddFieldDefn( OGRFieldDefn * );
virtual OGRErr DeleteFieldDefn( int iField );
@@ -530,7 +531,7 @@ class CPL_DLL OGRFeature
public:
//! @cond Doxygen_Suppress
ConstFieldIterator(ConstFieldIterator&& oOther); // declared but not defined. Needed for gcc 5.4 at least
ConstFieldIterator(ConstFieldIterator&& oOther) noexcept; // declared but not defined. Needed for gcc 5.4 at least
~ConstFieldIterator();
const FieldValue& operator*() const;
ConstFieldIterator& operator++();
@@ -816,6 +817,9 @@ class CPL_DLL OGRFeatureQuery
OGRErr Compile( OGRLayer *, OGRFeatureDefn*, const char *,
int bCheck,
swq_custom_func_registrar* poCustomFuncRegistrar );
CPL_DISALLOW_COPY_ASSIGN(OGRFeatureQuery)
public:
OGRFeatureQuery();
~OGRFeatureQuery();

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: ogr_featurestyle.h 5da1c4d1b6c7e38f7f5917fff3ddbc8ad42af7aa 2018-03-30 21:59:13 +0200 Even Rouault $
* $Id: ogr_featurestyle.h 1e082b59d067cf2edf5713e15101c0b369d37e9a 2018-12-02 22:16:23 +0300 drons $
*
* Project: OpenGIS Simple Features Reference Implementation
* Purpose: Define of Feature Representation
@@ -84,10 +84,12 @@ typedef struct ogr_style_value
class CPL_DLL OGRStyleTable
{
private:
char **m_papszStyleTable;
char **m_papszStyleTable = nullptr;
CPLString osLastRequestedStyleName;
int iNextStyle;
CPLString osLastRequestedStyleName{};
int iNextStyle = 0;
CPL_DISALLOW_COPY_ASSIGN(OGRStyleTable)
public:
OGRStyleTable();
@@ -117,8 +119,10 @@ class OGRStyleTool;
class CPL_DLL OGRStyleMgr
{
private:
OGRStyleTable *m_poDataSetStyleTable;
char *m_pszStyleString;
OGRStyleTable *m_poDataSetStyleTable = nullptr;
char *m_pszStyleString = nullptr;
CPL_DISALLOW_COPY_ASSIGN(OGRStyleMgr)
public:
explicit OGRStyleMgr(OGRStyleTable *poDataSetStyleTable = nullptr);
@@ -161,15 +165,17 @@ class CPL_DLL OGRStyleMgr
class CPL_DLL OGRStyleTool
{
private:
GBool m_bModified;
GBool m_bParsed;
double m_dfScale;
OGRSTUnitId m_eUnit;
OGRSTClassId m_eClassId;
char *m_pszStyleString;
GBool m_bModified = false;
GBool m_bParsed = false;
double m_dfScale = 1.0;
OGRSTUnitId m_eUnit = OGRSTUMM;
OGRSTClassId m_eClassId = OGRSTCNone;
char *m_pszStyleString = nullptr;
virtual GBool Parse() = 0;
CPL_DISALLOW_COPY_ASSIGN(OGRStyleTool)
protected:
#ifndef DOXYGEN_SKIP
GBool Parse(const OGRStyleParamId* pasStyle,
@@ -264,6 +270,8 @@ class CPL_DLL OGRStylePen : public OGRStyleTool
GBool Parse() override;
CPL_DISALLOW_COPY_ASSIGN(OGRStylePen)
public:
OGRStylePen();
@@ -312,6 +320,8 @@ class CPL_DLL OGRStyleBrush : public OGRStyleTool
GBool Parse() override;
CPL_DISALLOW_COPY_ASSIGN(OGRStyleBrush)
public:
OGRStyleBrush();
@@ -358,6 +368,8 @@ class CPL_DLL OGRStyleSymbol : public OGRStyleTool
GBool Parse() override;
CPL_DISALLOW_COPY_ASSIGN(OGRStyleSymbol)
public:
OGRStyleSymbol();
@@ -387,6 +399,10 @@ class CPL_DLL OGRStyleSymbol : public OGRStyleTool
void SetPerp(double dfPerp){SetParamDbl(OGRSTSymbolPerp,dfPerp );}
int Priority(GBool &bDefault){return GetParamNum(OGRSTSymbolPriority,bDefault);}
void SetPriority(int nPriority){SetParamNum(OGRSTSymbolPriority,nPriority);}
const char *FontName(GBool &bDefault)
{return GetParamStr(OGRSTSymbolFontName,bDefault);}
void SetFontName(const char *pszFontName)
{SetParamStr(OGRSTSymbolFontName,pszFontName);}
const char *OColor(GBool &bDefault){return GetParamStr(OGRSTSymbolOColor,bDefault);}
void SetOColor(const char *pszColor){SetParamStr(OGRSTSymbolOColor,pszColor);}
@@ -412,6 +428,8 @@ class CPL_DLL OGRStyleLabel : public OGRStyleTool
GBool Parse() override;
CPL_DISALLOW_COPY_ASSIGN(OGRStyleLabel)
public:
OGRStyleLabel();

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: ogr_geometry.h 62c2ef9b70dfd1a0e087c7a27df0bfd375997093 2018-04-10 15:25:06 +0200 Even Rouault $
* $Id: ogr_geometry.h 967fd78f12996d9faa39a977a2b93547b10db65b 2018-10-14 20:02:24 +0200 Even Rouault $
*
* Project: OpenGIS Simple Features Reference Implementation
* Purpose: Classes for manipulating simple features that is not specific
@@ -286,13 +286,13 @@ class CPL_DLL OGRDefaultConstGeometryVisitor: public IOGRConstGeometryVisitor
class CPL_DLL OGRGeometry
{
private:
OGRSpatialReference * poSRS; // may be NULL
OGRSpatialReference * poSRS = nullptr; // may be NULL
protected:
//! @cond Doxygen_Suppress
friend class OGRCurveCollection;
unsigned int flags;
unsigned int flags = 0;
OGRErr importPreambleFromWkt( const char ** ppszInput,
int* pbHasZ, int* pbHasM,
@@ -947,7 +947,7 @@ class CPL_DLL OGRCurve : public OGRGeometry
std::unique_ptr<Private> m_poPrivate;
public:
ConstIterator(const OGRCurve* poSelf, bool bStart);
ConstIterator(ConstIterator&& oOther); // declared but not defined. Needed for gcc 5.4 at least
ConstIterator(ConstIterator&& oOther) noexcept; // declared but not defined. Needed for gcc 5.4 at least
~ConstIterator();
const OGRPoint& operator*() const;
ConstIterator& operator++();
@@ -1067,7 +1067,7 @@ class CPL_DLL OGRSimpleCurve: public OGRCurve
void update();
public:
Iterator(OGRSimpleCurve* poSelf, int nPos);
Iterator(Iterator&& oOther); // declared but not defined. Needed for gcc 5.4 at least
Iterator(Iterator&& oOther) noexcept; // declared but not defined. Needed for gcc 5.4 at least
~Iterator();
OGRPoint& operator*();
Iterator& operator++();
@@ -1083,7 +1083,7 @@ class CPL_DLL OGRSimpleCurve: public OGRCurve
std::unique_ptr<Private> m_poPrivate;
public:
ConstIterator(const OGRSimpleCurve* poSelf, int nPos);
ConstIterator(ConstIterator&& oOther); // declared but not defined. Needed for gcc 5.4 at least
ConstIterator(ConstIterator&& oOther) noexcept; // declared but not defined. Needed for gcc 5.4 at least
~ConstIterator();
const OGRPoint& operator*() const;
ConstIterator& operator++();
@@ -1240,6 +1240,7 @@ inline OGRSimpleCurve::ConstIterator end(const OGRSimpleCurve* poCurve) { return
class CPL_DLL OGRLineString : public OGRSimpleCurve
{
// cppcheck-suppress unusedPrivateFunction
static OGRLinearRing* CasterToLinearRing(OGRCurve* poCurve);
protected:
@@ -1485,8 +1486,8 @@ class CPL_DLL OGRCurveCollection
friend class OGRPolygon;
friend class OGRTriangle;
int nCurveCount;
OGRCurve **papoCurves;
int nCurveCount = 0;
OGRCurve **papoCurves = nullptr;
public:
OGRCurveCollection();
@@ -1579,7 +1580,7 @@ class CPL_DLL OGRCurveCollection
class CPL_DLL OGRCompoundCurve : public OGRCurve
{
private:
OGRCurveCollection oCC;
OGRCurveCollection oCC{};
OGRErr addCurveDirectlyInternal( OGRCurve* poCurve,
double dfToleranceEps,
@@ -1591,7 +1592,9 @@ class CPL_DLL OGRCompoundCurve : public OGRCurve
OGRLineString* CurveToLineInternal( double dfMaxAngleStepSizeDegrees,
const char* const* papszOptions,
int bIsLinearRing ) const;
// cppcheck-suppress unusedPrivateFunction
static OGRLineString* CasterToLineString( OGRCurve* poCurve );
// cppcheck-suppress unusedPrivateFunction
static OGRLinearRing* CasterToLinearRing( OGRCurve* poCurve );
protected:
@@ -1775,7 +1778,7 @@ class CPL_DLL OGRCurvePolygon : public OGRSurface
//! @cond Doxygen_Suppress
friend class OGRPolygon;
friend class OGRTriangle;
OGRCurveCollection oCC;
OGRCurveCollection oCC{};
virtual OGRSurfaceCasterToPolygon GetCasterToPolygon()
const override;
@@ -2032,6 +2035,7 @@ inline OGRPolygon::ChildType** end(OGRPolygon* poGeom) { return poGeom->end(); }
class CPL_DLL OGRTriangle : public OGRPolygon
{
private:
// cppcheck-suppress unusedPrivateFunction
static OGRPolygon* CasterToPolygon(OGRSurface* poSurface);
bool quickValidityCheck() const;
@@ -2098,8 +2102,8 @@ class CPL_DLL OGRGeometryCollection : public OGRGeometry
protected:
//! @cond Doxygen_Suppress
int nGeomCount;
OGRGeometry **papoGeoms;
int nGeomCount = 0;
OGRGeometry **papoGeoms = nullptr;
OGRErr exportToWktInternal( char ** ppszDstText,
OGRwkbVariant eWkbVariant,
@@ -2394,7 +2398,7 @@ class CPL_DLL OGRPolyhedralSurface : public OGRSurface
protected:
//! @cond Doxygen_Suppress
friend class OGRTriangulatedSurface;
OGRMultiPolygon oMP;
OGRMultiPolygon oMP{};
virtual OGRSurfaceCasterToPolygon GetCasterToPolygon()
const override;
virtual OGRSurfaceCasterToCurvePolygon GetCasterToCurvePolygon()

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: ogr_spatialref.h a5d470bdd8e89e3146e962ff5909fa30e2cb6cdf 2018-04-18 22:09:11 +0200 Even Rouault $
* $Id: ogr_spatialref.h e37e476c4cf8f4b0df8995e0d95d5d672fca1a9b 2018-05-05 16:54:18 +0200 Even Rouault $
*
* Project: OpenGIS Simple Features Reference Implementation
* Purpose: Classes for manipulating spatial reference systems in a
@@ -74,6 +74,8 @@ class CPL_DLL OGR_SRSNode
int NeedsQuoting() const;
OGRErr importFromWkt( const char **, int nRecLevel, int* pnNodes );
CPL_DISALLOW_COPY_ASSIGN(OGR_SRSNode)
public:
explicit OGR_SRSNode(const char * = nullptr);
~OGR_SRSNode();

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: ogrsf_frmts.h 857bdf514fa1373c19fe6eb91dff4f90a07f2020 2018-04-10 11:06:29 +0200 Even Rouault $
* $Id: ogrsf_frmts.h 4db9ec884a59751d80c7482f9f3d621ef3c640f6 2018-12-13 11:54:36 +0300 Dmitry Baryshnikov $
*
* Project: OpenGIS Simple Features Reference Implementation
* Purpose: Classes related to format registration, and file opening.
@@ -81,7 +81,7 @@ class CPL_DLL OGRLayer : public GDALMajorObject
std::unique_ptr<Private> m_poPrivate;
public:
FeatureIterator(OGRLayer* poLayer, bool bStart);
FeatureIterator(FeatureIterator&& oOther); // declared but not defined. Needed for gcc 5.4 at least
FeatureIterator(FeatureIterator&& oOther) noexcept; // declared but not defined. Needed for gcc 5.4 at least
~FeatureIterator();
OGRFeatureUniquePtr& operator*();
FeatureIterator& operator++();
@@ -91,6 +91,8 @@ class CPL_DLL OGRLayer : public GDALMajorObject
friend inline FeatureIterator begin(OGRLayer* poLayer);
friend inline FeatureIterator end(OGRLayer* poLayer);
CPL_DISALLOW_COPY_ASSIGN(OGRLayer)
protected:
//! @cond Doxygen_Suppress
int m_bFilterIsEnvelope;
@@ -445,6 +447,7 @@ void CPL_DLL RegisterOGRGML();
void CPL_DLL RegisterOGRLIBKML();
void CPL_DLL RegisterOGRKML();
void CPL_DLL RegisterOGRGeoJSON();
void CPL_DLL RegisterOGRGeoJSONSeq();
void CPL_DLL RegisterOGRESRIJSON();
void CPL_DLL RegisterOGRTopoJSON();
void CPL_DLL RegisterOGRAVCBin();
@@ -515,6 +518,7 @@ void CPL_DLL RegisterOGRMongoDB();
void CPL_DLL RegisterOGRVDV();
void CPL_DLL RegisterOGRGMLAS();
void CPL_DLL RegisterOGRMVT();
void CPL_DLL RegisterOGRNGW();
// @endcond
CPL_C_END

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: rawdataset.h 002b050d9a9ef403a732c1210784736ef97216d4 2018-04-09 21:34:55 +0200 Even Rouault $
* $Id: rawdataset.h b2723bb9ee29fb36de5c3afec9e9a6b757ef743c 2018-05-10 21:21:26 +0200 Even Rouault $
*
* Project: Raw Translator
* Purpose: Implementation of RawDataset class. Intended to be subclassed
@@ -80,27 +80,25 @@ class CPL_DLL RawRasterBand : public GDALPamRasterBand
protected:
friend class RawDataset;
FILE *fpRaw;
VSILFILE *fpRawL;
int bIsVSIL;
VSILFILE *fpRawL{};
vsi_l_offset nImgOffset;
int nPixelOffset;
int nLineOffset;
int nLineSize;
int bNativeOrder;
vsi_l_offset nImgOffset{};
int nPixelOffset{};
int nLineOffset{};
int nLineSize{};
int bNativeOrder{};
int nLoadedScanline;
void *pLineBuffer;
void *pLineStart;
int bDirty;
int nLoadedScanline{};
void *pLineBuffer{};
void *pLineStart{};
int bDirty{};
GDALColorTable *poCT;
GDALColorInterp eInterp;
GDALColorTable *poCT{};
GDALColorInterp eInterp{};
char **papszCategoryNames;
char **papszCategoryNames{};
int bOwnsFP;
int bOwnsFP{};
int Seek( vsi_l_offset, int );
size_t Read( void *, size_t, size_t );
@@ -121,17 +119,24 @@ protected:
public:
RawRasterBand( GDALDataset *poDS, int nBand, void * fpRaw,
vsi_l_offset nImgOffset, int nPixelOffset,
int nLineOffset,
GDALDataType eDataType, int bNativeOrder,
int bIsVSIL = FALSE, int bOwnsFP = FALSE );
enum class OwnFP
{
NO,
YES
};
RawRasterBand( void * fpRaw,
RawRasterBand( GDALDataset *poDS, int nBand, VSILFILE* fpRaw,
vsi_l_offset nImgOffset, int nPixelOffset,
int nLineOffset,
GDALDataType eDataType, int bNativeOrder,
int nXSize, int nYSize, int bIsVSIL = FALSE, int bOwnsFP = FALSE );
OwnFP bOwnsFP );
RawRasterBand( VSILFILE* fpRaw,
vsi_l_offset nImgOffset, int nPixelOffset,
int nLineOffset,
GDALDataType eDataType, int bNativeOrder,
int nXSize, int nYSize,
OwnFP bOwnsFP );
virtual ~RawRasterBand() /* = 0 */ ;
@@ -165,9 +170,7 @@ public:
int GetPixelOffset() const { return nPixelOffset; }
int GetLineOffset() const { return nLineOffset; }
int GetNativeOrder() const { return bNativeOrder; }
int GetIsVSIL() const { return bIsVSIL; }
FILE *GetFP() const { return (bIsVSIL) ? reinterpret_cast<FILE *>( fpRawL ) : fpRaw; }
VSILFILE *GetFPL() const { CPLAssert(bIsVSIL); return fpRawL; }
VSILFILE *GetFPL() const { return fpRawL; }
int GetOwnsFP() const { return bOwnsFP; }
private:

View File

@@ -123,7 +123,6 @@ public:
~swq_expr_node();
void Initialize();
void MarkAsTimestamp();
CPLString UnparseOperationFromUnparsedSubExpr(char** apszSubExpr);
char *Unparse( swq_field_list *, char chColumnQuote );
@@ -137,30 +136,30 @@ public:
void ReplaceBetweenByGEAndLERecurse();
swq_node_type eNodeType;
swq_field_type field_type;
swq_node_type eNodeType = SNT_CONSTANT;
swq_field_type field_type = SWQ_INTEGER;
/* only for SNT_OPERATION */
void PushSubExpression( swq_expr_node * );
void ReverseSubExpressions();
int nOperation;
int nSubExprCount;
swq_expr_node **papoSubExpr;
int nOperation = 0;
int nSubExprCount = 0;
swq_expr_node **papoSubExpr = nullptr;
/* only for SNT_COLUMN */
int field_index;
int table_index;
char *table_name;
int field_index = 0;
int table_index = 0;
char *table_name = nullptr;
/* only for SNT_CONSTANT */
int is_null;
GIntBig int_value;
double float_value;
OGRGeometry *geometry_value;
int is_null = false;
GIntBig int_value = 0;
double float_value = 0.0;
OGRGeometry *geometry_value = nullptr;
/* shared by SNT_COLUMN, SNT_CONSTANT and also possibly SNT_OPERATION when */
/* nOperation == SWQ_CUSTOM_FUNC */
char *string_value; /* column name when SNT_COLUMN */
char *string_value = nullptr; /* column name when SNT_COLUMN */
static CPLString QuoteIfNecessary( const CPLString &, char chQuote = '\'' );
static CPLString Quote( const CPLString &, char chQuote = '\'' );
@@ -306,17 +305,15 @@ public:
bool operator() (const CPLString&, const CPLString &) const;
};
GIntBig count;
GIntBig count = 0;
std::vector<CPLString> oVectorDistinctValues;
std::set<CPLString, Comparator> oSetDistinctValues;
double sum;
double min;
double max;
CPLString osMin;
CPLString osMax;
swq_summary() : count(0), sum(0.0), min(0.0), max(0.0) {}
std::vector<CPLString> oVectorDistinctValues{};
std::set<CPLString, Comparator> oSetDistinctValues{};
double sum = 0.0;
double min = 0.0;
double max = 0.0;
CPLString osMin{};
CPLString osMax{};
};
typedef struct {
@@ -354,43 +351,45 @@ class swq_select
{
void postpreparse();
CPL_DISALLOW_COPY_ASSIGN(swq_select)
public:
swq_select();
~swq_select();
int query_mode;
int query_mode = 0;
char *raw_select;
char *raw_select = nullptr;
int PushField( swq_expr_node *poExpr, const char *pszAlias=nullptr,
int distinct_flag = FALSE );
int result_columns;
swq_col_def *column_defs;
std::vector<swq_summary> column_summary;
int result_columns = 0;
swq_col_def *column_defs = nullptr;
std::vector<swq_summary> column_summary{};
int PushTableDef( const char *pszDataSource,
const char *pszTableName,
const char *pszAlias );
int table_count;
swq_table_def *table_defs;
int table_count = 0;
swq_table_def *table_defs = nullptr;
void PushJoin( int iSecondaryTable, swq_expr_node* poExpr );
int join_count;
swq_join_def *join_defs;
int join_count = 0;
swq_join_def *join_defs = nullptr;
swq_expr_node *where_expr;
swq_expr_node *where_expr = nullptr;
void PushOrderBy( const char* pszTableName, const char *pszFieldName, int bAscending );
int order_specs;
swq_order_def *order_defs;
int order_specs = 0;
swq_order_def *order_defs = nullptr;
void SetLimit( GIntBig nLimit );
GIntBig limit;
GIntBig limit = -1;
void SetOffset( GIntBig nOffset );
GIntBig offset;
GIntBig offset = 0;
swq_select *poOtherSelect;
swq_select *poOtherSelect = nullptr;
void PushUnionAll( swq_select* poOtherSelectIn );
CPLErr preparse( const char *select_statement,

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: thinplatespline.h 7e07230bbff24eb333608de4dbd460b7312839d0 2017-12-11 19:08:47Z Even Rouault $
* $Id: thinplatespline.h c85c58ac781ef781cd126006d91cb5eed2dd53e2 2018-05-18 18:16:52 +0200 Even Rouault $
*
* Project: GDAL Warp API
* Purpose: Declarations for 2D Thin Plate Spline transformer.
@@ -76,7 +76,9 @@ class VizGeorefSpline2D
y(nullptr),
u(nullptr),
unused(nullptr),
index(nullptr)
index(nullptr),
x_mean(0),
y_mean(0)
{
for( int i = 0; i < VIZGEOREF_MAX_VARS; i++ )
{
@@ -187,6 +189,8 @@ class VizGeorefSpline2D
int *unused; // [VIZ_GEOREF_SPLINE_MAX_POINTS];
int *index; // [VIZ_GEOREF_SPLINE_MAX_POINTS];
double x_mean;
double y_mean;
private:
CPL_DISALLOW_COPY_ASSIGN(VizGeorefSpline2D)
};

View File

@@ -1,5 +1,5 @@
/******************************************************************************
* $Id: vrtdataset.h c14f7e09fe06fcc8a02cdcce2f0ebc5d192d1597 2018-08-27 13:29:12 +0200 Even Rouault $
* $Id: vrtdataset.h b10430acb1303d18052fc20ebc36de01e01398fd 2018-10-25 14:49:58 -0500 Sander Jansen $
*
* Project: Virtual GDAL Datasets
* Purpose: Declaration of virtual gdal dataset classes.
@@ -38,6 +38,7 @@
#include "gdal_priv.h"
#include "gdal_rat.h"
#include "gdal_vrt.h"
#include "gdal_rat.h"
#include <map>
#include <memory>
@@ -60,13 +61,24 @@ void* VRTDeserializeWarpedOverviewTransformer( CPLXMLNode *psTree );
/************************************************************************/
class VRTOverviewInfo
{
public:
CPLString osFilename;
int nBand;
GDALRasterBand *poBand;
int bTriedToOpen;
CPL_DISALLOW_COPY_ASSIGN(VRTOverviewInfo)
public:
CPLString osFilename{};
int nBand = 0;
GDALRasterBand *poBand = nullptr;
int bTriedToOpen = FALSE;
VRTOverviewInfo() = default;
VRTOverviewInfo(VRTOverviewInfo&& oOther) noexcept:
osFilename(std::move(oOther.osFilename)),
nBand(oOther.nBand),
poBand(oOther.poBand),
bTriedToOpen(oOther.bTriedToOpen)
{
oOther.poBand = nullptr;
}
VRTOverviewInfo() : nBand(0), poBand(nullptr), bTriedToOpen(FALSE) {}
~VRTOverviewInfo() {
if( poBand == nullptr )
/* do nothing */;
@@ -131,9 +143,20 @@ VRTSource *VRTParseFilterSources( CPLXMLNode *psTree, const char *, void* pUniqu
class VRTRasterBand;
template<class T> struct VRTFlushCacheStruct
{
static void FlushCache(T& obj);
};
class VRTWarpedDataset;
class VRTPansharpenedDataset;
class CPL_DLL VRTDataset : public GDALDataset
{
friend class VRTRasterBand;
friend struct VRTFlushCacheStruct<VRTDataset>;
friend struct VRTFlushCacheStruct<VRTWarpedDataset>;
friend struct VRTFlushCacheStruct<VRTPansharpenedDataset>;
char *m_pszProjection;
@@ -153,6 +176,8 @@ class CPL_DLL VRTDataset : public GDALDataset
int m_bCompatibleForDatasetIO;
int CheckCompatibleForDatasetIO();
void ExpandProxyBands();
std::vector<GDALDataset*> m_apoOverviews;
std::vector<GDALDataset*> m_apoOverviewsBak;
char **m_papszXMLVRTMetadata;
@@ -160,6 +185,8 @@ class CPL_DLL VRTDataset : public GDALDataset
VRTRasterBand* InitBand(const char* pszSubclass, int nBand,
bool bAllowPansharpened);
CPL_DISALLOW_COPY_ASSIGN(VRTDataset)
protected:
virtual int CloseDependentDatasets() override;
@@ -266,6 +293,8 @@ class CPL_DLL VRTWarpedDataset : public VRTDataset
friend class VRTWarpedRasterBand;
CPL_DISALLOW_COPY_ASSIGN(VRTWarpedDataset)
protected:
virtual int CloseDependentDatasets() override;
@@ -273,6 +302,8 @@ public:
VRTWarpedDataset( int nXSize, int nYSize );
virtual ~VRTWarpedDataset();
virtual void FlushCache() override;
CPLErr Initialize( /* GDALWarpOptions */ void * );
virtual CPLErr IBuildOverviews( const char *, int, int *,
@@ -340,6 +371,8 @@ class VRTPansharpenedDataset : public VRTDataset
std::vector<GDALDataset*> m_apoDatasetsToClose;
CPL_DISALLOW_COPY_ASSIGN(VRTPansharpenedDataset)
protected:
virtual int CloseDependentDatasets() override;
@@ -347,6 +380,8 @@ public:
VRTPansharpenedDataset( int nXSize, int nYSize );
virtual ~VRTPansharpenedDataset();
virtual void FlushCache() override;
virtual CPLErr XMLInit( CPLXMLNode *, const char * ) override;
virtual CPLXMLNode * SerializeToXML( const char *pszVRTPath ) override;
@@ -411,6 +446,8 @@ class CPL_DLL VRTRasterBand : public GDALRasterBand
std::unique_ptr<GDALRasterAttributeTable> m_poRAT;
CPL_DISALLOW_COPY_ASSIGN(VRTRasterBand)
public:
VRTRasterBand();
@@ -503,6 +540,8 @@ class CPL_DLL VRTSourcedRasterBand : public VRTRasterBand
bool CanUseSourcesMinMaxImplementations();
void CheckSource( VRTSimpleSource *poSS );
CPL_DISALLOW_COPY_ASSIGN(VRTSourcedRasterBand)
public:
int nSources;
VRTSource **papoSources;
@@ -668,6 +707,8 @@ class CPL_DLL VRTDerivedRasterBand : public VRTSourcedRasterBand
VRTDerivedRasterBandPrivateData* m_poPrivate;
bool InitializePython();
CPL_DISALLOW_COPY_ASSIGN(VRTDerivedRasterBand)
public:
char *pszFuncName;
GDALDataType eSourceTransferType;
@@ -728,6 +769,8 @@ class CPL_DLL VRTRawRasterBand : public VRTRasterBand
char *m_pszSourceFilename;
int m_bRelativeToVRT;
CPL_DISALLOW_COPY_ASSIGN(VRTRawRasterBand)
public:
VRTRawRasterBand( GDALDataset *poDS, int nBand,
GDALDataType eType = GDT_Unknown );
@@ -763,6 +806,8 @@ class CPL_DLL VRTRawRasterBand : public VRTRasterBand
class VRTDriver : public GDALDriver
{
CPL_DISALLOW_COPY_ASSIGN(VRTDriver)
public:
VRTDriver();
virtual ~VRTDriver();
@@ -786,6 +831,8 @@ class VRTDriver : public GDALDriver
class CPL_DLL VRTSimpleSource : public VRTSource
{
CPL_DISALLOW_COPY_ASSIGN(VRTSimpleSource)
protected:
friend class VRTSourcedRasterBand;
@@ -899,6 +946,8 @@ public:
class VRTAveragedSource : public VRTSimpleSource
{
CPL_DISALLOW_COPY_ASSIGN(VRTAveragedSource)
public:
VRTAveragedSource();
virtual CPLErr RasterIO( GDALDataType eBandDataType,
@@ -942,6 +991,7 @@ typedef enum
class CPL_DLL VRTComplexSource : public VRTSimpleSource
{
CPL_DISALLOW_COPY_ASSIGN(VRTComplexSource)
bool AreValuesUnchanged() const;
protected:
@@ -1026,6 +1076,8 @@ class VRTFilteredSource : public VRTComplexSource
private:
int IsTypeSupported( GDALDataType eTestType ) const;
CPL_DISALLOW_COPY_ASSIGN(VRTFilteredSource)
protected:
int m_nSupportedTypesCount;
GDALDataType m_aeSupportedTypes[20];
@@ -1056,6 +1108,8 @@ public:
class VRTKernelFilteredSource : public VRTFilteredSource
{
CPL_DISALLOW_COPY_ASSIGN(VRTKernelFilteredSource)
protected:
int m_nKernelSize;
@@ -1085,6 +1139,8 @@ public:
class VRTAverageFilteredSource : public VRTKernelFilteredSource
{
CPL_DISALLOW_COPY_ASSIGN(VRTAverageFilteredSource)
public:
explicit VRTAverageFilteredSource( int nKernelSize );
virtual ~VRTAverageFilteredSource();
@@ -1098,6 +1154,8 @@ public:
/************************************************************************/
class VRTFuncSource : public VRTSource
{
CPL_DISALLOW_COPY_ASSIGN(VRTFuncSource)
public:
VRTFuncSource();
virtual ~VRTFuncSource();

View File

@@ -0,0 +1,201 @@
<?xml version="1.0"?>
<gmi:MI_Metadata xmlns:gmi="http://www.isotc211.org/2005/gmi" xmlns:gmd="http://www.isotc211.org/2005/gmd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:gco="http://www.isotc211.org/2005/gco" xmlns:bag="http://www.opennavsurf.org/schema/bag">
<gmd:language>
<gmd:LanguageCode codeList="http://www.loc.gov/standards/iso639-2/" codeListValue="eng">eng</gmd:LanguageCode>
</gmd:language>
<gmd:contact>
<gmd:CI_ResponsibleParty>
<gmd:individualName>
<gco:CharacterString>${INDIVIDUAL_NAME:unknown}</gco:CharacterString>
</gmd:individualName>
<gmd:organisationName>
<gco:CharacterString>${ORGANISATION_NAME:unknown}</gco:CharacterString>
</gmd:organisationName>
<gmd:positionName>
<gco:CharacterString>${POSITION_NAME:unknown}</gco:CharacterString>
</gmd:positionName>
<gmd:role>
<gmd:CI_RoleCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode" codeListValue="${CONTACT_ROLE:author}">${CONTACT_ROLE:author}</gmd:CI_RoleCode>
</gmd:role>
</gmd:CI_ResponsibleParty>
</gmd:contact>
<gmd:dateStamp>
<gco:Date>${DATE}</gco:Date>
</gmd:dateStamp>
<gmd:metadataStandardName>
<gco:CharacterString>${METADATA_STANDARD_NAME:ISO 19139}</gco:CharacterString>
</gmd:metadataStandardName>
<gmd:metadataStandardVersion>
<gco:CharacterString>${METADATA_STANDARD_VERSION:1.1.0}</gco:CharacterString>
</gmd:metadataStandardVersion>
<gmd:spatialRepresentationInfo>
<gmd:MD_Georectified>
<gmd:numberOfDimensions>
<gco:Integer>2</gco:Integer>
</gmd:numberOfDimensions>
<gmd:axisDimensionProperties>
<gmd:MD_Dimension>
<gmd:dimensionName>
<gmd:MD_DimensionNameTypeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_DimensionNameTypeCode" codeListValue="row">row</gmd:MD_DimensionNameTypeCode>
</gmd:dimensionName>
<gmd:dimensionSize>
<gco:Integer>${HEIGHT}</gco:Integer>
</gmd:dimensionSize>
<gmd:resolution>
<gco:Measure uom="${RES_UNIT}">${RESY}</gco:Measure>
</gmd:resolution>
</gmd:MD_Dimension>
</gmd:axisDimensionProperties>
<gmd:axisDimensionProperties>
<gmd:MD_Dimension>
<gmd:dimensionName>
<gmd:MD_DimensionNameTypeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_DimensionNameTypeCode" codeListValue="column">column</gmd:MD_DimensionNameTypeCode>
</gmd:dimensionName>
<gmd:dimensionSize>
<gco:Integer>${WIDTH}</gco:Integer>
</gmd:dimensionSize>
<gmd:resolution>
<gco:Measure uom="${RES_UNIT}">${RESX}</gco:Measure>
</gmd:resolution>
</gmd:MD_Dimension>
</gmd:axisDimensionProperties>
<gmd:cellGeometry>
<gmd:MD_CellGeometryCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_CellGeometryCode" codeListValue="point">point</gmd:MD_CellGeometryCode>
</gmd:cellGeometry>
<gmd:transformationParameterAvailability>
<gco:Boolean>1</gco:Boolean>
</gmd:transformationParameterAvailability>
<gmd:checkPointAvailability>
<gco:Boolean>0</gco:Boolean>
</gmd:checkPointAvailability>
<gmd:cornerPoints>
<gml:Point gml:id="id1">
<gml:coordinates decimal="." cs="," ts=" ">${CORNER_POINTS}</gml:coordinates>
</gml:Point>
</gmd:cornerPoints>
<gmd:pointInPixel>
<gmd:MD_PixelOrientationCode>center</gmd:MD_PixelOrientationCode>
</gmd:pointInPixel>
</gmd:MD_Georectified>
</gmd:spatialRepresentationInfo>
<gmd:referenceSystemInfo>
<gmd:MD_ReferenceSystem>
<gmd:referenceSystemIdentifier>
<gmd:RS_Identifier>
<gmd:code>
<gco:CharacterString>${HORIZ_WKT}</gco:CharacterString>
</gmd:code>
<gmd:codeSpace>
<gco:CharacterString>WKT</gco:CharacterString>
</gmd:codeSpace>
</gmd:RS_Identifier>
</gmd:referenceSystemIdentifier>
</gmd:MD_ReferenceSystem>
</gmd:referenceSystemInfo>
<gmd:referenceSystemInfo>
<gmd:MD_ReferenceSystem>
<gmd:referenceSystemIdentifier>
<gmd:RS_Identifier>
<gmd:code>
<gco:CharacterString>${VERT_WKT:VERT_CS["unknown", VERT_DATUM["unknown", 2000]]}</gco:CharacterString>
</gmd:code>
<gmd:codeSpace>
<gco:CharacterString>WKT</gco:CharacterString>
</gmd:codeSpace>
</gmd:RS_Identifier>
</gmd:referenceSystemIdentifier>
</gmd:MD_ReferenceSystem>
</gmd:referenceSystemInfo>
<gmd:identificationInfo>
<bag:BAG_DataIdentification>
<gmd:citation>${XML_IDENTIFICATION_CITATION:}</gmd:citation>
<gmd:abstract>
<gco:CharacterString>${ABSTRACT:}</gco:CharacterString>
</gmd:abstract>
<gmd:spatialRepresentationType>
<gmd:MD_SpatialRepresentationTypeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_SpatialRepresentationTypeCode" codeListValue="grid">grid</gmd:MD_SpatialRepresentationTypeCode>
</gmd:spatialRepresentationType>
<gmd:spatialResolution>
<gmd:MD_Resolution>
<gmd:distance>
<gco:Distance uom="${RES_UNIT}">${RES}</gco:Distance>
</gmd:distance>
</gmd:MD_Resolution>
</gmd:spatialResolution>
<gmd:language>
<gmd:LanguageCode codeList="http://www.loc.gov/standards/iso639-2/" codeListValue="eng">eng</gmd:LanguageCode>
</gmd:language>
<gmd:topicCategory>
<gmd:MD_TopicCategoryCode>elevation</gmd:MD_TopicCategoryCode>
</gmd:topicCategory>
<gmd:extent>
<gmd:EX_Extent>
<gmd:geographicElement>
<gmd:EX_GeographicBoundingBox>
<gmd:westBoundLongitude>
<gco:Decimal>${WEST_LONGITUDE}</gco:Decimal>
</gmd:westBoundLongitude>
<gmd:eastBoundLongitude>
<gco:Decimal>${EAST_LONGITUDE}</gco:Decimal>
</gmd:eastBoundLongitude>
<gmd:southBoundLatitude>
<gco:Decimal>${SOUTH_LATITUDE}</gco:Decimal>
</gmd:southBoundLatitude>
<gmd:northBoundLatitude>
<gco:Decimal>${NORTH_LATITUDE}</gco:Decimal>
</gmd:northBoundLatitude>
</gmd:EX_GeographicBoundingBox>
</gmd:geographicElement>
</gmd:EX_Extent>
</gmd:extent>
<bag:verticalUncertaintyType>
<bag:BAG_VertUncertCode codeList="http://www.opennavsurf.org/schema/bag/bagCodelists.xml#BAG_VertUncertCode" codeListValue="${VERTICAL_UNCERT_CODE:unknown}">${VERTICAL_UNCERT_CODE:unknown}</bag:BAG_VertUncertCode>
</bag:verticalUncertaintyType>
</bag:BAG_DataIdentification>
</gmd:identificationInfo>
<gmd:dataQualityInfo>
<gmd:DQ_DataQuality>
<gmd:scope>
<gmd:DQ_Scope>
<gmd:level>
<gmd:MD_ScopeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_ScopeCode" codeListValue="dataset">dataset</gmd:MD_ScopeCode>
</gmd:level>
</gmd:DQ_Scope>
</gmd:scope>
<gmd:lineage>
<gmd:LI_Lineage>
<gmd:processStep>
<gmd:LI_ProcessStep>
<gmd:description>
<gco:CharacterString>${PROCESS_STEP_DESCRIPTION}</gco:CharacterString>
</gmd:description>
<gmd:dateTime>
<gco:DateTime>${DATETIME}</gco:DateTime>
</gmd:dateTime>
</gmd:LI_ProcessStep>
</gmd:processStep>
</gmd:LI_Lineage>
</gmd:lineage>
</gmd:DQ_DataQuality>
</gmd:dataQualityInfo>
<gmd:metadataConstraints>
<gmd:MD_LegalConstraints>
<gmd:useConstraints>
<gmd:MD_RestrictionCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_RestrictionCode" codeListValue="${RESTRICTION_CODE:otherRestrictions}">${RESTRICTION_CODE:otherRestrictions}</gmd:MD_RestrictionCode>
</gmd:useConstraints>
<gmd:otherConstraints>
<gco:CharacterString>${RESTRICTION_OTHER_CONSTRAINTS:unknown}</gco:CharacterString>
</gmd:otherConstraints>
</gmd:MD_LegalConstraints>
</gmd:metadataConstraints>
<gmd:metadataConstraints>
<gmd:MD_SecurityConstraints>
<gmd:classification>
<gmd:MD_ClassificationCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_ClassificationCode" codeListValue="${CLASSIFICATION:unclassified}">${CLASSIFICATION:unclassified}</gmd:MD_ClassificationCode>
</gmd:classification>
<gmd:userNote>
<gco:CharacterString>${SECURITY_USER_NOTE:none}</gco:CharacterString>
</gmd:userNote>
</gmd:MD_SecurityConstraints>
</gmd:metadataConstraints>
</gmi:MI_Metadata>

View File

@@ -0,0 +1,11 @@
{
"##example_collection/example_subcollection": {
"fields": [
{ "name": "a_int_field", "type": "int" },
{ "name": "a_int64_field", "type": "int64" },
{ "name": "a_int64_field", "type": "int64" },
{ "name": "a_real_field", "type": "double" }
],
"add_other_properties_field": true
}
}

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
/******************************************************************************
* $Id: gdalvrt.xsd ff896f5762108a473f1f774dbab003d8fa1b0476 2016-09-16 20:34:58Z Even Rouault $
* $Id: gdalvrt.xsd 0b660817c8be72e80da43cf98f0a7c20b0371f9e 2018-07-31 17:46:11 +0200 Even Rouault $
*
* Project: GDAL/OGR
* Purpose: XML Schema for GDAL VRT files.
@@ -149,6 +149,7 @@
<xs:element name="Scale" type="xs:double"/>
<xs:element name="CategoryNames" type="CategoryNamesType"/>
<xs:element name="ColorTable" type="ColorTableType"/>
<xs:element name="GDALRasterAttributeTable" type="GDALRasterAttributeTableType"/>
<xs:element name="NoDataValue" type="DoubleOrNanType"/>
<xs:element name="NodataValue" type="xs:double"/> <!-- typo: deprecated -->
<xs:element name="HideNoDataValue" type="ZeroOrOne"/>
@@ -245,6 +246,29 @@
</xs:sequence>
</xs:complexType>
<xs:complexType name="GDALRasterAttributeTableType">
<xs:sequence>
<xs:element name="FieldDefn" type="FieldDefnType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="Row" type="RowType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="FieldDefnType">
<xs:sequence>
<xs:element name="Name" type="xs:string"/>
<xs:element name="Type" type="xs:unsignedInt"/>
<xs:element name="Usage" type="xs:unsignedInt"/>
</xs:sequence>
<xs:attribute name="index" type="xs:unsignedInt" use="required"/>
</xs:complexType>
<xs:complexType name="RowType">
<xs:sequence>
<xs:element name="F" type="xs:anyType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="index" type="xs:unsignedInt" use="required"/>
</xs:complexType>
<xs:complexType name="OverviewType">
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">

View File

@@ -25,7 +25,7 @@
<IncludeGeometryXML>false</IncludeGeometryXML>
<InstantiateGMLFeaturesOnly>true</InstantiateGMLFeaturesOnly>
</GML>
<!-- 60 for PostgreSQL compatiblity. The maximum is 64 but reserve
<!-- 60 for PostgreSQL compatibility. The maximum is 64 but reserve
some space so that the spatial index name can be formed -->
<IdentifierMaxLength>60</IdentifierMaxLength>
<!-- Whether layer and field names should be consider equal in a

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
/******************************************************************************
* $Id: gmlasconf.xsd fbfe44539df86a72c15d93da97a579789d3fbccc 2017-12-07 17:03:50Z Even Rouault $
* $Id: gmlasconf.xsd 6ef13199b493973da285decbfcd5e2a763954b97 2018-06-07 05:46:42 -0400 luzpaz $
*
* Project: GDAL/OGR
* Purpose: XML Schema for gmlasconf.xml
@@ -489,7 +489,7 @@
<xs:element name="ProxyAuth" minOccurs="0" type="xs:string">
<xs:annotation>
<xs:documentation>
Proxy authentification method: one of Basic, NTLM, Digest
Proxy authentication method: one of Basic, NTLM, Digest
or Any.
Default: none or value of GDAL_PROXY_AUTH
configuration option.
@@ -867,7 +867,7 @@
<xs:annotation>
<xs:documentation>
Number of spaces used to indent each level of nesting in
XML ouput.
XML output.
Default is 2.
</xs:documentation>
</xs:annotation>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
/******************************************************************************
* $Id: ogrvrt.xsd 55ecd4e11ef1179beec5787d5be781a5b15d61cf 2017-10-20 21:35:00Z Even Rouault $
* $Id: ogrvrt.xsd 4721d91b3b6e8cbe7e3168e4f83c8bbc323eaf25 2018-09-26 11:21:21 +0200 Even Rouault $
*
* Project: GDAL/OGR
* Purpose: XML Schema for OGR VRT files.
@@ -141,10 +141,10 @@
<xs:complexType name="FIDType">
<xs:simpleContent>
<xs:extension base="nonEmptyStringType">
<xs:extension base="xs:string">
<xs:attribute name="name" type="xs:string">
<xs:annotation>
<xs:documentation>A user-facing name can be specified here so that a FID column name is reported even if it is not reported as a regular field.</xs:documentation>
<xs:documentation>User-facing name of the FID column.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>

View File

@@ -9,6 +9,7 @@
{ "name": "columns", "type": "int" },
{ "name": "epsg_code", "type": "int" },
{ "name": "grid_cell", "type": "string" },
{ "name": "ground_control", "type": "boolean" },
{ "name": "gsd", "type": "double" },
{ "name": "item_type", "type": "string" },
{ "name": "origin_x", "type": "double" },
@@ -44,6 +45,7 @@
{ "name": "columns", "type": "int" },
{ "name": "epsg_code", "type": "int" },
{ "name": "grid_cell", "type": "string" },
{ "name": "ground_control", "type": "boolean" },
{ "name": "gsd", "type": "double" },
{ "name": "item_type", "type": "string" },
{ "name": "origin_x", "type": "double" },
@@ -75,6 +77,7 @@
{ "name": "cloud_cover", "type": "double" },
{ "name": "columns", "type": "int" },
{ "name": "epsg_code", "type": "int" },
{ "name": "ground_control", "type": "boolean" },
{ "name": "gsd", "type": "double" },
{ "name": "instrument", "type": "string" },
{ "name": "item_type", "type": "string" },
@@ -117,6 +120,7 @@
{ "name": "cloud_cover", "type": "double" },
{ "name": "columns", "type": "int" },
{ "name": "epsg_code", "type": "int" },
{ "name": "ground_control", "type": "boolean" },
{ "name": "gsd", "type": "double" },
{ "name": "instrument", "type": "string" },
{ "name": "item_type", "type": "string" },

View File

@@ -610,6 +610,10 @@ void GlobeBrowsingModule::loadWMSCapabilities(std::string name, std::string glob
GA_ReadOnly
);
if (!dataset) {
LWARNING("Could not open dataset: " + downloadUrl);
return Capabilities();
}
char** subDatasets = GDALGetMetadata(dataset, "SUBDATASETS");
const int nSubdatasets = CSLCount(subDatasets);
Capabilities cap = parseSubDatasets(subDatasets, nSubdatasets);