Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Name: gdal_multidomainmetadata.h 4 : * Project: GDAL Core 5 : * Purpose: Declaration of GDALMultiDomainMetadata class 6 : * Author: Frank Warmerdam, warmerdam@pobox.com 7 : * 8 : ****************************************************************************** 9 : * Copyright (c) 1998, Frank Warmerdam 10 : * Copyright (c) 2007-2014, Even Rouault <even dot rouault at spatialys.com> 11 : * 12 : * SPDX-License-Identifier: MIT 13 : ****************************************************************************/ 14 : 15 : #ifndef GDALMULTIDOMAINMETADATA_H_INCLUDED 16 : #define GDALMULTIDOMAINMETADATA_H_INCLUDED 17 : 18 : #include "cpl_port.h" 19 : #include "cpl_string.h" 20 : 21 : #include <map> 22 : 23 : /*! @cond Doxygen_Suppress */ 24 : typedef struct CPLXMLNode CPLXMLNode; 25 : 26 : /*! @endcond */ 27 : 28 : /************************************************************************/ 29 : /* GDALMultiDomainMetadata */ 30 : /************************************************************************/ 31 : 32 : //! @cond Doxygen_Suppress 33 6954418 : class CPL_DLL GDALMultiDomainMetadata 34 : { 35 : private: 36 : CPLStringList aosDomainList{}; 37 : 38 : struct Comparator 39 : { 40 34518200 : bool operator()(const char *a, const char *b) const 41 : { 42 34518200 : return STRCASECMP(a, b) < 0; 43 : } 44 : }; 45 : 46 : std::map<const char *, CPLStringList, Comparator> oMetadata{}; 47 : 48 : public: 49 : GDALMultiDomainMetadata(); 50 : 51 : /** Copy constructor */ 52 : GDALMultiDomainMetadata(const GDALMultiDomainMetadata &) = default; 53 : 54 : /** Copy assignment operator */ 55 : GDALMultiDomainMetadata & 56 : operator=(const GDALMultiDomainMetadata &) = default; 57 : 58 : /** Move constructor */ 59 : GDALMultiDomainMetadata(GDALMultiDomainMetadata &&) = default; 60 : 61 : /** Move assignment operator */ 62 : GDALMultiDomainMetadata &operator=(GDALMultiDomainMetadata &&) = default; 63 : 64 : ~GDALMultiDomainMetadata(); 65 : 66 : int XMLInit(const CPLXMLNode *psMetadata, int bMerge); 67 : CPLXMLNode *Serialize() const; 68 : 69 712632 : CSLConstList GetDomainList() const 70 : { 71 712632 : return aosDomainList.List(); 72 : } 73 : 74 : char **GetMetadata(const char *pszDomain = ""); 75 : CPLErr SetMetadata(CSLConstList papszMetadata, const char *pszDomain = ""); 76 : const char *GetMetadataItem(const char *pszName, 77 : const char *pszDomain = ""); 78 : CPLErr SetMetadataItem(const char *pszName, const char *pszValue, 79 : const char *pszDomain = ""); 80 : 81 : void Clear(); 82 : 83 : inline void clear() 84 : { 85 : Clear(); 86 : } 87 : }; 88 : 89 : //! @endcond 90 : 91 : #endif