blob: 7b8f95d2ca479113581b3f4294cb469ec10b884b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
// =================================================================================================
// Copyright Adobe
// Copyright 2010 Adobe
// All Rights Reserved
//
// NOTICE: Adobe permits you to use, modify, and distribute this file in accordance with the terms
// of the Adobe license agreement accompanying it.
// =================================================================================================
#ifndef _MetadataSet_h_
#define _MetadataSet_h_
#include "public/include/XMP_Environment.h" // ! This must be the first include.
#include "public/include/XMP_Const.h"
#include <vector>
/**
The class MetadataSet acts as a container for any metadata that base on
the interface IMeta.
*/
class IMetadata;
class MetadataSet
{
public:
/**
ctor/dtor
*/
MetadataSet ();
~MetadataSet ();
/**
Append metadata container
@param meta Metadata container
*/
void append ( IMetadata* meta );
/**
Remove metadata container at passed position
@param pos Position inside the vector of metadata
*/
void removeAt ( XMP_Uns32 pos );
/**
Remove the last metadata container inside the vector
*/
void remove ();
/**
Return the number of stored metadata container
@return length of vector
*/
XMP_Uns32 length () const;
/**
Return metadata container of passed position.
@param pos Position inside of the vector of metadata
*/
IMetadata* getAt ( XMP_Uns32 pos ) const;
/**
Return metadata container of passed type
@return stored metadata container of type T
*/
template<class T> T* get () const;
private:
std::vector<IMetadata*>* mMeta;
typedef std::vector<IMetadata*>::iterator MetaIterator;
}; // MetadataSet
template<class T> T* MetadataSet::get() const
{
T* ret = NULL;
if( mMeta != NULL )
{
for( MetaIterator iter = mMeta->begin(); iter != mMeta->end(); iter++ )
{
T* tmp = dynamic_cast<T*>( *iter );
if( tmp != NULL )
{
ret = tmp;
break;
}
}
}
return ret;
}
#endif
|