1 mike 1.11 //%/////////////////////////////////////////////////////////////////////////////
2 //
|
3 kumpf 1.33 // Copyright (c) 2000, 2001, 2002 BMC Software, Hewlett-Packard Company, IBM,
4 // The Open Group, Tivoli Systems
|
5 mike 1.11 //
6 // Permission is hereby granted, free of charge, to any person obtaining a copy
|
7 mike 1.12 // of this software and associated documentation files (the "Software"), to
8 // deal in the Software without restriction, including without limitation the
9 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
10 mike 1.11 // sell copies of the Software, and to permit persons to whom the Software is
11 // furnished to do so, subject to the following conditions:
|
12 kumpf 1.33 //
|
13 mike 1.12 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
|
14 mike 1.11 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
15 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
|
16 mike 1.12 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
17 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
18 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
19 mike 1.11 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 //
22 //==============================================================================
23 //
24 // Author: Mike Brasher (mbrasher@bmc.com)
25 //
|
26 mike 1.12 // Modified By: Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com)
|
27 karl 1.13 // Karl Schopmeyer, (k.schopmeyer@opengroup.org)
|
28 mike 1.11 //
29 //%/////////////////////////////////////////////////////////////////////////////
30
31 #include <cstring>
32 #include <cstdio>
33 #include <cctype>
34 #include "CIMValue.h"
|
35 kumpf 1.26 #include "Union.h"
|
36 mike 1.11 #include "Indentor.h"
37 #include "XmlWriter.h"
38
39 PEGASUS_NAMESPACE_BEGIN
40
41 #define PEGASUS_ARRAY_T CIMValue
42 # include "ArrayImpl.h"
43 #undef PEGASUS_ARRAY_T
44
45 ////////////////////////////////////////////////////////////////////////////////
46 //
|
47 kumpf 1.30 // _toString routines:
|
48 mike 1.11 //
49 ////////////////////////////////////////////////////////////////////////////////
50
|
51 mike 1.12 inline void _toString(Array<Sint8>& out, Boolean x)
|
52 mike 1.11 {
|
53 kumpf 1.29 XmlWriter::append(out, x);
|
54 mike 1.11 }
55
|
56 kumpf 1.29 inline void _toString(Array<Sint8>& out, Uint8 x) { XmlWriter::append(out, Uint32(x)); }
57 inline void _toString(Array<Sint8>& out, Sint8 x) { XmlWriter::append(out, Sint32(x)); }
58 inline void _toString(Array<Sint8>& out, Uint16 x) { XmlWriter::append(out, Uint32(x)); }
59 inline void _toString(Array<Sint8>& out, Sint16 x) { XmlWriter::append(out, Sint32(x)); }
60 inline void _toString(Array<Sint8>& out, Uint32 x) { XmlWriter::append(out, x); }
61 inline void _toString(Array<Sint8>& out, Sint32 x) { XmlWriter::append(out, x); }
62 inline void _toString(Array<Sint8>& out, Uint64 x) { XmlWriter::append(out, x); }
63 inline void _toString(Array<Sint8>& out, Sint64 x) { XmlWriter::append(out, x); }
64 inline void _toString(Array<Sint8>& out, Real32 x) { XmlWriter::append(out, Real64(x)); }
65 inline void _toString(Array<Sint8>& out, Real64 x) { XmlWriter::append(out, x); }
|
66 kumpf 1.22
|
67 mike 1.12 inline void _toString(Array<Sint8>& out, Char16 x)
68 {
69 // ATTN: How to convert 16-bit characters to printable form?
70 out.append(Sint8(x));
71 }
72
73 inline void _toString(Array<Sint8>& out, const String& x)
74 {
75 out << x;
76 }
|
77 mike 1.11
|
78 mike 1.12 inline void _toString(Array<Sint8>& out, const CIMDateTime& x)
|
79 mike 1.11 {
80 out << x.getString();
81 }
82
|
83 kumpf 1.31 inline void _toString(Array<Sint8>& out, const CIMObjectPath& x)
|
84 kumpf 1.15 {
85 out << x.toString();
86 }
87
|
88 mike 1.12 template<class T>
89 void _toString(Array<Sint8>& out, const T* p, Uint32 size)
90 {
91 while (size--)
92 {
|
93 kumpf 1.26 _toString(out, *p++);
94 out << " ";
|
95 mike 1.12 }
96 }
97
|
98 mike 1.11
99 ////////////////////////////////////////////////////////////////////////////////
100 //
|
101 kumpf 1.26 // CIMValueRep
|
102 mike 1.11 //
103 ////////////////////////////////////////////////////////////////////////////////
104
|
105 kumpf 1.26 class CIMValueRep
|
106 mike 1.11 {
|
107 kumpf 1.26 public:
108 CIMValueRep()
|
109 mike 1.11 {
|
110 kumpf 1.26 reset();
111 }
|
112 mike 1.11
|
113 kumpf 1.26 ~CIMValueRep()
|
114 mike 1.11 {
115 }
116
|
117 kumpf 1.26 void reset()
|
118 mike 1.11 {
|
119 kumpf 1.26 _type = CIMType::NONE;
120 _isArray = false;
121 _isNull = true;
122 _u._voidPtr = 0;
|
123 mike 1.11 }
124
|
125 kumpf 1.26 CIMType _type;
126 Boolean _isArray;
127 Boolean _isNull;
128 Union _u;
129 };
|
130 mike 1.11
|
131 kumpf 1.15
|
132 kumpf 1.26 ////////////////////////////////////////////////////////////////////////////////
133 //
134 // CIMValue
135 //
136 ////////////////////////////////////////////////////////////////////////////////
|
137 mike 1.11
|
138 kumpf 1.26 CIMValue::CIMValue()
139 {
140 _rep = new CIMValueRep();
|
141 mike 1.11 }
142
|
143 kumpf 1.26 CIMValue::CIMValue(CIMType type, Boolean isArray, Uint32 arraySize)
|
144 mike 1.11 {
|
145 kumpf 1.26 _rep = new CIMValueRep();
146 setNullValue(type, isArray, arraySize);
|
147 mike 1.11 }
148
|
149 kumpf 1.26 CIMValue::CIMValue(Boolean x)
|
150 mike 1.12 {
|
151 kumpf 1.26 _rep = new CIMValueRep();
152 set(x);
|
153 mike 1.12 }
154
|
155 kumpf 1.26 CIMValue::CIMValue(Uint8 x)
|
156 mike 1.12 {
|
157 kumpf 1.26 _rep = new CIMValueRep();
158 set(x);
|
159 mike 1.12 }
160
|
161 kumpf 1.26 CIMValue::CIMValue(Sint8 x)
|
162 mike 1.11 {
|
163 kumpf 1.26 _rep = new CIMValueRep();
164 set(x);
|
165 mike 1.11 }
166
|
167 kumpf 1.26 CIMValue::CIMValue(Uint16 x)
|
168 mike 1.11 {
|
169 kumpf 1.26 _rep = new CIMValueRep();
170 set(x);
|
171 mike 1.11 }
172
|
173 kumpf 1.26 CIMValue::CIMValue(Sint16 x)
|
174 mike 1.11 {
|
175 kumpf 1.26 _rep = new CIMValueRep();
176 set(x);
|
177 mike 1.11 }
178
|
179 kumpf 1.26 CIMValue::CIMValue(Uint32 x)
|
180 mike 1.11 {
|
181 kumpf 1.26 _rep = new CIMValueRep();
182 set(x);
|
183 mike 1.11 }
184
|
185 kumpf 1.26 CIMValue::CIMValue(Sint32 x)
|
186 mike 1.11 {
|
187 kumpf 1.26 _rep = new CIMValueRep();
188 set(x);
|
189 mike 1.11 }
190
|
191 kumpf 1.26 CIMValue::CIMValue(Uint64 x)
|
192 mike 1.11 {
|
193 kumpf 1.26 _rep = new CIMValueRep();
194 set(x);
|
195 mike 1.11 }
196
|
197 kumpf 1.26 CIMValue::CIMValue(Sint64 x)
|
198 mike 1.11 {
|
199 kumpf 1.26 _rep = new CIMValueRep();
200 set(x);
|
201 mike 1.11 }
202
|
203 kumpf 1.26 CIMValue::CIMValue(Real32 x)
|
204 mike 1.11 {
|
205 kumpf 1.26 _rep = new CIMValueRep();
206 set(x);
|
207 mike 1.11 }
208
|
209 kumpf 1.26 CIMValue::CIMValue(Real64 x)
|
210 mike 1.11 {
|
211 kumpf 1.26 _rep = new CIMValueRep();
212 set(x);
|
213 mike 1.11 }
214
|
215 kumpf 1.26 CIMValue::CIMValue(const Char16& x)
|
216 mike 1.11 {
|
217 kumpf 1.26 _rep = new CIMValueRep();
218 set(x);
|
219 mike 1.11 }
220
|
221 kumpf 1.26 CIMValue::CIMValue(const String& x)
|
222 mike 1.11 {
|
223 kumpf 1.26 _rep = new CIMValueRep();
224 set(x);
|
225 mike 1.11 }
226
|
227 kumpf 1.26 CIMValue::CIMValue(const char* x)
|
228 mike 1.11 {
|
229 kumpf 1.26 _rep = new CIMValueRep();
230 set(x);
|
231 mike 1.11 }
232
|
233 kumpf 1.26 CIMValue::CIMValue(const CIMDateTime& x)
|
234 mike 1.11 {
|
235 kumpf 1.26 _rep = new CIMValueRep();
236 set(x);
|
237 mike 1.11 }
238
|
239 kumpf 1.31 CIMValue::CIMValue(const CIMObjectPath& x)
|
240 mike 1.11 {
|
241 kumpf 1.26 _rep = new CIMValueRep();
242 set(x);
|
243 mike 1.11 }
244
|
245 kumpf 1.26 CIMValue::CIMValue(const Array<Boolean>& x)
|
246 mike 1.12 {
|
247 kumpf 1.26 _rep = new CIMValueRep();
248 set(x);
|
249 mike 1.11 }
250
|
251 kumpf 1.26 CIMValue::CIMValue(const Array<Uint8>& x)
|
252 mike 1.11 {
|
253 kumpf 1.26 _rep = new CIMValueRep();
254 set(x);
|
255 mike 1.11 }
256
|
257 kumpf 1.26 CIMValue::CIMValue(const Array<Sint8>& x)
|
258 mike 1.11 {
|
259 kumpf 1.26 _rep = new CIMValueRep();
260 set(x);
|
261 mike 1.11 }
262
|
263 kumpf 1.26 CIMValue::CIMValue(const Array<Uint16>& x)
|
264 mike 1.11 {
|
265 kumpf 1.26 _rep = new CIMValueRep();
266 set(x);
|
267 mike 1.11 }
268
|
269 kumpf 1.26 CIMValue::CIMValue(const Array<Sint16>& x)
|
270 mike 1.11 {
|
271 kumpf 1.26 _rep = new CIMValueRep();
272 set(x);
|
273 mike 1.11 }
274
|
275 kumpf 1.26 CIMValue::CIMValue(const Array<Uint32>& x)
|
276 mike 1.11 {
|
277 kumpf 1.26 _rep = new CIMValueRep();
278 set(x);
|
279 mike 1.11 }
280
|
281 kumpf 1.26 CIMValue::CIMValue(const Array<Sint32>& x)
|
282 mike 1.11 {
|
283 kumpf 1.26 _rep = new CIMValueRep();
284 set(x);
|
285 mike 1.11 }
286
|
287 kumpf 1.26 CIMValue::CIMValue(const Array<Uint64>& x)
|
288 mike 1.11 {
|
289 kumpf 1.26 _rep = new CIMValueRep();
290 set(x);
|
291 mike 1.11 }
292
|
293 kumpf 1.26 CIMValue::CIMValue(const Array<Sint64>& x)
|
294 mike 1.11 {
|
295 kumpf 1.26 _rep = new CIMValueRep();
296 set(x);
|
297 mike 1.11 }
298
|
299 kumpf 1.26 CIMValue::CIMValue(const Array<Real32>& x)
|
300 mike 1.11 {
|
301 kumpf 1.26 _rep = new CIMValueRep();
302 set(x);
|
303 mike 1.11 }
304
|
305 kumpf 1.26 CIMValue::CIMValue(const Array<Real64>& x)
|
306 mike 1.11 {
|
307 kumpf 1.26 _rep = new CIMValueRep();
308 set(x);
|
309 mike 1.11 }
310
|
311 kumpf 1.26 CIMValue::CIMValue(const Array<Char16>& x)
|
312 mike 1.11 {
|
313 kumpf 1.26 _rep = new CIMValueRep();
314 set(x);
|
315 mike 1.11 }
316
|
317 kumpf 1.26 CIMValue::CIMValue(const Array<String>& x)
|
318 mike 1.11 {
|
319 kumpf 1.26 _rep = new CIMValueRep();
320 set(x);
|
321 mike 1.11 }
322
|
323 kumpf 1.26 CIMValue::CIMValue(const Array<CIMDateTime>& x)
|
324 mike 1.11 {
|
325 kumpf 1.26 _rep = new CIMValueRep();
326 set(x);
|
327 mike 1.11 }
328
|
329 kumpf 1.31 CIMValue::CIMValue(const Array<CIMObjectPath>& x)
|
330 mike 1.11 {
|
331 kumpf 1.26 _rep = new CIMValueRep();
332 set(x);
|
333 mike 1.11 }
334
|
335 kumpf 1.26 CIMValue::CIMValue(const CIMValue& x)
|
336 mike 1.11 {
|
337 kumpf 1.26 _rep = new CIMValueRep();
338 assign(x);
|
339 mike 1.12 }
|
340 mike 1.11
|
341 kumpf 1.26 CIMValue::~CIMValue()
|
342 mike 1.11 {
343 clear();
|
344 kumpf 1.26 delete _rep;
|
345 mike 1.11 }
346
|
347 kumpf 1.26 CIMValue& CIMValue::operator=(const CIMValue& x)
|
348 kumpf 1.15 {
|
349 kumpf 1.26 assign(x);
350 return *this;
|
351 kumpf 1.15 }
352
|
353 kumpf 1.26 void CIMValue::assign(const CIMValue& x)
|
354 mike 1.11 {
|
355 kumpf 1.26 if (this == &x)
356 return;
|
357 mike 1.11
|
358 kumpf 1.26 clear();
|
359 mike 1.11
|
360 kumpf 1.26 _rep->_type = x._rep->_type;
361 _rep->_isArray = x._rep->_isArray;
362 _rep->_isNull = x._rep->_isNull;
363 _rep->_u._voidPtr = 0;
364
365 if (_rep->_isArray)
366 {
367 switch (_rep->_type)
368 {
369 case CIMType::BOOLEAN:
|
370 kumpf 1.32 _rep->_u._booleanArray =
371 new Array<Boolean>(*(x._rep->_u._booleanArray));
|
372 kumpf 1.26 break;
|
373 mike 1.11
|
374 kumpf 1.26 case CIMType::UINT8:
|
375 kumpf 1.32 _rep->_u._uint8Array =
376 new Array<Uint8>(*(x._rep->_u._uint8Array));
|
377 kumpf 1.26 break;
|
378 mike 1.11
|
379 kumpf 1.26 case CIMType::SINT8:
|
380 kumpf 1.32 _rep->_u._sint8Array =
381 new Array<Sint8>(*(x._rep->_u._sint8Array));
|
382 kumpf 1.26 break;
|
383 mike 1.11
|
384 kumpf 1.26 case CIMType::UINT16:
|
385 kumpf 1.32 _rep->_u._uint16Array =
386 new Array<Uint16>(*(x._rep->_u._uint16Array));
|
387 kumpf 1.26 break;
|
388 mike 1.11
|
389 kumpf 1.26 case CIMType::SINT16:
|
390 kumpf 1.32 _rep->_u._sint16Array =
391 new Array<Sint16>(*(x._rep->_u._sint16Array));
|
392 kumpf 1.26 break;
|
393 mike 1.11
|
394 kumpf 1.26 case CIMType::UINT32:
|
395 kumpf 1.32 _rep->_u._uint32Array =
396 new Array<Uint32>(*(x._rep->_u._uint32Array));
|
397 kumpf 1.26 break;
|
398 mike 1.11
|
399 kumpf 1.26 case CIMType::SINT32:
|
400 kumpf 1.32 _rep->_u._sint32Array =
401 new Array<Sint32>(*(x._rep->_u._sint32Array));
|
402 kumpf 1.26 break;
|
403 mike 1.11
|
404 kumpf 1.26 case CIMType::UINT64:
|
405 kumpf 1.32 _rep->_u._uint64Array =
406 new Array<Uint64>(*(x._rep->_u._uint64Array));
|
407 kumpf 1.26 break;
408
409 case CIMType::SINT64:
|
410 kumpf 1.32 _rep->_u._sint64Array =
411 new Array<Sint64>(*(x._rep->_u._sint64Array));
|
412 kumpf 1.26 break;
413
414 case CIMType::REAL32:
|
415 kumpf 1.32 _rep->_u._real32Array =
416 new Array<Real32>(*(x._rep->_u._real32Array));
|
417 kumpf 1.26 break;
418
419 case CIMType::REAL64:
|
420 kumpf 1.32 _rep->_u._real64Array =
421 new Array<Real64>(*(x._rep->_u._real64Array));
|
422 kumpf 1.26 break;
423
424 case CIMType::CHAR16:
|
425 kumpf 1.32 _rep->_u._char16Array =
426 new Array<Char16>(*(x._rep->_u._char16Array));
|
427 kumpf 1.26 break;
428
429 case CIMType::STRING:
|
430 kumpf 1.32 _rep->_u._stringArray =
431 new Array<String>(*(x._rep->_u._stringArray));
|
432 kumpf 1.26 break;
433
434 case CIMType::DATETIME:
|
435 kumpf 1.32 _rep->_u._dateTimeArray =
436 new Array<CIMDateTime>(*(x._rep->_u._dateTimeArray));
|
437 kumpf 1.26 break;
438
439 case CIMType::REFERENCE:
|
440 kumpf 1.32 _rep->_u._referenceArray =
441 new Array<CIMObjectPath>(*(x._rep->_u._referenceArray));
|
442 kumpf 1.26 break;
443 default:
444 throw CIMValueInvalidType();
445 }
446 }
447 else
448 {
449 switch (_rep->_type)
450 {
451 case CIMType::NONE:
452 break;
453
454 case CIMType::BOOLEAN:
455 _rep->_u._booleanValue = x._rep->_u._booleanValue;
456 break;
457
458 case CIMType::UINT8:
459 _rep->_u._uint8Value = x._rep->_u._uint8Value;
460 break;
461
462 case CIMType::SINT8:
463 kumpf 1.26 _rep->_u._sint8Value = x._rep->_u._sint8Value;
464 break;
465
466 case CIMType::UINT16:
467 _rep->_u._uint16Value = x._rep->_u._uint16Value;
468 break;
469
470 case CIMType::SINT16:
471 _rep->_u._sint16Value = x._rep->_u._sint16Value;
472 break;
473
474 case CIMType::UINT32:
475 _rep->_u._uint32Value = x._rep->_u._uint32Value;
476 break;
477
478 case CIMType::SINT32:
479 _rep->_u._sint32Value = x._rep->_u._sint32Value;
480 break;
481
482 case CIMType::UINT64:
483 _rep->_u._uint64Value = x._rep->_u._uint64Value;
484 kumpf 1.26 break;
485
486 case CIMType::SINT64:
487 _rep->_u._sint64Value = x._rep->_u._sint64Value;
488 break;
489
490 case CIMType::REAL32:
491 _rep->_u._real32Value = x._rep->_u._real32Value;
492 break;
493
494 case CIMType::REAL64:
495 _rep->_u._real64Value = x._rep->_u._real64Value;
496 break;
497
498 case CIMType::CHAR16:
499 _rep->_u._char16Value = x._rep->_u._char16Value;
500 break;
501
502 case CIMType::STRING:
503 _rep->_u._stringValue = new String(*(x._rep->_u._stringValue));
504 break;
505 kumpf 1.26
506 case CIMType::DATETIME:
507 _rep->_u._dateTimeValue =
508 new CIMDateTime(*(x._rep->_u._dateTimeValue));
509 break;
510
511 case CIMType::REFERENCE:
512 _rep->_u._referenceValue =
|
513 kumpf 1.31 new CIMObjectPath(*(x._rep->_u._referenceValue));
|
514 kumpf 1.26 break;
515
516 // Should never get here. testing complete enum
517 default:
518 throw CIMValueInvalidType();
519 }
520 }
521 }
522
523 //ATTN: P1 KS Problem with Compiler when I added the defaults to clear, the compiler
524 // gets an exception very early. Disabled the exceptions to keep compiler running for
525 // the minute. Note that the case statement is not complete. None missing.
526 void CIMValue::clear()
527 {
528 if (_rep->_isArray)
529 {
530 switch (_rep->_type)
531 {
532 case CIMType::BOOLEAN:
|
533 kumpf 1.32 delete _rep->_u._booleanArray;
|
534 kumpf 1.26 break;
535
536 case CIMType::UINT8:
|
537 kumpf 1.32 delete _rep->_u._uint8Array;
|
538 kumpf 1.26 break;
539
540 case CIMType::SINT8:
|
541 kumpf 1.32 delete _rep->_u._sint8Array;
|
542 kumpf 1.26 break;
543
544 case CIMType::UINT16:
|
545 kumpf 1.32 delete _rep->_u._uint16Array;
|
546 kumpf 1.26 break;
547
548 case CIMType::SINT16:
|
549 kumpf 1.32 delete _rep->_u._sint16Array;
|
550 kumpf 1.26 break;
551
552 case CIMType::UINT32:
|
553 kumpf 1.32 delete _rep->_u._uint32Array;
|
554 kumpf 1.26 break;
555
556 case CIMType::SINT32:
|
557 kumpf 1.32 delete _rep->_u._sint32Array;
|
558 kumpf 1.26 break;
559
560 case CIMType::UINT64:
|
561 kumpf 1.32 delete _rep->_u._uint64Array;
|
562 kumpf 1.26 break;
563
564 case CIMType::SINT64:
|
565 kumpf 1.32 delete _rep->_u._sint64Array;
|
566 kumpf 1.26 break;
567
568 case CIMType::REAL32:
|
569 kumpf 1.32 delete _rep->_u._real32Array;
|
570 kumpf 1.26 break;
571
572 case CIMType::REAL64:
|
573 kumpf 1.32 delete _rep->_u._real64Array;
|
574 kumpf 1.26 break;
575
576 case CIMType::CHAR16:
|
577 kumpf 1.32 delete _rep->_u._char16Array;
|
578 kumpf 1.26 break;
579
580 case CIMType::STRING:
|
581 kumpf 1.32 delete _rep->_u._stringArray;
|
582 kumpf 1.26 break;
583
584 case CIMType::DATETIME:
|
585 kumpf 1.32 delete _rep->_u._dateTimeArray;
|
586 kumpf 1.26 break;
587
588 case CIMType::REFERENCE:
|
589 kumpf 1.32 delete _rep->_u._referenceArray;
|
590 kumpf 1.26 break;
591
592 //default:
593 //throw CIMValueInvalidType();
594 }
595 }
596 else
597 {
598 switch (_rep->_type)
599 {
600 case CIMType::BOOLEAN:
601 case CIMType::UINT8:
602 case CIMType::SINT8:
603 case CIMType::UINT16:
604 case CIMType::SINT16:
605 case CIMType::UINT32:
606 case CIMType::SINT32:
607 case CIMType::UINT64:
608 case CIMType::SINT64:
609 case CIMType::REAL32:
610 case CIMType::REAL64:
611 kumpf 1.26 case CIMType::CHAR16:
612 break;
613
614 case CIMType::STRING:
615 delete _rep->_u._stringValue;
616 break;
617
618 case CIMType::DATETIME:
619 delete _rep->_u._dateTimeValue;
620 break;
621
622 case CIMType::REFERENCE:
623 delete _rep->_u._referenceValue;
624 break;
625 //default:
626 //throw CIMValueInvalidType();
627 }
628 }
629
630 _rep->reset();
631 }
632 kumpf 1.26
633 Boolean CIMValue::typeCompatible(const CIMValue& x) const
634 {
635 return _rep->_type == x._rep->_type && _rep->_isArray == x._rep->_isArray;
636 }
637
638 Boolean CIMValue::isArray() const
639 {
640 return _rep->_isArray;
641 }
642
643 Boolean CIMValue::isNull() const
644 {
645 return _rep->_isNull;
646 }
647
648 Uint32 CIMValue::getArraySize() const
649 {
650 if (!_rep->_isArray)
651 return 0;
652
653 kumpf 1.26 switch (_rep->_type)
654 {
655 case CIMType::NONE:
656 return 0;
657 break;
658
659 case CIMType::BOOLEAN:
|
660 kumpf 1.32 return _rep->_u._booleanArray->size();
|
661 kumpf 1.26 break;
662
663 case CIMType::UINT8:
|
664 kumpf 1.32 return _rep->_u._uint8Array->size();
|
665 kumpf 1.26 break;
666
667 case CIMType::SINT8:
|
668 kumpf 1.32 return _rep->_u._sint8Array->size();
|
669 kumpf 1.26 break;
670
671 case CIMType::UINT16:
|
672 kumpf 1.32 return _rep->_u._uint16Array->size();
|
673 kumpf 1.26 break;
674
675 case CIMType::SINT16:
|
676 kumpf 1.32 return _rep->_u._sint16Array->size();
|
677 kumpf 1.26 break;
678
679 case CIMType::UINT32:
|
680 kumpf 1.32 return _rep->_u._uint32Array->size();
|
681 kumpf 1.26 break;
682
683 case CIMType::SINT32:
|
684 kumpf 1.32 return _rep->_u._sint32Array->size();
|
685 kumpf 1.26 break;
686
687 case CIMType::UINT64:
|
688 kumpf 1.32 return _rep->_u._uint64Array->size();
|
689 kumpf 1.26 break;
690
691 case CIMType::SINT64:
|
692 kumpf 1.32 return _rep->_u._sint64Array->size();
|
693 kumpf 1.26 break;
694
695 case CIMType::REAL32:
|
696 kumpf 1.32 return _rep->_u._real32Array->size();
|
697 kumpf 1.26 break;
698
699 case CIMType::REAL64:
|
700 kumpf 1.32 return _rep->_u._real64Array->size();
|
701 kumpf 1.26 break;
702
703 case CIMType::CHAR16:
|
704 kumpf 1.32 return _rep->_u._char16Array->size();
|
705 kumpf 1.26 break;
706
707 case CIMType::STRING:
|
708 kumpf 1.32 return _rep->_u._stringArray->size();
|
709 kumpf 1.26 break;
710
711 case CIMType::DATETIME:
|
712 kumpf 1.32 return _rep->_u._dateTimeArray->size();
|
713 kumpf 1.26 break;
714
715 case CIMType::REFERENCE:
|
716 kumpf 1.32 return _rep->_u._referenceArray->size();
|
717 kumpf 1.26 break;
718 // Should never get here. switch on complete enum
719 default:
720 throw CIMValueInvalidType();
721 }
722
723 // Unreachable!
724 PEGASUS_ASSERT(false);
725 return 0;
726 }
727
728 CIMType CIMValue::getType() const
729 {
730 return CIMType(_rep->_type);
731 }
732
733 void CIMValue::setNullValue(CIMType type, Boolean isArray, Uint32 arraySize)
734 {
735
736 clear();
737
738 kumpf 1.26 if (isArray)
739 {
740 switch (type)
741 {
742 case CIMType::BOOLEAN:
743 set(Array<Boolean>(arraySize));
744 break;
745
746 case CIMType::UINT8:
747 set(Array<Uint8>(arraySize));
748 break;
749
750 case CIMType::SINT8:
751 set(Array<Sint8>(arraySize));
752 break;
753
754 case CIMType::UINT16:
755 set(Array<Uint16>(arraySize));
756 break;
757
758 case CIMType::SINT16:
759 kumpf 1.26 set(Array<Sint16>(arraySize));
760 break;
761
762 case CIMType::UINT32:
763 set(Array<Uint32>(arraySize));
764 break;
765
766 case CIMType::SINT32:
767 set(Array<Sint32>(arraySize));
768 break;
769
770 case CIMType::UINT64:
771 set(Array<Uint64>(arraySize));
772 break;
773
774 case CIMType::SINT64:
775 set(Array<Sint64>(arraySize));
776 break;
777
778 case CIMType::REAL32:
779 set(Array<Real32>(arraySize));
780 kumpf 1.26 break;
781
782 case CIMType::REAL64:
783 set(Array<Real64>(arraySize));
784 break;
785
786 case CIMType::CHAR16:
787 set(Array<Char16>(arraySize));
788 break;
789
790 case CIMType::STRING:
791 set(Array<String>(arraySize));
792 break;
793
794 case CIMType::DATETIME:
795 set(Array<CIMDateTime>(arraySize));
796 break;
797
798 case CIMType::REFERENCE:
|
799 kumpf 1.31 set(Array<CIMObjectPath>(arraySize));
|
800 kumpf 1.26 break;
801 default:
802 throw CIMValueInvalidType();
803 }
804 }
805 else
806 {
807 switch (type)
808 {
809 case CIMType::BOOLEAN:
810 set(false);
811 break;
812
813 case CIMType::UINT8:
814 set(Uint8(0));
815 break;
816
817 case CIMType::SINT8:
818 set(Sint8(0));
819 break;
820
821 kumpf 1.26 case CIMType::UINT16:
822 set(Uint16(0));
823 break;
824
825 case CIMType::SINT16:
826 set(Sint16(0));
827 break;
828
829 case CIMType::UINT32:
830 set(Uint32(0));
831 break;
832
833 case CIMType::SINT32:
834 set(Sint32(0));
835 break;
836
837 case CIMType::UINT64:
838 set(Uint64(0));
839 break;
840
841 case CIMType::SINT64:
842 kumpf 1.26 set(Sint64(0));
843 break;
844
845 case CIMType::REAL32:
846 set(Real32(0.0));
847 break;
848
849 case CIMType::REAL64:
850 set(Real64(0.0));
851 break;
852
853 case CIMType::CHAR16:
854 set(Char16(0));
855 break;
856
857 case CIMType::STRING:
858 set(String());
859 break;
860
861 case CIMType::DATETIME:
862 set(CIMDateTime());
863 kumpf 1.26 break;
864
865 case CIMType::REFERENCE:
|
866 kumpf 1.31 set(CIMObjectPath());
|
867 kumpf 1.26 break;
868 default:
869 throw CIMValueInvalidType();
870 }
871 }
872
873 // Set the Null attribute. Note that this must be after the set
874 // because the set functions sets the _isNull.
875
876 _rep->_isNull = true;
877 }
878
879 void CIMValue::set(Boolean x)
880 {
881 clear();
882 _rep->_u._booleanValue = (Uint8)x;
883 _rep->_type = CIMType::BOOLEAN;
884 _rep->_isNull = false;
885 }
886
887 void CIMValue::set(Uint8 x)
888 kumpf 1.26 {
889 clear();
890 _rep->_u._uint8Value = x;
891 _rep->_type = CIMType::UINT8;
892 _rep->_isNull = false;
893 }
894
895 void CIMValue::set(Sint8 x)
896 {
897 clear();
898 _rep->_u._sint8Value = x;
899 _rep->_type = CIMType::SINT8;
900 _rep->_isNull = false;
901 }
902
903 void CIMValue::set(Uint16 x)
904 {
905 clear();
906 _rep->_u._uint16Value = x;
907 _rep->_type = CIMType::UINT16;
908 _rep->_isNull = false;
909 kumpf 1.26 }
910
911 void CIMValue::set(Sint16 x)
912 {
913 clear();
914 _rep->_u._sint16Value = x;
915 _rep->_type = CIMType::SINT16;
916 _rep->_isNull = false;
917 }
918
919 void CIMValue::set(Uint32 x)
920 {
921 clear();
922 _rep->_u._uint32Value = x;
923 _rep->_type = CIMType::UINT32;
924 _rep->_isNull = false;
925 }
926
927 void CIMValue::set(Sint32 x)
928 {
929 clear();
930 kumpf 1.26 _rep->_u._sint32Value = x;
931 _rep->_type = CIMType::SINT32;
932 _rep->_isNull = false;
933 }
934
935 void CIMValue::set(Uint64 x)
936 {
937 clear();
938 _rep->_u._uint64Value = x;
939 _rep->_type = CIMType::UINT64;
940 _rep->_isNull = false;
941 }
942
943 void CIMValue::set(Sint64 x)
944 {
945 clear();
946 _rep->_u._sint64Value = x;
947 _rep->_type = CIMType::SINT64;
948 _rep->_isNull = false;
949 }
950
951 kumpf 1.26 void CIMValue::set(Real32 x)
952 {
953 clear();
954 _rep->_u._real32Value = x;
955 _rep->_type = CIMType::REAL32;
956 _rep->_isNull = false;
957 }
958
959 void CIMValue::set(Real64 x)
960 {
961 clear();
962 _rep->_u._real64Value = x;
963 _rep->_type = CIMType::REAL64;
964 _rep->_isNull = false;
965 }
966
967 void CIMValue::set(const Char16& x)
968 {
969 clear();
970 _rep->_u._char16Value = x;
971 _rep->_type = CIMType::CHAR16;
972 kumpf 1.26 _rep->_isNull = false;
973 }
974
975 void CIMValue::set(const String& x)
976 {
977 clear();
978 _rep->_u._stringValue = new String(x);
979 _rep->_type = CIMType::STRING;
980 _rep->_isNull = false;
981 }
982
983 void CIMValue::set(const char* x)
984 {
985 set(String(x));
986 _rep->_isNull = false;
987 }
988
989 void CIMValue::set(const CIMDateTime& x)
990 {
991 clear();
992 _rep->_u._dateTimeValue = new CIMDateTime(x);
993 kumpf 1.26 _rep->_type = CIMType::DATETIME;
994 _rep->_isNull = false;
995 }
996
|
997 kumpf 1.31 void CIMValue::set(const CIMObjectPath& x)
|
998 kumpf 1.26 {
999 clear();
|
1000 kumpf 1.31 _rep->_u._referenceValue = new CIMObjectPath(x);
|
1001 kumpf 1.26 _rep->_type = CIMType::REFERENCE;
1002 _rep->_isNull = false;
1003 }
1004
1005 void CIMValue::set(const Array<Boolean>& x)
1006 {
1007 clear();
|
1008 kumpf 1.32 _rep->_u._booleanArray = new Array<Boolean>(x);
|
1009 kumpf 1.26 _rep->_type = CIMType::BOOLEAN;
1010 _rep->_isArray = true;
1011 _rep->_isNull = false;
1012 }
1013
1014 void CIMValue::set(const Array<Uint8>& x)
1015 {
1016 clear();
|
1017 kumpf 1.32 _rep->_u._uint8Array = new Array<Uint8>(x);
|
1018 kumpf 1.26 _rep->_type = CIMType::UINT8;
1019 _rep->_isArray = true;
1020 _rep->_isNull = false;
1021 }
1022
1023 void CIMValue::set(const Array<Sint8>& x)
1024 {
1025 clear();
|
1026 kumpf 1.32 _rep->_u._sint8Array = new Array<Sint8>(x);
|
1027 kumpf 1.26 _rep->_type = CIMType::SINT8;
1028 _rep->_isArray = true;
1029 _rep->_isNull = false;
1030 }
1031
1032 void CIMValue::set(const Array<Uint16>& x)
1033 {
1034 clear();
|
1035 kumpf 1.32 _rep->_u._uint16Array = new Array<Uint16>(x);
|
1036 kumpf 1.26 _rep->_type = CIMType::UINT16;
1037 _rep->_isArray = true;
1038 _rep->_isNull = false;
1039 }
1040
1041 void CIMValue::set(const Array<Sint16>& x)
1042 {
1043 clear();
|
1044 kumpf 1.32 _rep->_u._sint16Array = new Array<Sint16>(x);
|
1045 kumpf 1.26 _rep->_type = CIMType::SINT16;
1046 _rep->_isArray = true;
1047 _rep->_isNull = false;
1048 }
1049
1050 void CIMValue::set(const Array<Uint32>& x)
1051 {
1052 clear();
|
1053 kumpf 1.32 _rep->_u._uint32Array = new Array<Uint32>(x);
|
1054 kumpf 1.26 _rep->_type = CIMType::UINT32;
1055 _rep->_isArray = true;
1056 _rep->_isNull = false;
1057 }
1058
1059 void CIMValue::set(const Array<Sint32>& x)
1060 {
1061 clear();
|
1062 kumpf 1.32 _rep->_u._sint32Array = new Array<Sint32>(x);
|
1063 kumpf 1.26 _rep->_type = CIMType::SINT32;
1064 _rep->_isArray = true;
1065 _rep->_isNull = false;
1066 }
1067
1068 void CIMValue::set(const Array<Uint64>& x)
1069 {
1070 clear();
|
1071 kumpf 1.32 _rep->_u._uint64Array = new Array<Uint64>(x);
|
1072 kumpf 1.26 _rep->_type = CIMType::UINT64;
1073 _rep->_isArray = true;
1074 _rep->_isNull = false;
1075 }
1076
1077 void CIMValue::set(const Array<Sint64>& x)
1078 {
1079 clear();
|
1080 kumpf 1.32 _rep->_u._sint64Array = new Array<Sint64>(x);
|
1081 kumpf 1.26 _rep->_type = CIMType::SINT64;
1082 _rep->_isArray = true;
1083 _rep->_isNull = false;
1084 }
1085
1086 void CIMValue::set(const Array<Real32>& x)
1087 {
1088 clear();
|
1089 kumpf 1.32 _rep->_u._real32Array = new Array<Real32>(x);
|
1090 kumpf 1.26 _rep->_type = CIMType::REAL32;
1091 _rep->_isArray = true;
1092 _rep->_isNull = false;
1093 }
1094
1095 void CIMValue::set(const Array<Real64>& x)
1096 {
1097 clear();
|
1098 kumpf 1.32 _rep->_u._real64Array = new Array<Real64>(x);
|
1099 kumpf 1.26 _rep->_type = CIMType::REAL64;
1100 _rep->_isArray = true;
1101 _rep->_isNull = false;
1102 }
1103
1104 void CIMValue::set(const Array<Char16>& x)
1105 {
1106 clear();
|
1107 kumpf 1.32 _rep->_u._char16Array = new Array<Char16>(x);
|
1108 kumpf 1.26 _rep->_type = CIMType::CHAR16;
1109 _rep->_isArray = true;
1110 _rep->_isNull = false;
1111 }
1112
1113 void CIMValue::set(const Array<String>& x)
1114 {
1115 clear();
|
1116 kumpf 1.32 _rep->_u._stringArray = new Array<String>(x);
|
1117 kumpf 1.26 _rep->_type = CIMType::STRING;
1118 _rep->_isArray = true;
1119 _rep->_isNull = false;
1120 }
1121
1122 void CIMValue::set(const Array<CIMDateTime>& x)
1123 {
1124 clear();
|
1125 kumpf 1.32 _rep->_u._dateTimeArray = new Array<CIMDateTime>(x);
|
1126 kumpf 1.26 _rep->_type = CIMType::DATETIME;
1127 _rep->_isArray = true;
1128 _rep->_isNull = false;
1129 }
1130
|
1131 kumpf 1.31 void CIMValue::set(const Array<CIMObjectPath>& x)
|
1132 kumpf 1.26 {
1133 clear();
|
1134 kumpf 1.32 _rep->_u._referenceArray = new Array<CIMObjectPath>(x);
|
1135 kumpf 1.26 _rep->_type = CIMType::REFERENCE;
1136 _rep->_isArray = true;
1137 _rep->_isNull = false;
1138 }
1139
1140 void CIMValue::get(Boolean& x) const
1141 {
1142 if (_rep->_type != CIMType::BOOLEAN || _rep->_isArray)
1143 throw TypeMismatch();
1144
1145 x = _rep->_u._booleanValue != 0;
1146 }
1147
1148 void CIMValue::get(Uint8& x) const
1149 {
1150 if (_rep->_type != CIMType::UINT8 || _rep->_isArray)
1151 throw TypeMismatch();
1152
1153 x = _rep->_u._uint8Value;
1154 }
1155
1156 kumpf 1.26 void CIMValue::get(Sint8& x) const
1157 {
1158 if (_rep->_type != CIMType::SINT8 || _rep->_isArray)
1159 throw TypeMismatch();
1160
1161 x = _rep->_u._sint8Value;
1162 }
1163
1164 void CIMValue::get(Uint16& x) const
1165 {
1166 if (_rep->_type != CIMType::UINT16 || _rep->_isArray)
1167 throw TypeMismatch();
1168
1169 x = _rep->_u._uint16Value;
1170 }
1171
1172 void CIMValue::get(Sint16& x) const
1173 {
1174 if (_rep->_type != CIMType::SINT16 || _rep->_isArray)
1175 throw TypeMismatch();
1176
1177 kumpf 1.26 x = _rep->_u._sint16Value;
1178 }
|
1179 mike 1.11
1180 void CIMValue::get(Uint32& x) const
1181 {
|
1182 kumpf 1.26 if (_rep->_type != CIMType::UINT32 || _rep->_isArray)
1183 throw TypeMismatch();
|
1184 mike 1.11
|
1185 kumpf 1.26 x = _rep->_u._uint32Value;
|
1186 mike 1.11 }
1187
1188 void CIMValue::get(Sint32& x) const
1189 {
|
1190 kumpf 1.26 if (_rep->_type != CIMType::SINT32 || _rep->_isArray)
1191 throw TypeMismatch();
|
1192 mike 1.11
|
1193 kumpf 1.26 x = _rep->_u._sint32Value;
|
1194 mike 1.11 }
1195
1196 void CIMValue::get(Uint64& x) const
1197 {
|
1198 kumpf 1.26 if (_rep->_type != CIMType::UINT64 || _rep->_isArray)
1199 throw TypeMismatch();
|
1200 mike 1.11
|
1201 kumpf 1.26 x = _rep->_u._uint64Value;
|
1202 mike 1.11 }
1203
1204 void CIMValue::get(Sint64& x) const
1205 {
|
1206 kumpf 1.26 if (_rep->_type != CIMType::SINT64 || _rep->_isArray)
1207 throw TypeMismatch();
|
1208 mike 1.11
|
1209 kumpf 1.26 x = _rep->_u._sint64Value;
|
1210 mike 1.11 }
1211
1212 void CIMValue::get(Real32& x) const
1213 {
|
1214 kumpf 1.26 if (_rep->_type != CIMType::REAL32 || _rep->_isArray)
1215 throw TypeMismatch();
|
1216 mike 1.11
|
1217 kumpf 1.26 x = _rep->_u._real32Value;
|
1218 mike 1.11 }
1219
1220 void CIMValue::get(Real64& x) const
1221 {
|
1222 kumpf 1.26 if (_rep->_type != CIMType::REAL64 || _rep->_isArray)
1223 throw TypeMismatch();
|
1224 mike 1.11
|
1225 kumpf 1.26 x = _rep->_u._real64Value;
|
1226 mike 1.11 }
1227
1228 void CIMValue::get(Char16& x) const
1229 {
|
1230 kumpf 1.26 if (_rep->_type != CIMType::CHAR16 || _rep->_isArray)
1231 throw TypeMismatch();
|
1232 mike 1.11
|
1233 kumpf 1.26 x = _rep->_u._char16Value;
|
1234 mike 1.11 }
1235
1236 void CIMValue::get(String& x) const
1237 {
|
1238 kumpf 1.26 if (_rep->_type != CIMType::STRING || _rep->_isArray)
1239 throw TypeMismatch();
|
1240 mike 1.11
|
1241 kumpf 1.26 x = *_rep->_u._stringValue;
|
1242 mike 1.11 }
1243
1244 void CIMValue::get(CIMDateTime& x) const
1245 {
|
1246 kumpf 1.26 if (_rep->_type != CIMType::DATETIME || _rep->_isArray)
1247 throw TypeMismatch();
|
1248 mike 1.11
|
1249 kumpf 1.26 x = *_rep->_u._dateTimeValue;
|
1250 mike 1.11 }
1251
|
1252 kumpf 1.31 void CIMValue::get(CIMObjectPath& x) const
|
1253 mike 1.11 {
|
1254 kumpf 1.26 if (_rep->_type != CIMType::REFERENCE || _rep->_isArray)
1255 throw TypeMismatch();
|
1256 mike 1.11
|
1257 kumpf 1.26 x = *_rep->_u._referenceValue;
|
1258 mike 1.11 }
1259
1260 void CIMValue::get(Array<Boolean>& x) const
1261 {
|
1262 kumpf 1.26 if (_rep->_type != CIMType::BOOLEAN || !_rep->_isArray)
1263 throw TypeMismatch();
|
1264 mike 1.11
|
1265 kumpf 1.32 x = *_rep->_u._booleanArray;
|
1266 mike 1.11 }
1267
1268 void CIMValue::get(Array<Uint8>& x) const
1269 {
|
1270 kumpf 1.26 if (_rep->_type != CIMType::UINT8 || !_rep->_isArray)
1271 throw TypeMismatch();
|
1272 mike 1.11
|
1273 kumpf 1.32 x = *_rep->_u._uint8Array;
|
1274 mike 1.11 }
1275
1276 void CIMValue::get(Array<Sint8>& x) const
1277 {
|
1278 kumpf 1.26 if (_rep->_type != CIMType::SINT8 || !_rep->_isArray)
1279 throw TypeMismatch();
|
1280 mike 1.11
|
1281 kumpf 1.32 x = *_rep->_u._sint8Array;
|
1282 mike 1.11 }
1283
1284 void CIMValue::get(Array<Uint16>& x) const
1285 {
|
1286 kumpf 1.26 if (_rep->_type != CIMType::UINT16 || !_rep->_isArray)
1287 throw TypeMismatch();
|
1288 mike 1.11
|
1289 kumpf 1.32 x = *_rep->_u._uint16Array;
|
1290 mike 1.11 }
1291
1292 void CIMValue::get(Array<Sint16>& x) const
1293 {
|
1294 kumpf 1.26 if (_rep->_type != CIMType::SINT16 || !_rep->_isArray)
1295 throw TypeMismatch();
|
1296 mike 1.11
|
1297 kumpf 1.32 x = *_rep->_u._sint16Array;
|
1298 mike 1.11 }
1299
1300 void CIMValue::get(Array<Uint32>& x) const
1301 {
|
1302 kumpf 1.26 if (_rep->_type != CIMType::UINT32 || !_rep->_isArray)
1303 throw TypeMismatch();
|
1304 mike 1.11
|
1305 kumpf 1.32 x = *_rep->_u._uint32Array;
|
1306 mike 1.11 }
1307
1308 void CIMValue::get(Array<Sint32>& x) const
1309 {
|
1310 kumpf 1.26 if (_rep->_type != CIMType::SINT32 || !_rep->_isArray)
1311 throw TypeMismatch();
|
1312 mike 1.11
|
1313 kumpf 1.32 x = *_rep->_u._sint32Array;
|
1314 mike 1.11 }
1315
1316 void CIMValue::get(Array<Uint64>& x) const
1317 {
|
1318 kumpf 1.26 if (_rep->_type != CIMType::UINT64 || !_rep->_isArray)
1319 throw TypeMismatch();
|
1320 mike 1.11
|
1321 kumpf 1.32 x = *_rep->_u._uint64Array;
|
1322 mike 1.11 }
1323
1324 void CIMValue::get(Array<Sint64>& x) const
1325 {
|
1326 kumpf 1.26 if (_rep->_type != CIMType::SINT64 || !_rep->_isArray)
1327 throw TypeMismatch();
|
1328 mike 1.11
|
1329 kumpf 1.32 x = *_rep->_u._sint64Array;
|
1330 mike 1.11 }
1331
1332 void CIMValue::get(Array<Real32>& x) const
1333 {
|
1334 kumpf 1.26 if (_rep->_type != CIMType::REAL32 || !_rep->_isArray)
1335 throw TypeMismatch();
|
1336 mike 1.11
|
1337 kumpf 1.32 x = *_rep->_u._real32Array;
|
1338 mike 1.11 }
1339
1340 void CIMValue::get(Array<Real64>& x) const
1341 {
|
1342 kumpf 1.26 if (_rep->_type != CIMType::REAL64 || !_rep->_isArray)
1343 throw TypeMismatch();
|
1344 mike 1.11
|
1345 kumpf 1.32 x = *_rep->_u._real64Array;
|
1346 mike 1.11 }
1347
1348 void CIMValue::get(Array<Char16>& x) const
1349 {
|
1350 kumpf 1.26 if (_rep->_type != CIMType::CHAR16 || !_rep->_isArray)
1351 throw TypeMismatch();
|
1352 mike 1.11
|
1353 kumpf 1.32 x = *_rep->_u._char16Array;
|
1354 mike 1.11 }
1355
1356 void CIMValue::get(Array<String>& x) const
1357 {
|
1358 kumpf 1.26 if (_rep->_type != CIMType::STRING || !_rep->_isArray)
1359 throw TypeMismatch();
|
1360 mike 1.11
|
1361 kumpf 1.32 x = *_rep->_u._stringArray;
|
1362 mike 1.11 }
1363
1364 void CIMValue::get(Array<CIMDateTime>& x) const
1365 {
|
1366 karl 1.13 #ifdef CIMValueisNullexception
|
1367 kumpf 1.26 if (_rep->_isNull)
|
1368 karl 1.13 throw CIMValueIsNull();
1369 #endif
1370
|
1371 kumpf 1.26 if (_rep->_type != CIMType::DATETIME || !_rep->_isArray)
1372 throw TypeMismatch();
|
1373 mike 1.11
|
1374 kumpf 1.32 x = *_rep->_u._dateTimeArray;
|
1375 mike 1.11 }
1376
|
1377 kumpf 1.31 void CIMValue::get(Array<CIMObjectPath>& x) const
|
1378 kumpf 1.15 {
|
1379 kumpf 1.26 if (_rep->_type != CIMType::REFERENCE || !_rep->_isArray)
1380 throw TypeMismatch();
|
1381 kumpf 1.15
|
1382 kumpf 1.32 x = *_rep->_u._referenceArray;
|
1383 kumpf 1.15 }
1384
|
1385 kumpf 1.28 CIMValue CIMValue::clone() const
1386 {
1387 return CIMValue(*this);
|
1388 mike 1.11 }
1389
1390 String CIMValue::toString() const
1391 {
1392 Array<Sint8> out;
1393
|
1394 karl 1.13 //ATTN: Not sure what we should do with getstring for Null CIMValues
1395 //Choice return empty string or exception out.
|
1396 kumpf 1.26 if (_rep->_isNull)
|
1397 kumpf 1.18 return String();
|
1398 karl 1.13
|
1399 kumpf 1.26 if (_rep->_isArray)
|
1400 mike 1.11 {
|
1401 kumpf 1.26 switch (_rep->_type)
1402 {
1403 case CIMType::BOOLEAN:
1404 {
|
1405 kumpf 1.32 Uint32 size = _rep->_u._booleanArray->size();
|
1406 kumpf 1.26 for (Uint32 i = 0; i < size; i++)
1407 {
|
1408 kumpf 1.32 _toString(out, Boolean(_rep->_u._booleanArray->getData()[i]));
|
1409 kumpf 1.26 out << " ";
1410 }
1411 break;
1412 }
1413
1414 case CIMType::UINT8:
|
1415 kumpf 1.32 _toString(out, _rep->_u._uint8Array->getData(),
1416 _rep->_u._uint8Array->size());
|
1417 kumpf 1.26 break;
1418
1419 case CIMType::SINT8:
|
1420 kumpf 1.32 _toString(out, _rep->_u._sint8Array->getData(),
1421 _rep->_u._sint8Array->size());
|
1422 kumpf 1.26 break;
1423
1424 case CIMType::UINT16:
|
1425 kumpf 1.32 _toString(out, _rep->_u._uint16Array->getData(),
1426 _rep->_u._uint16Array->size());
|
1427 kumpf 1.26 break;
1428
1429 case CIMType::SINT16:
|
1430 kumpf 1.32 _toString(out, _rep->_u._sint16Array->getData(),
1431 _rep->_u._sint16Array->size());
|
1432 kumpf 1.26 break;
1433
1434 case CIMType::UINT32:
|
1435 kumpf 1.32 _toString(out, _rep->_u._uint32Array->getData(),
1436 _rep->_u._uint32Array->size());
|
1437 kumpf 1.26 break;
1438
1439 case CIMType::SINT32:
|
1440 kumpf 1.32 _toString(out, _rep->_u._sint32Array->getData(),
1441 _rep->_u._sint32Array->size());
|
1442 kumpf 1.26 break;
1443
1444 case CIMType::UINT64:
|
1445 kumpf 1.32 _toString(out, _rep->_u._uint64Array->getData(),
1446 _rep->_u._uint64Array->size());
|
1447 kumpf 1.26 break;
1448
1449 case CIMType::SINT64:
|
1450 kumpf 1.32 _toString(out, _rep->_u._sint64Array->getData(),
1451 _rep->_u._sint64Array->size());
|
1452 kumpf 1.26 break;
1453
1454 case CIMType::REAL32:
|
1455 kumpf 1.32 _toString(out, _rep->_u._real32Array->getData(),
1456 _rep->_u._real32Array->size());
|
1457 kumpf 1.26 break;
1458
1459 case CIMType::REAL64:
|
1460 kumpf 1.32 _toString(out, _rep->_u._real64Array->getData(),
1461 _rep->_u._real64Array->size());
|
1462 kumpf 1.26 break;
1463
1464 case CIMType::CHAR16:
|
1465 kumpf 1.32 _toString(out, _rep->_u._char16Array->getData(),
1466 _rep->_u._char16Array->size());
|
1467 kumpf 1.26 break;
1468
1469 case CIMType::STRING:
|
1470 kumpf 1.32 _toString(out, _rep->_u._stringArray->getData(),
1471 _rep->_u._stringArray->size());
|
1472 kumpf 1.26 break;
1473
1474 case CIMType::DATETIME:
|
1475 kumpf 1.32 _toString(out, _rep->_u._dateTimeArray->getData(),
1476 _rep->_u._dateTimeArray->size());
|
1477 kumpf 1.26 break;
1478
1479 case CIMType::REFERENCE:
|
1480 kumpf 1.32 _toString(out, _rep->_u._referenceArray->getData(),
1481 _rep->_u._referenceArray->size());
|
1482 kumpf 1.26 break;
|
1483 kumpf 1.15
|
1484 karl 1.13 default:
1485 throw CIMValueInvalidType();
|
1486 kumpf 1.26 }
|
1487 mike 1.11 }
1488 else
1489 {
|
1490 kumpf 1.26 switch (_rep->_type)
1491 {
1492 case CIMType::BOOLEAN:
1493 _toString(out, Boolean(_rep->_u._booleanValue != 0));
1494 break;
1495
1496 case CIMType::UINT8:
1497 _toString(out, _rep->_u._uint8Value);
1498 break;
1499
1500 case CIMType::SINT8:
1501 _toString(out, _rep->_u._sint8Value);
1502 break;
1503
1504 case CIMType::UINT16:
1505 _toString(out, _rep->_u._uint16Value);
1506 break;
1507
1508 case CIMType::SINT16:
1509 _toString(out, _rep->_u._sint16Value);
1510 break;
1511 kumpf 1.26
1512 case CIMType::UINT32:
1513 _toString(out, _rep->_u._uint32Value);
1514 break;
1515
1516 case CIMType::SINT32:
1517 _toString(out, _rep->_u._sint32Value);
1518 break;
1519
1520 case CIMType::UINT64:
1521 _toString(out, _rep->_u._uint64Value);
1522 break;
1523
1524 case CIMType::SINT64:
1525 _toString(out, _rep->_u._sint64Value);
1526 break;
1527
1528 case CIMType::REAL32:
1529 _toString(out, _rep->_u._real32Value);
1530 break;
1531
1532 kumpf 1.26 case CIMType::REAL64:
1533 _toString(out, _rep->_u._real64Value);
1534 break;
1535
1536 case CIMType::CHAR16:
1537 _toString(out, Char16(_rep->_u._char16Value));
1538 break;
1539
1540 case CIMType::STRING:
1541 _toString(out, *_rep->_u._stringValue);
1542 break;
1543
1544 case CIMType::DATETIME:
1545 _toString(out, *_rep->_u._dateTimeValue);
1546 break;
1547
1548 case CIMType::REFERENCE:
1549 _toString(out, *_rep->_u._referenceValue);
1550 break;
|
1551 kumpf 1.15
|
1552 karl 1.13 default:
1553 throw CIMValueInvalidType();
|
1554 kumpf 1.26 }
|
1555 mike 1.11 }
1556
1557 out.append('\0');
1558 return out.getData();
|
1559 kumpf 1.26 }
1560
1561
1562 Boolean operator==(const CIMValue& x, const CIMValue& y)
1563 {
1564 if (!x.typeCompatible(y))
1565 return false;
1566
1567 if (x._rep->_isNull != y._rep->_isNull)
1568 return false;
1569
1570 if (x._rep->_isArray)
1571 {
1572 switch (x._rep->_type)
1573 {
1574 case CIMType::BOOLEAN:
|
1575 kumpf 1.32 return (*x._rep->_u._booleanArray) ==
1576 (*y._rep->_u._booleanArray);
|
1577 kumpf 1.26
1578 case CIMType::UINT8:
|
1579 kumpf 1.32 return (*x._rep->_u._uint8Array) ==
1580 (*y._rep->_u._uint8Array);
|
1581 kumpf 1.26
1582 case CIMType::SINT8:
|
1583 kumpf 1.32 return (*x._rep->_u._sint8Array) ==
1584 (*y._rep->_u._sint8Array);
|
1585 kumpf 1.26
1586 case CIMType::UINT16:
|
1587 kumpf 1.32 return (*x._rep->_u._uint16Array) ==
1588 (*y._rep->_u._uint16Array);
|
1589 kumpf 1.26
1590 case CIMType::SINT16:
|
1591 kumpf 1.32 return (*x._rep->_u._sint16Array) ==
1592 (*y._rep->_u._sint16Array);
|
1593 kumpf 1.26
1594 case CIMType::UINT32:
|
1595 kumpf 1.32 return (*x._rep->_u._uint32Array) ==
1596 (*y._rep->_u._uint32Array);
|
1597 kumpf 1.26
1598 case CIMType::SINT32:
|
1599 kumpf 1.32 return (*x._rep->_u._sint32Array) ==
1600 (*y._rep->_u._sint32Array);
|
1601 kumpf 1.26
1602 case CIMType::UINT64:
|
1603 kumpf 1.32 return (*x._rep->_u._uint64Array) ==
1604 (*y._rep->_u._uint64Array);
|
1605 kumpf 1.26
1606 case CIMType::SINT64:
|
1607 kumpf 1.32 return (*x._rep->_u._sint64Array) ==
1608 (*y._rep->_u._sint64Array);
|
1609 kumpf 1.26
1610 case CIMType::REAL32:
|
1611 kumpf 1.32 return (*x._rep->_u._real32Array) ==
1612 (*y._rep->_u._real32Array);
|
1613 kumpf 1.26
1614 case CIMType::REAL64:
|
1615 kumpf 1.32 return (*x._rep->_u._real64Array) ==
1616 (*y._rep->_u._real64Array);
|
1617 kumpf 1.26
1618 case CIMType::CHAR16:
|
1619 kumpf 1.32 return (*x._rep->_u._char16Array) ==
1620 (*y._rep->_u._char16Array);
|
1621 kumpf 1.26
1622 case CIMType::STRING:
|
1623 kumpf 1.32 return (*x._rep->_u._stringArray) ==
1624 (*y._rep->_u._stringArray);
|
1625 kumpf 1.26
1626 case CIMType::DATETIME:
|
1627 kumpf 1.32 return (*x._rep->_u._dateTimeArray) ==
1628 (*y._rep->_u._dateTimeArray);
|
1629 kumpf 1.26
1630 case CIMType::REFERENCE:
|
1631 kumpf 1.32 return (*x._rep->_u._referenceArray) ==
1632 (*y._rep->_u._referenceArray);
|
1633 kumpf 1.26 default:
1634 throw CIMValueInvalidType();
1635 }
1636 }
1637 else
1638 {
1639 switch (x._rep->_type)
1640 {
1641 case CIMType::BOOLEAN:
1642 return x._rep->_u._booleanValue == y._rep->_u._booleanValue;
1643
1644 case CIMType::UINT8:
1645 return x._rep->_u._uint8Value == y._rep->_u._uint8Value;
1646
1647 case CIMType::SINT8:
1648 return x._rep->_u._sint8Value == y._rep->_u._sint8Value;
1649
1650 case CIMType::UINT16:
1651 return x._rep->_u._uint16Value == y._rep->_u._uint16Value;
1652
1653 case CIMType::SINT16:
1654 kumpf 1.26 return x._rep->_u._sint16Value == y._rep->_u._sint16Value;
1655
1656 case CIMType::UINT32:
1657 return x._rep->_u._uint32Value == y._rep->_u._uint32Value;
1658
1659 case CIMType::SINT32:
1660 return x._rep->_u._sint32Value == y._rep->_u._sint32Value;
1661
1662 case CIMType::UINT64:
1663 return x._rep->_u._uint64Value == y._rep->_u._uint64Value;
1664
1665 case CIMType::SINT64:
1666 return x._rep->_u._sint64Value == y._rep->_u._sint64Value;
1667
1668 case CIMType::REAL32:
1669 return x._rep->_u._real32Value == y._rep->_u._real32Value;
1670
1671 case CIMType::REAL64:
1672 return x._rep->_u._real64Value == y._rep->_u._real64Value;
1673
1674 case CIMType::CHAR16:
1675 kumpf 1.26 return x._rep->_u._char16Value == y._rep->_u._char16Value;
1676
1677 case CIMType::STRING:
1678 return String::equal(*x._rep->_u._stringValue,
1679 *y._rep->_u._stringValue);
1680
1681 case CIMType::DATETIME:
1682 return *x._rep->_u._dateTimeValue == *y._rep->_u._dateTimeValue;
1683
1684 case CIMType::REFERENCE:
1685 return *x._rep->_u._referenceValue ==
1686 *y._rep->_u._referenceValue;
1687
1688 default:
1689 throw CIMValueInvalidType();
1690 }
1691 }
1692
1693 // Unreachable!
1694 return false;
1695 }
1696 kumpf 1.26
1697 Boolean operator!=(const CIMValue& x, const CIMValue& y)
1698 {
1699 return !operator==(x, y);
|
1700 mike 1.11 }
1701
1702 PEGASUS_NAMESPACE_END
|