Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Name: gdal_majorobject.h 4 : * Project: GDAL Core 5 : * Purpose: Declaration of GDALMajorObject 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 GDALMAJOROBJECT_H_INCLUDED 16 : #define GDALMAJOROBJECT_H_INCLUDED 17 : 18 : #include "cpl_port.h" 19 : #include "cpl_string.h" 20 : 21 : #include "gdal_fwd.h" // for GDALMajorObjectH 22 : #include "gdal_multidomainmetadata.h" 23 : 24 : //! @cond Doxygen_Suppress 25 : #define GMO_VALID 0x0001 26 : #define GMO_IGNORE_UNIMPLEMENTED 0x0002 27 : #define GMO_SUPPORT_MD 0x0004 28 : #define GMO_SUPPORT_MDMD 0x0008 29 : #define GMO_MD_DIRTY 0x0010 30 : #define GMO_PAM_CLASS 0x0020 31 : 32 : //! @endcond 33 : 34 : /* ******************************************************************** */ 35 : /* GDALMajorObject */ 36 : /* */ 37 : /* Base class providing metadata, description and other */ 38 : /* services shared by major objects. */ 39 : /* ******************************************************************** */ 40 : 41 : /** Object with metadata. */ 42 : class CPL_DLL GDALMajorObject 43 : { 44 : protected: 45 : //! @cond Doxygen_Suppress 46 : int nFlags; // GMO_* flags. 47 : CPLString sDescription{}; 48 : GDALMultiDomainMetadata oMDMD{}; 49 : 50 : //! @endcond 51 : 52 : char **BuildMetadataDomainList(char **papszList, int bCheckNonEmpty, 53 : ...) CPL_NULL_TERMINATED; 54 : 55 : /** Copy constructor */ 56 : GDALMajorObject(const GDALMajorObject &) = default; 57 : 58 : /** Copy assignment operator */ 59 : GDALMajorObject &operator=(const GDALMajorObject &) = default; 60 : 61 : /** Move constructor */ 62 : GDALMajorObject(GDALMajorObject &&) = default; 63 : 64 : /** Move assignment operator */ 65 : GDALMajorObject &operator=(GDALMajorObject &&) = default; 66 : 67 : public: 68 : GDALMajorObject(); 69 : virtual ~GDALMajorObject(); 70 : 71 : int GetMOFlags() const; 72 : void SetMOFlags(int nFlagsIn); 73 : 74 : virtual const char *GetDescription() const; 75 : virtual void SetDescription(const char *); 76 : 77 : virtual char **GetMetadataDomainList(); 78 : 79 : virtual char **GetMetadata(const char *pszDomain = ""); 80 : virtual CPLErr SetMetadata(char **papszMetadata, 81 : const char *pszDomain = ""); 82 : virtual const char *GetMetadataItem(const char *pszName, 83 : const char *pszDomain = ""); 84 : virtual CPLErr SetMetadataItem(const char *pszName, const char *pszValue, 85 : const char *pszDomain = ""); 86 : 87 : /** Convert a GDALMajorObject* to a GDALMajorObjectH. 88 : * @since GDAL 2.3 89 : */ 90 261 : static inline GDALMajorObjectH ToHandle(GDALMajorObject *poMajorObject) 91 : { 92 261 : return static_cast<GDALMajorObjectH>(poMajorObject); 93 : } 94 : 95 : /** Convert a GDALMajorObjectH to a GDALMajorObject*. 96 : * @since GDAL 2.3 97 : */ 98 308474 : static inline GDALMajorObject *FromHandle(GDALMajorObjectH hMajorObject) 99 : { 100 308474 : return static_cast<GDALMajorObject *>(hMajorObject); 101 : } 102 : }; 103 : 104 : #endif