Mako 8.2.0 API
MakoCore SDK API Documentation
Loading...
Searching...
No Matches
edlproperty.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2007-2025 Global Graphics Software Ltd. All rights reserved.
3 */
4
12
13#ifndef EDLPROPERTY_H
14#define EDLPROPERTY_H
15
16#include <edl/edlqname.h>
17#include <edl/edltypes.h>
18#include <edl/edltime.h>
19#include <edl/iedlobject.h>
20#include <edl/edlstring.h>
21#include <edl/edlerrors.h>
22
24
29
30class PValue
31{
32public:
33 PValue () { zero(); };
34 PValue(int32 i, const int variant = 0) {zero(); m_type = T_INT; m_variant = variant; m_simpleValue.integer = i;}
35 PValue(uint32 ui, const int variant = 0) {zero(); m_type = T_INT; m_variant = variant; m_simpleValue.integer = ui;}
36 PValue(const EDLString &s, const int variant = 0) {zero(); setString(s, variant);}
37 PValue(const EDLSysString &s, const int variant = 0) {zero(); setString(EDLSysStringToEDLString(s), variant);}
38 explicit PValue(const wchar_t *s, const int variant = 0) {zero(); setString(s, variant);}
39 explicit PValue(const char *s, const int variant = 0) {zero(); setString(s, variant);}
40 PValue(const CEDLStringVect &v, const int variant = 0) {zero(); setStringVector(v, variant);}
41 PValue(const CEDLSysStringVect &v, const int variant = 0) {zero(); setSysStringVector(v, variant);}
42 PValue(void *p, const int variant = 0) {zero(); m_type = T_POINTER; m_variant = variant; m_simpleValue.pointer = p;}
43 PValue(const IEDLTimePtr &ptrTime, const int variant = 0) {zero(); m_type = T_TIME; m_variant = variant; m_timePtr = ptrTime;}
44 PValue(const EDLQName &qn, const int variant = 0) {zero(); setName(qn, variant);}
45 PValue(const IRCObjectPtr &object, const int variant = 0) {zero(); m_type = T_OBJECT; m_variant = variant; m_rcObjectPtr = object;}
46 PValue(double d, const int variant = 0) {zero(); m_type = T_DECIMAL; m_variant = variant; m_simpleValue.decimalVal = d;}
47 PValue(bool b, const int variant = 0) {zero(); m_type = T_BOOL; m_variant = variant; m_simpleValue.boolean = b;}
48 PValue(const PValue &another)
49 {
50 zero();
51 assign(another);
52 }
53
55 {
56 clean();
57 }
58
76
77 enum PValueType getType() const
78 {
79 return m_type;
80 }
81
82 int getVariant() const
83 {
84 return m_variant;
85 }
86
87 const PValue & operator =(const PValue &another)
88 {
89 assign(another);
90 return *this;
91 }
92
93 bool isEmpty () const
94 {
95 return (T_UNASSIGNED == m_type);
96 }
97
99 {
100 return (m_type == T_STRING && m_simpleValue.stringVal) ? *m_simpleValue.stringVal : EDLString();
101 }
102
104 {
105 return (m_type == T_STRING && m_simpleValue.stringVal) ? EDL::EDLStringToEDLSysString (*m_simpleValue.stringVal) : EDLSysString();
106 }
107
109 {
110 return (m_type == T_STRINGVECT && m_simpleValue.stringVect) ? *m_simpleValue.stringVect : CEDLStringVect();
111 }
112
114 {
115 CEDLStringVect edlStrVect = getStringVect ();
116 CEDLSysStringVect edlSysStrVect;
117
118 edlSysStrVect.resize (edlStrVect.size ());
119 for (uint32 i = 0; i < edlStrVect.size (); i++)
120 {
121 edlSysStrVect [i] = EDLStringToEDLSysString (edlStrVect [i]);
122 }
123 return edlSysStrVect;
124 }
125
126 bool getBool() const
127 {
128 return (m_type == T_BOOL) ? m_simpleValue.boolean : false;
129 }
131 {
132 return (m_type == T_INT) ? m_simpleValue.integer : 0;
133 }
134 double getDecimal() const
135 {
136 return (m_type == T_DECIMAL) ? m_simpleValue.decimalVal : 0.0;
137 }
138 void * getPointer() const
139 {
140 return (m_type == T_POINTER) ? m_simpleValue.pointer : NULL;
141 }
142 IEDLTimePtr getTime() const
143 {
144 return (m_type == T_TIME) ? m_timePtr : IEDLTimePtr(NULL);
145 }
147 {
148 return (m_type == T_QNAME && m_simpleValue.qname) ? *m_simpleValue.qname : EDLQName();
149 }
150 IEDLObjectPtr getObject() const
151 {
152 return IEDLObjectPtr(dynamic_cast<IEDLObject *>((IRCObject *) getRCObject()), true);
153 }
154 IRCObjectPtr getRCObject() const
155 {
156 return (m_type == T_OBJECT) ? m_rcObjectPtr : IRCObjectPtr(NULL);
157 }
158
159 bool operator ==(const PValue &another)
160 {
161 if (this == &another)
162 return true;
163
164 if (m_type != another.m_type)
165 return false;
166
167 switch(m_type)
168 {
169 case T_UNASSIGNED:
170 return true;
171 case T_BOOL:
172 return (getBool() == another.getBool());
173 case T_INT:
174 return (getInt32() == another.getInt32());
175 case T_DECIMAL:
176 return (getDecimal() == another.getDecimal());
177 case T_STRING:
178 return (getString() == another.getString());
179 case T_STRINGVECT:
180 if (m_simpleValue.stringVect && another.m_simpleValue.stringVect)
181 {
182 uint32 n = m_simpleValue.stringVect->size();
183
184 if (n != another.m_simpleValue.stringVect->size())
185 return false;
186
187 for (uint32 j = 0; j < n; j++)
188 {
189 if ((*m_simpleValue.stringVect)[j] != (*another.m_simpleValue.stringVect)[j])
190 return false;
191 }
192 return true;
193 }
194 return false;
195 case T_POINTER:
196 return (getPointer() == another.getPointer());
197 case T_QNAME:
198 return (getQName() == another.getQName());
199 case T_OBJECT:
200 return (getObject() == another.getObject());
201 case T_TIME:
202 return (getTime() == another.getTime());
203 default:
204 break;
205 }
206 return false;
207 }
208
209 bool operator !=(const PValue &another)
210 {
211 return !operator ==(another);
212 }
213
214private:
215 void zero()
216 {
217 m_type = T_UNASSIGNED;
218 m_variant = 0;
219 memset(&m_simpleValue, 0, sizeof(m_simpleValue));
220 m_rcObjectPtr = NULL;
221 }
222
223 void clean()
224 {
225 switch (m_type)
226 {
227 case T_STRING:
228 if (m_simpleValue.stringVal)
229 {
230 delete m_simpleValue.stringVal;
231 }
232 break;
233 case T_QNAME:
234 if (m_simpleValue.qname)
235 {
236 delete m_simpleValue.qname;
237 }
238 break;
239 case T_STRINGVECT:
240 if (m_simpleValue.stringVect)
241 {
242 m_simpleValue.stringVect->clear ();
243 delete m_simpleValue.stringVect;
244 }
245 break;
246 default:
247 break;
248 }
249
250 zero();
251 }
252
253 void assign(const PValue &another)
254 {
255 if (this != &another)
256 {
257 clean();
258
259 m_variant = another.m_variant;
260 m_type = another.m_type;
261 switch(m_type)
262 {
263 case T_BOOL:
264 case T_INT:
265 case T_DECIMAL:
266 case T_POINTER:
267 memcpy(&m_simpleValue, &another.m_simpleValue, sizeof(m_simpleValue));
268 break;
269
270 case T_STRING:
271 if (!another.m_simpleValue.stringVal)
272 {
274 }
275 setString(*another.m_simpleValue.stringVal, another.m_variant);
276 break;
277
278 case T_STRINGVECT:
279 if (!another.m_simpleValue.stringVect)
280 {
282 }
283 setStringVector (*another.m_simpleValue.stringVect, another.m_variant);
284 break;
285
286 case T_QNAME:
287 if (!another.m_simpleValue.qname)
288 {
290 }
291 setName(*another.m_simpleValue.qname);
292 break;
293 case T_OBJECT:
294 m_rcObjectPtr = another.m_rcObjectPtr;
295 break;
296 case T_TIME:
297 m_timePtr = another.m_timePtr;
298 break;
299 default:
300 break;
301 }
302 }
303 }
304
305 void setString(const EDLString &stringVal, const int variant = 0)
306 {
307 clean();
308 m_type = T_STRING;
309 m_variant = variant;
310 m_simpleValue.stringVal = new EDLString();
311 *m_simpleValue.stringVal = stringVal;
312 }
313
314 void setString(const wchar_t *s, const int variant = 0)
315 {
317 setString (stringVal, variant);
318 }
319
320 void setString(const char *s, const int variant = 0)
321 {
322 EDLSysString sysStr (s);
324 setString (stringVal, variant);
325 }
326
327 void setStringVector(const CEDLStringVect &stringVect, const int variant = 0)
328 {
329 clean();
330 m_type = T_STRINGVECT;
331 m_variant = variant;
332 m_simpleValue.stringVect = new CEDLStringVect ();
333 m_simpleValue.stringVect->resize (stringVect.size());
334 for (uint32 j = 0; j < stringVect.size(); j++)
335 (*m_simpleValue.stringVect)[j] = stringVect[j];
336 }
337
338 void setSysStringVector(const CEDLSysStringVect &sysStringVect, const int variant = 0)
339 {
340 clean();
341 m_type = T_STRINGVECT;
342 m_variant = variant;
343 m_simpleValue.stringVect = new CEDLStringVect ();
344 m_simpleValue.stringVect->resize (sysStringVect.size());
345 for (uint32 j = 0; j < sysStringVect.size(); j++)
346 (*m_simpleValue.stringVect)[j] = EDLSysStringToEDLString (sysStringVect[j]);
347 }
348
349 void setName(const EDLQName &name, const int variant = 0)
350 {
351 clean();
352 m_type = T_QNAME;
353 m_variant = variant;
354 m_simpleValue.qname = new EDLQName();
355 *m_simpleValue.qname = name;
356 }
357
358private:
359 enum PValueType m_type;
360
361 union
362 {
366 void *pointer;
370 } m_simpleValue;
371
372 IEDLTimePtr m_timePtr;
373 IRCObjectPtr m_rcObjectPtr;
374 int m_variant;
375};
376
378
379#endif /* EDLPROPERTY_H */
uint32_t size() const
Definition edlvector.h:106
void resize(uint32_t newSize)
Definition edlvector.h:187
Implementation of qualified name class.
Definition edlqname.h:89
IEDLObject is an abstract base class that is used by all classes that are intended to be created via ...
Definition iedlobject.h:53
Base class Interface for all Reference Counted objects.
Definition ircobject.h:35
CEDLSysStringVect getSysStringVect() const
Definition edlproperty.h:113
void * getPointer() const
Definition edlproperty.h:138
PValue(double d, const int variant=0)
Definition edlproperty.h:46
EDLString getString() const
Definition edlproperty.h:98
double decimalVal
Definition edlproperty.h:365
PValue(const PValue &another)
Definition edlproperty.h:48
bool boolean
Definition edlproperty.h:363
PValue(const char *s, const int variant=0)
Definition edlproperty.h:39
PValue(const wchar_t *s, const int variant=0)
Definition edlproperty.h:38
PValue(uint32 ui, const int variant=0)
Definition edlproperty.h:35
CEDLStringVect * stringVect
Definition edlproperty.h:368
double getDecimal() const
Definition edlproperty.h:134
int getVariant() const
Definition edlproperty.h:82
PValue(const CEDLStringVect &v, const int variant=0)
Definition edlproperty.h:40
enum PValueType getType() const
Definition edlproperty.h:77
IEDLObjectPtr getObject() const
Definition edlproperty.h:150
IRCObjectPtr getRCObject() const
Definition edlproperty.h:154
PValue(void *p, const int variant=0)
Definition edlproperty.h:42
PValue(const IEDLTimePtr &ptrTime, const int variant=0)
Definition edlproperty.h:43
CEDLStringVect getStringVect() const
Definition edlproperty.h:108
PValue()
Definition edlproperty.h:33
PValueType
Value types for metadata entries.
Definition edlproperty.h:64
@ T_TIME
Time value.
Definition edlproperty.h:71
@ T_STRINGVECT
Multiple strings.
Definition edlproperty.h:74
@ T_STRING
String.
Definition edlproperty.h:69
@ T_POINTER
Pointer type.
Definition edlproperty.h:70
@ T_DECIMAL
Floating point.
Definition edlproperty.h:68
@ T_QNAME
Qualified name.
Definition edlproperty.h:72
@ T_UNASSIGNED
Unassigned.
Definition edlproperty.h:65
@ T_INT
Integer.
Definition edlproperty.h:67
@ T_OBJECT
Object.
Definition edlproperty.h:73
@ T_BOOL
Boolean.
Definition edlproperty.h:66
EDLSysString getSysString() const
Definition edlproperty.h:103
EDLQName getQName() const
Definition edlproperty.h:146
int32 integer
Definition edlproperty.h:364
bool isEmpty() const
Definition edlproperty.h:93
PValue(const EDLSysString &s, const int variant=0)
Definition edlproperty.h:37
EDLQName * qname
Definition edlproperty.h:369
PValue(const EDLString &s, const int variant=0)
Definition edlproperty.h:36
PValue(bool b, const int variant=0)
Definition edlproperty.h:47
bool getBool() const
Definition edlproperty.h:126
int32 getInt32() const
Definition edlproperty.h:130
void * pointer
Definition edlproperty.h:366
EDLString * stringVal
Definition edlproperty.h:367
PValue(const EDLQName &qn, const int variant=0)
Definition edlproperty.h:44
IEDLTimePtr getTime() const
Definition edlproperty.h:142
~PValue()
Definition edlproperty.h:54
PValue(const CEDLSysStringVect &v, const int variant=0)
Definition edlproperty.h:41
const PValue & operator=(const PValue &another)
Definition edlproperty.h:87
bool operator==(const PValue &another)
Definition edlproperty.h:159
PValue(int32 i, const int variant=0)
Definition edlproperty.h:34
bool operator!=(const PValue &another)
Definition edlproperty.h:209
PValue(const IRCObjectPtr &object, const int variant=0)
Definition edlproperty.h:45
EDL_API void throwEDLError(uint32 errorcode)
Utility - Throw an IEDLError exception with the given error code.
#define _BEGIN_EDL_NAMESPACE
Definition edlnamespaces.h:75
#define _END_EDL_NAMESPACE
Definition edlnamespaces.h:76
IEDLNamespace and EDLQName classes.
EDLString and EDLSysString classes and associated EDL string manipulation functions.
std::string EDLSysString
Definition edlstring.h:158
std::wstring EDLString
Definition edlstring.h:165
EDL_API EDLSysString EDLStringToEDLSysString(const EDLString &edlString)
EDLStringToEDLSysString converts an (UTF16 or UTF32 depending on platform) EDLString to an EDLSysStri...
EDL_API EDLString EDLSysStringToEDLString(const EDLSysString &edlSysString)
EDLSysStringToEDLString converts an EDLSysString (UTF8) to an EDLString (UTF16 or UTF32 depending on ...
CEDLVector< EDLString > CEDLStringVect
Definition edlstring.h:173
CEDLVector< EDLSysString > CEDLSysStringVect
Definition edlstring.h:174
IEDLTime class that represents the EDL date-time.
EDL "standard" types including known bit-length signed and unsigned integer type[def]s and definition...
unsigned int uint32
Definition edltypes.h:34
signed int int32
Definition edltypes.h:29
@ EDL_ERR_UNDEFINED
Undefined error.
Definition edlerrors.h:28