summaryrefslogtreecommitdiff
path: root/XMPFiles/source/NativeMetadataSupport/MetadataSet.h
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