Exiv2
tags.hpp
Go to the documentation of this file.
1// ***************************************************************** -*- C++ -*-
2/*
3 * Copyright (C) 2004-2018 Exiv2 authors
4 * This program is part of the Exiv2 distribution.
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 USA.
19 */
28#ifndef TAGS_HPP_
29#define TAGS_HPP_
30
31// *****************************************************************************
32#include "exiv2lib_export.h"
33
34// included header files
35#include "metadatum.hpp"
36
37// + standard includes
38#include <string>
39#include <iosfwd>
40#include <memory>
41
42// *****************************************************************************
43// namespace extensions
44namespace Exiv2 {
45
46// *****************************************************************************
47// class declarations
48 class ExifData;
49 class ExifKey;
50 class Value;
51 struct TagInfo;
52
53// *****************************************************************************
54// type definitions
55
57 typedef std::ostream& (*PrintFct)(std::ostream&, const Value&, const ExifData* pExifData);
59 typedef const TagInfo* (*TagListFct)();
60
61// *****************************************************************************
62// class definitions
63
65 struct EXIV2API GroupInfo {
66 struct GroupName;
67 bool operator==(int ifdId) const;
68 bool operator==(const GroupName& groupName) const;
69 int ifdId_;
70 const char* ifdName_;
71 const char* groupName_;
73 };
74
76 struct EXIV2API GroupInfo::GroupName {
77 explicit GroupName(const std::string& groupName);
79 };
80
82 struct EXIV2API TagInfo {
84 TagInfo(
85 uint16_t tag,
86 const char* name,
87 const char* title,
88 const char* desc,
89 int ifdId,
90 int sectionId,
91 TypeId typeId,
92 int16_t count,
93 PrintFct printFct
94 );
95 uint16_t tag_;
96 const char* name_;
97 const char* title_;
98 const char* desc_;
99 int ifdId_;
102 int16_t count_;
104 }; // struct TagInfo
105
107 class EXIV2API ExifTags {
109 ExifTags();
111 ExifTags(const ExifTags& rhs);
113 ExifTags& operator=(const ExifTags& rhs);
114
115 public:
117 static const GroupInfo* groupList();
119 static const TagInfo* tagList(const std::string& groupName);
121 static void taglist(std::ostream& os);
123 static void taglist(std::ostream& os, const std::string& groupName);
124
126 static const char* sectionName(const ExifKey& key);
128 static uint16_t defaultCount(const ExifKey& key);
130 static const char* ifdName(const std::string& groupName);
131
135 static bool isMakerGroup(const std::string& groupName);
141 static bool isExifGroup(const std::string& groupName);
142
143 }; // class ExifTags
144
148 class EXIV2API ExifKey : public Key {
149 public:
151 typedef std::auto_ptr<ExifKey> AutoPtr;
152
154
155
163 explicit ExifKey(const std::string& key);
173 ExifKey(uint16_t tag, const std::string& groupName);
180 explicit ExifKey(const TagInfo& ti);
181
183 ExifKey(const ExifKey& rhs);
185 virtual ~ExifKey();
187
189
190
193 ExifKey& operator=(const ExifKey& rhs);
195 void setIdx(int idx);
197
199
200 virtual std::string key() const;
201 virtual const char* familyName() const;
202 virtual std::string groupName() const;
204 int ifdId() const;
205 virtual std::string tagName() const;
206 virtual uint16_t tag() const;
207 virtual std::string tagLabel() const;
209 std::string tagDesc() const; // Todo: should be in the base class
211 TypeId defaultTypeId() const; // Todo: should be in the base class
212
213 AutoPtr clone() const;
215 int idx() const;
217
218 private:
220 virtual ExifKey* clone_() const;
221
222 private:
223 // Pimpl idiom
224 struct Impl;
225 std::auto_ptr<Impl> p_;
226
227 }; // class ExifKey
228
229// *****************************************************************************
230// free functions
231
233 EXIV2API std::ostream& operator<<(std::ostream& os, const TagInfo& ti);
234
235} // namespace Exiv2
236
237#endif // #ifndef TAGS_HPP_
A container for Exif data. This is a top-level class of the Exiv2 library. The container holds Exifda...
Definition: exif.hpp:434
Concrete keys for Exif metadata and access to Exif tag reference data.
Definition: tags.hpp:148
std::auto_ptr< ExifKey > AutoPtr
Shortcut for an ExifKey auto pointer.
Definition: tags.hpp:151
Access to Exif group and tag lists and misc. tag reference methods, implemented as a static class.
Definition: tags.hpp:107
Abstract base class defining the Key of a metadatum. Keys are used to identify and group metadata.
Definition: metadatum.hpp:55
std::auto_ptr< Key > AutoPtr
Shortcut for a Key auto pointer.
Definition: metadatum.hpp:58
Common interface for all types of values used with metadata.
Definition: value.hpp:60
Provides abstract base classes Metadatum and Key.
const char * groupName(IfdId ifdId)
Return the group name for a group id.
Definition: tags_int.cpp:2155
void taglist(std::ostream &os, IfdId ifdId)
Print the list of tags for ifdId to the output stream os.
Definition: tags_int.cpp:2098
const TagInfo * tagList(IfdId ifdId)
Return the tag list for ifdId.
Definition: tags_int.cpp:2108
const char * ifdName(IfdId ifdId)
Return the name of the IFD.
Definition: tags_int.cpp:2148
bool operator==(const TagDetails &td, const LensTypeAndFocalLengthAndMaxAperture &ltfl)
Compare tag details with a lens entry.
Definition: canonmn_int.cpp:1809
Provides classes and functions to encode and decode Exif and Iptc data. The libexiv2 API consists of ...
Definition: asfvideo.hpp:36
EXIV2API std::ostream & operator<<(std::ostream &os, const DataSet &dataSet)
Output operator for dataSet.
Definition: datasets.cpp:709
const TagInfo *(* TagListFct)()
A function returning a tag list.
Definition: tags.hpp:59
TypeId
Exiv2 value type identifiers.
Definition: types.hpp:130
@ string
IPTC string type.
Definition: types.hpp:147
std::ostream &(* PrintFct)(std::ostream &, const Value &, const ExifData *pExifData)
Type for a function pointer for functions interpreting the tag value.
Definition: tags.hpp:57
Internal Pimpl structure with private members and data of class ExifKey.
Definition: tags.cpp:218
The details of an Exif group. Groups include IFDs and binary arrays.
Definition: tags.hpp:65
int ifdId_
IFD id.
Definition: tags.hpp:69
std::string g_
Group name.
Definition: tags.hpp:78
TagListFct tagList_
Tag list.
Definition: tags.hpp:72
const char * ifdName_
IFD name.
Definition: tags.hpp:70
const char * groupName_
Group name, unique for each group.
Definition: tags.hpp:71
Tag information.
Definition: tags.hpp:82
uint16_t tag_
Tag.
Definition: tags.hpp:95
int sectionId_
Section id.
Definition: tags.hpp:100
int16_t count_
The number of values (not bytes!), 0=any, -1=count not known.
Definition: tags.hpp:102
TypeId typeId_
Type id.
Definition: tags.hpp:101
int ifdId_
Link to the (preferred) IFD.
Definition: tags.hpp:99
const char * desc_
Short tag description.
Definition: tags.hpp:98
const char * title_
Tag title.
Definition: tags.hpp:97
PrintFct printFct_
Pointer to tag print function.
Definition: tags.hpp:103
const char * name_
One word tag label.
Definition: tags.hpp:96