1 // ==========================================================
2 // fipTag class implementation
3 //
4 // Design and implementation by
5 // - Herv� Drolon (drolon@infonie.fr)
6 //
7 // This file is part of FreeImage 3
8 //
9 // COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY
10 // OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
11 // THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE
12 // OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED
13 // CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT
14 // THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY
15 // SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL
16 // PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER
17 // THIS DISCLAIMER.
18 //
19 // Use at your own risk!
20 // ==========================================================
21 
22 #include <string.h>
23 #include "FreeImagePlus.h"
24 
fipTag()25 fipTag::fipTag() {
26 	_tag = FreeImage_CreateTag();
27 }
28 
~fipTag()29 fipTag::~fipTag() {
30 	FreeImage_DeleteTag(_tag);
31 }
32 
setKeyValue(const char * key,const char * value)33 BOOL fipTag::setKeyValue(const char *key, const char *value) {
34 	if(_tag) {
35 		FreeImage_DeleteTag(_tag);
36 		_tag = NULL;
37 	}
38 	// create a tag
39 	_tag = FreeImage_CreateTag();
40 	if(_tag) {
41 		BOOL bSuccess = TRUE;
42 		// fill the tag
43 		DWORD tag_length = (DWORD)(strlen(value) + 1);
44 		bSuccess &= FreeImage_SetTagKey(_tag, key);
45 		bSuccess &= FreeImage_SetTagLength(_tag, tag_length);
46 		bSuccess &= FreeImage_SetTagCount(_tag, tag_length);
47 		bSuccess &= FreeImage_SetTagType(_tag, FIDT_ASCII);
48 		bSuccess &= FreeImage_SetTagValue(_tag, value);
49 		return bSuccess;
50 	}
51 	return FALSE;
52 }
53 
fipTag(const fipTag & tag)54 fipTag::fipTag(const fipTag& tag) {
55 	_tag = FreeImage_CloneTag(tag._tag);
56 }
57 
operator =(const fipTag & tag)58 fipTag& fipTag::operator=(const fipTag& tag) {
59 	if(this != &tag) {
60 		if(_tag) FreeImage_DeleteTag(_tag);
61 		_tag = FreeImage_CloneTag(tag._tag);
62 	}
63 	return *this;
64 }
65 
operator =(FITAG * tag)66 fipTag& fipTag::operator=(FITAG *tag) {
67 	if(_tag) FreeImage_DeleteTag(_tag);
68 	_tag = tag;
69 	return *this;
70 }
71 
isValid() const72 BOOL fipTag::isValid() const {
73 	return (_tag != NULL) ? TRUE : FALSE;
74 }
75 
getKey() const76 const char* fipTag::getKey() const {
77 	return FreeImage_GetTagKey(_tag);
78 }
79 
getDescription() const80 const char* fipTag::getDescription() const {
81 	return FreeImage_GetTagDescription(_tag);
82 }
83 
getID() const84 WORD fipTag::getID() const {
85 	return FreeImage_GetTagID(_tag);
86 }
87 
getType() const88 FREE_IMAGE_MDTYPE fipTag::getType() const {
89 	return FreeImage_GetTagType(_tag);
90 }
91 
getCount() const92 DWORD fipTag::getCount() const {
93 	return FreeImage_GetTagCount(_tag);
94 }
95 
getLength() const96 DWORD fipTag::getLength() const {
97 	return FreeImage_GetTagLength(_tag);
98 }
99 
getValue() const100 const void* fipTag::getValue() const {
101 	return FreeImage_GetTagValue(_tag);
102 }
103 
setKey(const char * key)104 BOOL fipTag::setKey(const char *key) {
105 	return FreeImage_SetTagKey(_tag, key);
106 }
107 
setDescription(const char * description)108 BOOL fipTag::setDescription(const char *description) {
109 	return FreeImage_SetTagDescription(_tag, description);
110 }
111 
setID(WORD id)112 BOOL fipTag::setID(WORD id) {
113 	return FreeImage_SetTagID(_tag, id);
114 }
115 
setType(FREE_IMAGE_MDTYPE type)116 BOOL fipTag::setType(FREE_IMAGE_MDTYPE type) {
117 	return FreeImage_SetTagType(_tag, type);
118 }
119 
setCount(DWORD count)120 BOOL fipTag::setCount(DWORD count) {
121 	return FreeImage_SetTagCount(_tag, count);
122 }
123 
setLength(DWORD length)124 BOOL fipTag::setLength(DWORD length) {
125 	return FreeImage_SetTagLength(_tag, length);
126 }
127 
setValue(const void * value)128 BOOL fipTag::setValue(const void *value) {
129 	return FreeImage_SetTagValue(_tag, value);
130 }
131 
toString(FREE_IMAGE_MDMODEL model,char * Make) const132 const char* fipTag::toString(FREE_IMAGE_MDMODEL model, char *Make) const {
133 	return FreeImage_TagToString(model, _tag, Make);
134 }
135