1 martin 1.6 //%LICENSE////////////////////////////////////////////////////////////////
|
2 martin 1.7 //
|
3 martin 1.6 // Licensed to The Open Group (TOG) under one or more contributor license
4 // agreements. Refer to the OpenPegasusNOTICE.txt file distributed with
5 // this work for additional information regarding copyright ownership.
6 // Each contributor licenses this file to you under the OpenPegasus Open
7 // Source License; you may not use this file except in compliance with the
8 // License.
|
9 martin 1.7 //
|
10 martin 1.6 // Permission is hereby granted, free of charge, to any person obtaining a
11 // copy of this software and associated documentation files (the "Software"),
12 // to deal in the Software without restriction, including without limitation
13 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
14 // and/or sell copies of the Software, and to permit persons to whom the
15 // Software is furnished to do so, subject to the following conditions:
|
16 martin 1.7 //
|
17 martin 1.6 // The above copyright notice and this permission notice shall be included
18 // in all copies or substantial portions of the Software.
|
19 martin 1.7 //
|
20 martin 1.6 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
21 martin 1.7 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
22 martin 1.6 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
23 // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
24 // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
25 // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
26 // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
27 martin 1.7 //
|
28 martin 1.6 //////////////////////////////////////////////////////////////////////////
|
29 mike 1.1 #include <stdlib.h>
30 #include "Sharable.h"
31 #include "CIMBuffer.h"
32 #include "CIMPropertyRep.h"
33 #include "CIMInstanceRep.h"
34 #include "CIMClassRep.h"
35 #include "CIMQualifierRep.h"
|
36 mike 1.5 #include "CIMQualifierDeclRep.h"
|
37 mike 1.1 #include "CIMParameterRep.h"
38 #include "CIMMethodRep.h"
39 #include "CIMPropertyList.h"
40 #include "CIMParamValueRep.h"
41 #include "CIMKeyBindingRep.h"
42 #include "CIMObjectPathRep.h"
43 #include "CIMPropertyListRep.h"
44 #include "StringRep.h"
|
45 mike 1.2 #include "CIMValueRep.h"
|
46 mike 1.5 #include "StringRep.h"
47 #include "StringInline.h"
48 #include "Buffer.h"
|
49 thilo.boehm 1.9 #include "SCMOStreamer.h"
|
50 dl.meetei 1.14 #include "Pegasus_inl.h"
|
51 mike 1.1
52 #define INSTANCE_MAGIC 0xD6EF2219
53 #define CLASS_MAGIC 0xA8D7DE41
54 #define OBJECT_MAGIC 0xA8D7DE41
55 #define OBJECT_PATH_MAGIC 0x92320710
56 #define PROPERTY_MAGIC 0xBFEAA215
57 #define VALUE_MAGIC 0xE83E360A
58 #define PRESENT_MAGIC 0xF55A7330
59 #define ABSENT_MAGIC 0x77A0A639
60
|
61 mike 1.5 #define FLAG_IS_NULL (1 << 0)
62 #define FLAG_IS_ARRAY (1 << 1)
63 #define FLAG_IS_PROPAGATED (1 << 2)
64 #define FLAG_HAS_CLASS_ORIGIN (1 << 3)
65 #define FLAG_HAS_REFERENCE_CLASS (1 << 4)
66 #define FLAG_HAS_QUALIFIERS (1 << 5)
67
|
68 mike 1.1 PEGASUS_USING_STD;
69
70 PEGASUS_NAMESPACE_BEGIN
71
|
72 mike 1.5 static bool _validString(const Uint16* p, size_t n)
73 {
74 const Uint16* start = p;
75
76 while (n >= 8 && ((p[0]|p[1]|p[2]|p[3]|p[4]|p[5]|p[6]|p[7]) & 0xFF80) == 0)
77 {
78 p += 8;
79 n -= 8;
80 }
81
82 while (n >= 4 && ((p[0]|p[1]|p[2]|p[3]) & 0xFF80) == 0)
83 {
84 p += 4;
85 n -= 4;
86 }
87
88 while (n)
89 {
90 Uint16 c = *p;
91
92 if (c >= 128)
93 mike 1.5 {
94 if (c == 0xFFFE || c == 0xFFFF || (c >= 0xFDD0 && c <= 0xFDEF))
95 return false;
96
97 if (c >= 0xD800 && c <= 0xDBFF)
98 {
99 if (n == 1 || !(p[1] >= 0xDC00 && p[1] <= 0xDFFF))
100 return false;
101 }
102
103 if (c >= 0xDC00 && c <= 0xDFFF)
104 {
105 if (p == start || !(p[-1] >= 0xD800 && p[-1] <= 0xDBFF))
106 return false;
107 }
108 }
109
110 n--;
111 p++;
112 }
113
114 mike 1.5 return true;
115 }
116
117 static inline bool _validName(const String& str)
118 {
119 if (str.size() == 0)
120 return true;
121
122 return CIMName::legal(str);
123 }
124
125 static inline bool _validNamespaceName(const String& str)
126 {
127 if (str.size() == 0)
128 return true;
129
130 return CIMNamespaceName::legal(str);
131 }
132
133 void CIMBuffer::_create(size_t size)
|
134 mike 1.1 {
135 if (size < 1024)
136 size = 1024;
137
|
138 mike 1.3 #if defined(PEGASUS_TEST_VALGRIND)
139 // Valgrind complains that we leave uninitialized bytes in this buffer so
140 _data = (char*)calloc(1, size);
141 #else
|
142 mike 1.1 _data = (char*)malloc(size);
|
143 mike 1.3 #endif
|
144 mike 1.1
|
145 mike 1.5 #if defined(PEGASUS_DEBUG)
146 memset(_data, 0xAA, size);
147 #endif
148
|
149 mike 1.1 if (!_data)
150 {
151 throw PEGASUS_STD(bad_alloc)();
152 }
153
154 _end = _data + size;
155 _ptr = _data;
156 }
157
|
158 mike 1.5 CIMBuffer::CIMBuffer(size_t size) : _swap(0), _validate(0)
159 {
160 _create(size);
161 }
162
163 CIMBuffer::CIMBuffer() : _data(0), _end(0), _ptr(0), _swap(0), _validate(0)
164 {
165 }
166
|
167 mike 1.1 CIMBuffer::~CIMBuffer()
168 {
169 free(_data);
170 }
171
172 void CIMBuffer::_grow(size_t size)
173 {
174 size_t n = _end - _data;
175 size_t m = _ptr - _data;
176 size_t cap = n * 2;
177
|
178 mike 1.5 if (cap <= 4096)
179 cap = 4096;
180
|
181 mike 1.1 // Double the size of the buffer (n * 2). If size is greater than n, then
182 // we will need yet more space so we increment cap by size.
183
184 if (size > n)
185 cap += size;
186
|
187 dl.meetei 1.15 _data = (char*)peg_inln_realloc(_data, cap);
|
188 mike 1.1
189 _end = _data + cap;
190 _ptr = _data + m;
|
191 mike 1.5
192 #if defined(PEGASUS_DEBUG)
193 memset(_ptr, 0xAA, _end - _ptr);
194 #elif defined(PEGASUS_TEST_VALGRIND)
|
195 mike 1.3 // Valgrind complains that we leave uninitialized bytes in this buffer so
196 // we clear all newly allocated memory when testing with Valgrind.
197 memset(_ptr, 0, _end - _ptr);
198 #endif
|
199 mike 1.5
|
200 mike 1.1 }
201
202 bool CIMBuffer::getString(String& x)
203 {
204 Uint32 n;
205
206 if (!getUint32(n))
207 return false;
208
209 size_t r = round(n * sizeof(Char16));
210
211 if (_end - _ptr < ptrdiff_t(r))
212 return false;
213
|
214 mike 1.5 if (_swap)
215 {
216 _swapUint16Data((Uint16*)_ptr, n);
217 }
218
219 if (_validate)
220 {
221 if (!_validString((Uint16*)_ptr, n))
222 return false;
223 }
224
|
225 mike 1.1 if (n)
|
226 mike 1.5 x.assign((Char16*)_ptr, n);
227
228 _ptr += r;
229 return true;
230 }
231
232 bool CIMBuffer::getName(CIMName& x)
233 {
234 String tmp;
235
236 if (_validate)
237 {
238 // Get string without validation since we will validate name below.
239
240 _validate = false;
241
242 if (!getString(tmp))
243 return false;
244
245 _validate = true;
246
247 mike 1.5 if (!_validName(tmp))
248 return false;
249 }
250 else
251 {
252 if (!getString(tmp))
253 return false;
254 }
255
256 x = CIMNameCast(tmp);
257 return true;
258 }
259
260 bool CIMBuffer::getNamespaceName(CIMNamespaceName& x)
261 {
262 String tmp;
263
264 if (_validate)
265 {
|
266 karl 1.10 // Get string without validation and validate namespace below.
|
267 mike 1.5
268 _validate = false;
269
270 if (!getString(tmp))
271 return false;
272
273 _validate = true;
274
275 if (!_validNamespaceName(tmp))
276 return false;
277 }
278 else
|
279 mike 1.1 {
|
280 mike 1.5 if (!getString(tmp))
281 return false;
|
282 mike 1.1 }
283
|
284 mike 1.5 x = CIMNamespaceNameCast(tmp);
|
285 mike 1.1 return true;
286 }
287
288 void CIMBuffer::putValue(const CIMValue& x)
289 {
290 CIMValueRep* rep = *((CIMValueRep**)&x);
291
|
292 mike 1.5 // Resolve null flag:
293
294 bool isNull = rep->isNull;
|
295 mike 1.1
|
296 mike 1.5 if (!isNull && rep->type == CIMTYPE_INSTANCE && !rep->isArray)
|
297 mike 1.1 {
298 const CIMInstance& ci = *((CIMInstance*)rep->u._instanceValue);
299
300 if (ci.isUninitialized())
301 {
|
302 mike 1.5 isNull = true;
|
303 mike 1.1 }
304 }
305
|
306 mike 1.5 // Magic:
307 _putMagic(VALUE_MAGIC);
308
309 // Put flags:
310 {
311 Uint32 flags = 0;
312
313 if (isNull)
314 flags |= FLAG_IS_NULL;
315
316 if (rep->isArray)
317 flags |= FLAG_IS_ARRAY;
318
319 putUint32(flags);
320 }
321
322 // Type:
323 putUint32(rep->type);
|
324 mike 1.1
|
325 mike 1.5 if (isNull)
|
326 mike 1.1 return;
327
|
328 mike 1.5 // Put value:
329
|
330 mike 1.1 if (rep->isArray)
331 {
332 switch (rep->type)
333 {
334 case CIMTYPE_BOOLEAN:
|
335 kumpf 1.4 putBooleanA(*(reinterpret_cast<Array<Boolean>*>(&rep->u)));
|
336 mike 1.1 break;
337 case CIMTYPE_UINT8:
|
338 kumpf 1.4 putUint8A(*(reinterpret_cast<Array<Uint8>*>(&rep->u)));
|
339 mike 1.1 break;
340 case CIMTYPE_SINT8:
|
341 kumpf 1.4 putSint8A(*(reinterpret_cast<Array<Sint8>*>(&rep->u)));
|
342 mike 1.1 break;
343 case CIMTYPE_UINT16:
|
344 kumpf 1.4 putUint16A(*(reinterpret_cast<Array<Uint16>*>(&rep->u)));
|
345 mike 1.1 break;
346 case CIMTYPE_SINT16:
|
347 kumpf 1.4 putSint16A(*(reinterpret_cast<Array<Sint16>*>(&rep->u)));
|
348 mike 1.1 break;
349 case CIMTYPE_UINT32:
|
350 kumpf 1.4 putUint32A(*(reinterpret_cast<Array<Uint32>*>(&rep->u)));
|
351 mike 1.1 break;
352 case CIMTYPE_SINT32:
|
353 kumpf 1.4 putSint32A(*(reinterpret_cast<Array<Sint32>*>(&rep->u)));
|
354 mike 1.1 break;
355 case CIMTYPE_UINT64:
|
356 kumpf 1.4 putUint64A(*(reinterpret_cast<Array<Uint64>*>(&rep->u)));
|
357 mike 1.1 break;
358 case CIMTYPE_SINT64:
|
359 kumpf 1.4 putSint64A(*(reinterpret_cast<Array<Sint64>*>(&rep->u)));
|
360 mike 1.1 break;
361 case CIMTYPE_REAL32:
|
362 kumpf 1.4 putReal32A(*(reinterpret_cast<Array<Real32>*>(&rep->u)));
|
363 mike 1.1 break;
364 case CIMTYPE_REAL64:
|
365 kumpf 1.4 putReal64A(*(reinterpret_cast<Array<Real64>*>(&rep->u)));
|
366 mike 1.1 break;
367 case CIMTYPE_CHAR16:
|
368 kumpf 1.4 putChar16A(*(reinterpret_cast<Array<Char16>*>(&rep->u)));
|
369 mike 1.1 break;
370 case CIMTYPE_STRING:
|
371 kumpf 1.4 putStringA(*(reinterpret_cast<Array<String>*>(&rep->u)));
|
372 mike 1.1 break;
373 case CIMTYPE_DATETIME:
|
374 kumpf 1.4 putDateTimeA(*(reinterpret_cast<Array<CIMDateTime>*>(&rep->u)));
|
375 mike 1.1 break;
376 case CIMTYPE_REFERENCE:
|
377 kumpf 1.4 putObjectPathA(
378 *(reinterpret_cast<Array<CIMObjectPath>*>(&rep->u)));
|
379 mike 1.1 break;
380 case CIMTYPE_INSTANCE:
|
381 kumpf 1.8 putInstanceA(*(reinterpret_cast<Array<CIMInstance>*>(&rep->u)),
|
382 mike 1.5 false, false);
|
383 mike 1.1 break;
384 case CIMTYPE_OBJECT:
|
385 mike 1.5 putObjectA(*(reinterpret_cast<Array<CIMObject>*>(&rep->u)),
386 false, false);
|
387 mike 1.1 break;
388 default:
|
389 dl.meetei 1.13 PEGASUS_UNREACHABLE(PEGASUS_ASSERT(0);)
|
390 mike 1.1 break;
391 }
392 }
393 else
394 {
395 switch (rep->type)
396 {
397 case CIMTYPE_BOOLEAN:
398 putBoolean(rep->u._booleanValue);
399 break;
400 case CIMTYPE_UINT8:
401 putUint8(rep->u._uint8Value);
402 break;
403 case CIMTYPE_SINT8:
404 putSint8(rep->u._sint8Value);
405 break;
406 case CIMTYPE_UINT16:
407 putUint16(rep->u._uint16Value);
408 break;
409 case CIMTYPE_SINT16:
410 putSint16(rep->u._sint16Value);
411 mike 1.1 break;
412 case CIMTYPE_UINT32:
413 putUint32(rep->u._uint32Value);
414 break;
415 case CIMTYPE_SINT32:
416 putSint32(rep->u._sint32Value);
417 break;
418 case CIMTYPE_UINT64:
419 putUint64(rep->u._uint64Value);
420 break;
421 case CIMTYPE_SINT64:
422 putSint64(rep->u._sint64Value);
423 break;
424 case CIMTYPE_REAL32:
425 putReal32(rep->u._real32Value);
426 break;
427 case CIMTYPE_REAL64:
428 putReal64(rep->u._real64Value);
429 break;
430 case CIMTYPE_CHAR16:
431 putChar16(rep->u._char16Value);
432 mike 1.1 break;
433 case CIMTYPE_STRING:
434 putString(*((String*)rep->u._stringValue));
435 break;
436 case CIMTYPE_DATETIME:
437 putDateTime(*((CIMDateTime*)rep->u._dateTimeValue));
438 break;
439 case CIMTYPE_REFERENCE:
440 putObjectPath(*((CIMObjectPath*)rep->u._referenceValue));
441 break;
442 case CIMTYPE_INSTANCE:
|
443 mike 1.5 putInstance(*((CIMInstance*)rep->u._instanceValue),false,false);
|
444 mike 1.1 break;
445 case CIMTYPE_OBJECT:
|
446 mike 1.5 putObject(*((CIMObject*)rep->u._instanceValue), false, false);
|
447 mike 1.1 break;
448 default:
|
449 dl.meetei 1.13 PEGASUS_UNREACHABLE(PEGASUS_ASSERT(0);)
|
450 mike 1.1 break;
451 }
452 }
453 }
454
455 bool CIMBuffer::getValue(CIMValue& x)
456 {
457 Uint32 type;
|
458 mike 1.5 Boolean isNull;
|
459 mike 1.1 Boolean isArray;
460
|
461 mike 1.5 // Magic:
|
462 mike 1.1 if (!_testMagic(VALUE_MAGIC))
463 return false;
464
|
465 mike 1.5 // Flags:
466 Uint32 flags;
467
468 if (!getUint32(flags))
469 return false;
470
471 isNull = flags & FLAG_IS_NULL;
472 isArray = flags & FLAG_IS_ARRAY;
473
474 // Type:
475 if (!getUint32(type))
|
476 mike 1.1 return false;
477
478 if (isNull)
479 {
480 x.setNullValue(CIMType(type), isArray, 0);
481 return true;
482 }
483
484 if (isArray)
485 {
486 switch (type)
487 {
488 case CIMTYPE_BOOLEAN:
489 {
490 Array<Boolean> tmp;
491 if (!getBooleanA(tmp))
492 return false;
493 x.set(tmp);
494 return true;
495 }
496 case CIMTYPE_UINT8:
497 mike 1.1 {
498 Array<Uint8> tmp;
499 if (!getUint8A(tmp))
500 return false;
501 x.set(tmp);
502 return true;
503 }
504 case CIMTYPE_SINT8:
505 {
506 Array<Sint8> tmp;
507 if (!getSint8A(tmp))
508 return false;
509 x.set(tmp);
510 return true;
511 }
512 case CIMTYPE_UINT16:
513 {
514 Array<Uint16> tmp;
515 if (!getUint16A(tmp))
516 return false;
517 x.set(tmp);
518 mike 1.1 return true;
519 }
520 case CIMTYPE_SINT16:
521 {
522 Array<Sint16> tmp;
523 if (!getSint16A(tmp))
524 return false;
525 x.set(tmp);
526 return true;
527 }
528 case CIMTYPE_UINT32:
529 {
530 Array<Uint32> tmp;
531 if (!getUint32A(tmp))
532 return false;
533 x.set(tmp);
534 return true;
535 }
536 case CIMTYPE_SINT32:
537 {
538 Array<Sint32> tmp;
539 mike 1.1 if (!getSint32A(tmp))
540 return false;
541 x.set(tmp);
542 return true;
543 }
544 case CIMTYPE_UINT64:
545 {
546 Array<Uint64> tmp;
547 if (!getUint64A(tmp))
548 return false;
549 x.set(tmp);
550 return true;
551 }
552 case CIMTYPE_SINT64:
553 {
554 Array<Sint64> tmp;
555 if (!getSint64A(tmp))
556 return false;
557 x.set(tmp);
558 return true;
559 }
560 mike 1.1 case CIMTYPE_REAL32:
561 {
562 Array<Real32> tmp;
563 if (!getReal32A(tmp))
564 return false;
565 x.set(tmp);
566 return true;
567 }
568 case CIMTYPE_REAL64:
569 {
570 Array<Real64> tmp;
571 if (!getReal64A(tmp))
572 return false;
573 x.set(tmp);
574 return true;
575 }
576 case CIMTYPE_CHAR16:
577 {
578 Array<Char16> tmp;
579 if (!getChar16A(tmp))
580 return false;
581 mike 1.1 x.set(tmp);
582 return true;
583 }
584 case CIMTYPE_STRING:
585 {
586 Array<String> tmp;
587 if (!getStringA(tmp))
588 return false;
589 x.set(tmp);
590 return true;
591 }
592 case CIMTYPE_DATETIME:
593 {
594 Array<CIMDateTime> tmp;
595 if (!getDateTimeA(tmp))
596 return false;
597 x.set(tmp);
598 return true;
599 }
600 case CIMTYPE_REFERENCE:
601 {
602 mike 1.1 Array<CIMObjectPath> tmp;
603 if (!getObjectPathA(tmp))
604 return false;
605 x.set(tmp);
606 return true;
607 }
608 case CIMTYPE_INSTANCE:
609 {
610 Array<CIMInstance> tmp;
611 if (!getInstanceA(tmp))
612 return false;
613 x.set(tmp);
614 return true;
615 }
616 case CIMTYPE_OBJECT:
617 {
618 Array<CIMObject> tmp;
619 if (!getObjectA(tmp))
620 return false;
621 x.set(tmp);
622 return true;
623 mike 1.1 }
624 default:
|
625 dl.meetei 1.13 PEGASUS_UNREACHABLE(PEGASUS_ASSERT(0);)
|
626 mike 1.1 break;
627 }
628 }
629 else
630 {
631 switch (type)
632 {
633 case CIMTYPE_BOOLEAN:
634 {
635 Boolean tmp;
636 if (!getBoolean(tmp))
637 return false;
638 x.set(tmp);
639 return true;
640 }
641 case CIMTYPE_UINT8:
642 {
643 Uint8 tmp;
644 if (!getUint8(tmp))
645 return false;
646 x.set(tmp);
647 mike 1.1 return true;
648 }
649 case CIMTYPE_SINT8:
650 {
651 Sint8 tmp;
652 if (!getSint8(tmp))
653 return false;
654 x.set(tmp);
655 return true;
656 }
657 case CIMTYPE_UINT16:
658 {
659 Uint16 tmp;
660 if (!getUint16(tmp))
661 return false;
662 x.set(tmp);
663 return true;
664 }
665 case CIMTYPE_SINT16:
666 {
667 Sint16 tmp;
668 mike 1.1 if (!getSint16(tmp))
669 return false;
670 x.set(tmp);
671 return true;
672 }
673 case CIMTYPE_UINT32:
674 {
675 Uint32 tmp;
676 if (!getUint32(tmp))
677 return false;
678 x.set(tmp);
679 return true;
680 }
681 case CIMTYPE_SINT32:
682 {
683 Sint32 tmp;
684 if (!getSint32(tmp))
685 return false;
686 x.set(tmp);
687 return true;
688 }
689 mike 1.1 case CIMTYPE_UINT64:
690 {
691 Uint64 tmp;
692 if (!getUint64(tmp))
693 return false;
694 x.set(tmp);
695 return true;
696 }
697 case CIMTYPE_SINT64:
698 {
699 Sint64 tmp;
700 if (!getSint64(tmp))
701 return false;
702 x.set(tmp);
703 return true;
704 }
705 case CIMTYPE_REAL32:
706 {
707 Real32 tmp;
708 if (!getReal32(tmp))
709 return false;
710 mike 1.1 x.set(tmp);
711 return true;
712 }
713 case CIMTYPE_REAL64:
714 {
715 Real64 tmp;
716 if (!getReal64(tmp))
717 return false;
718 x.set(tmp);
719 return true;
720 }
721 case CIMTYPE_CHAR16:
722 {
723 Char16 tmp;
724 if (!getChar16(tmp))
725 return false;
726 x.set(tmp);
727 return true;
728 }
729 case CIMTYPE_STRING:
730 {
731 mike 1.1 String tmp;
732 if (!getString(tmp))
733 return false;
734 x.set(tmp);
735 return true;
736 }
737 case CIMTYPE_DATETIME:
738 {
739 CIMDateTime tmp;
740 if (!getDateTime(tmp))
741 return false;
742 x.set(tmp);
743 return true;
744 }
745 case CIMTYPE_REFERENCE:
746 {
747 CIMObjectPath tmp;
748 if (!getObjectPath(tmp))
749 return false;
750 x.set(tmp);
751 return true;
752 mike 1.1 }
753 case CIMTYPE_INSTANCE:
754 {
755 CIMInstance tmp;
756 if (!getInstance(tmp))
757 return false;
758 x.set(tmp);
759 return true;
760 }
761 case CIMTYPE_OBJECT:
762 {
763 CIMObject tmp;
764 if (!getObject(tmp))
765 return false;
766 x.set(tmp);
767 return true;
768 }
769 default:
|
770 dl.meetei 1.13 PEGASUS_UNREACHABLE(PEGASUS_ASSERT(0);)
|
771 mike 1.1 break;
772 }
773 }
774
775 // Unreachable!
776 return false;
777 }
778
779 void CIMBuffer::putKeyBinding(const CIMKeyBinding& x)
780 {
781 const CIMKeyBindingRep* kb = *(const CIMKeyBindingRep**)&x;
|
782 mike 1.5 putName(kb->_name);
|
783 mike 1.1 putString(kb->_value);
784 putUint32(kb->_type);
785 }
786
787 bool CIMBuffer::getKeyBinding(CIMKeyBinding& x)
788 {
|
789 mike 1.5 CIMName name;
|
790 mike 1.1 String value;
791 Uint32 type;
792
|
793 mike 1.5 if (!getName(name) || !getString(value) || !getUint32(type))
|
794 mike 1.1 return false;
795
796 x.~CIMKeyBinding();
|
797 mike 1.5 new(&x) CIMKeyBinding(name, value, CIMKeyBinding::Type(type));
|
798 mike 1.1
799 return true;
800 }
801
|
802 mike 1.5 void CIMBuffer::putObjectPath(
|
803 kumpf 1.8 const CIMObjectPath& x,
|
804 mike 1.5 bool includeHostAndNamespace,
805 bool includeKeyBindings)
|
806 mike 1.1 {
807 const CIMObjectPathRep* rep = *((const CIMObjectPathRep**)&x);
808
809 _putMagic(OBJECT_PATH_MAGIC);
810
811 if (x.getClassName().isNull())
812 {
813 putBoolean(false);
814 return;
815 }
816 else
817 putBoolean(true);
818
819
|
820 mike 1.5 if (includeHostAndNamespace)
821 {
822 putString(rep->_host);
823 putNamespaceName(rep->_nameSpace);
824 }
825 else
|
826 mike 1.1 {
|
827 mike 1.5 putString(String());
828 putString(String());
829 }
830
831 putName(rep->_className);
832
833 if (includeKeyBindings)
834 {
835 putUint32(rep->_keyBindings.size());
836
837 for (Uint32 i = 0, n = rep->_keyBindings.size(); i < n; i++)
838 {
839 putKeyBinding(rep->_keyBindings[i]);
840 }
|
841 mike 1.1 }
|
842 mike 1.5 else
843 putUint32(0);
|
844 mike 1.1 }
845
846 bool CIMBuffer::getObjectPath(CIMObjectPath& x)
847 {
848 String host;
|
849 mike 1.5 CIMNamespaceName nameSpace;
850 CIMName className;
|
851 mike 1.1 Uint32 size;
852 Array<CIMKeyBinding> kbs;
853
854 if (!_testMagic(OBJECT_PATH_MAGIC))
855 return false;
856
857 Boolean initialized;
858
859 if (!getBoolean(initialized))
860 return false;
861
862 if (!initialized)
863 {
864 x = CIMObjectPath();
865 return true;
866 }
867
|
868 mike 1.5 if (!getString(host) || !getNamespaceName(nameSpace) || !getName(className))
|
869 mike 1.1 return false;
870
871 if (!getUint32(size))
872 return false;
873
874 for (Uint32 i = 0; i < size; i++)
875 {
876 CIMKeyBinding kb;
877
878 if (!getKeyBinding(kb))
879 return false;
880
881 kbs.append(kb);
882 }
883
|
884 kumpf 1.4 x.set(
885 host,
886 *(reinterpret_cast<CIMNamespaceName*>(&nameSpace)),
|
887 mike 1.5 className,
|
888 kumpf 1.4 kbs);
|
889 mike 1.1
890 return true;
891 }
892
893 void CIMBuffer::putQualifier(const CIMQualifier& x)
894 {
895 const CIMQualifierRep* rep = *((const CIMQualifierRep**)&x);
896
|
897 mike 1.5 putName(rep->_name);
|
898 mike 1.1 putValue(rep->_value);
899 putUint32(*((Uint32*)&rep->_flavor));
900 putBoolean(rep->_propagated);
901 }
902
903 bool CIMBuffer::getQualifier(CIMQualifier& x)
904 {
|
905 mike 1.5 CIMName name;
|
906 mike 1.1 CIMValue value;
907 Uint32 flavor;
908 Boolean propagated;
909
|
910 mike 1.5 if (!getName(name))
|
911 mike 1.1 return false;
912
913 if (!getValue(value))
914 return false;
915
916 if (!getUint32(flavor))
917 return false;
918
919 if (!getBoolean(propagated))
920 return false;
921
922 x.~CIMQualifier();
923
924 new(&x) CIMQualifier(
|
925 mike 1.5 name,
|
926 mike 1.1 value,
|
927 kumpf 1.4 *(reinterpret_cast<CIMFlavor*>(&flavor)),
|
928 mike 1.1 propagated);
929
930 return true;
931 }
932
933 void CIMBuffer::putQualifierList(const CIMQualifierList& x)
934 {
935 Uint32 n = x.getCount();
936 putUint32(n);
937
938 for (Uint32 i = 0; i < n; i++)
939 putQualifier(x.getQualifier(i));
940 }
941
942 bool CIMBuffer::getQualifierList(CIMQualifierList& x)
943 {
944 Uint32 n;
945
946 if (!getUint32(n))
947 return false;
948
949 mike 1.1 for (Uint32 i = 0; i < n; i++)
950 {
951 CIMQualifier tmp;
952
953 if (!getQualifier(tmp))
954 return false;
955
956 x.addUnchecked(tmp);
957 }
958
959 return true;
960 }
961
|
962 mike 1.5 void CIMBuffer::putQualifierDecl(const CIMQualifierDecl& x)
963 {
964 const CIMQualifierDeclRep* rep = *((const CIMQualifierDeclRep**)&x);
965
966 putName(rep->_name);
967 putValue(rep->_value);
968 putUint32(*((Uint32*)&rep->_scope));
969 putUint32(*((Uint32*)&rep->_flavor));
970 putUint32(rep->_arraySize);
971 }
972
973 bool CIMBuffer::getQualifierDecl(CIMQualifierDecl& x)
974 {
975 CIMName name;
976 CIMValue value;
977 Uint32 scope;
978 Uint32 flavor;
979 Uint32 arraySize;
980
981 if (!getName(name))
982 return false;
983 mike 1.5
984 if (!getValue(value))
985 return false;
986
987 if (!getUint32(scope))
988 return false;
989
990 if (!getUint32(flavor))
991 return false;
992
993 if (!getUint32(arraySize))
994 return false;
995
996 x.~CIMQualifierDecl();
997
998 new(&x) CIMQualifierDecl(
999 name,
1000 value,
1001 *(reinterpret_cast<CIMScope*>(&scope)),
1002 *(reinterpret_cast<CIMFlavor*>(&flavor)),
1003 arraySize);
1004 mike 1.5
1005 return true;
1006 }
1007
|
1008 mike 1.1 void CIMBuffer::putProperty(const CIMProperty& x)
1009 {
1010 const CIMPropertyRep* rep = *((const CIMPropertyRep**)&x);
1011 // PROPERTY_MAGIC
1012 _putMagic(PROPERTY_MAGIC);
1013
|
1014 mike 1.5 // Flags
1015 Uint32 flags = 0;
1016 {
1017 // CIMProperty.arraySize
1018 if (rep->_arraySize)
1019 {
1020 flags |= FLAG_IS_ARRAY;
1021 }
1022
1023 // CIMProperty.referenceClassName
1024 if (rep->_referenceClassName.getString().size())
1025 {
1026 flags |= FLAG_HAS_REFERENCE_CLASS;
1027 }
1028
1029 // CIMProperty.classOrigin
1030 if (rep->_classOrigin.getString().size())
1031 {
1032 flags |= FLAG_HAS_CLASS_ORIGIN;
1033 }
1034
1035 mike 1.5 // CIMProperty.propagated
1036 if (rep->_propagated)
1037 {
1038 flags |= FLAG_IS_PROPAGATED;
1039 }
1040
1041 // CIMProperty.qualifiers
1042 if (rep->_qualifiers.getCount())
1043 {
1044 flags |= FLAG_HAS_QUALIFIERS;
1045 }
1046
1047 putUint32(flags);
1048 }
1049
|
1050 mike 1.1 // CIMProperty.name
|
1051 mike 1.5 putName(rep->_name);
|
1052 mike 1.1
1053 // CIMProperty.value
1054 putValue(rep->_value);
1055
1056 // CIMProperty.arraySize
|
1057 mike 1.5 if (flags & FLAG_IS_ARRAY)
1058 {
1059 putUint32(rep->_arraySize);
1060 }
|
1061 mike 1.1
1062 // CIMProperty.referenceClassName
|
1063 mike 1.5 if (flags & FLAG_HAS_REFERENCE_CLASS)
1064 {
1065 putName(rep->_referenceClassName);
1066 }
|
1067 mike 1.1
1068 // CIMProperty.classOrigin
|
1069 mike 1.5 if (flags & FLAG_HAS_CLASS_ORIGIN)
1070 {
1071 putName(rep->_classOrigin);
1072 }
|
1073 mike 1.1
1074 // CIMProperty.qualifiers
|
1075 mike 1.5 if (flags & FLAG_HAS_QUALIFIERS)
1076 {
1077 putQualifierList(rep->_qualifiers);
1078 flags |= FLAG_HAS_QUALIFIERS;
1079 }
|
1080 mike 1.1 }
1081
1082 bool CIMBuffer::getProperty(CIMProperty& x)
1083 {
|
1084 mike 1.5 CIMName name;
|
1085 mike 1.1 CIMValue value;
1086 Uint32 arraySize;
|
1087 mike 1.5 CIMName referenceClassName;
1088 CIMName classOrigin;
|
1089 mike 1.1 Boolean propagated;
1090
1091 if (!_testMagic(PROPERTY_MAGIC))
1092 return false;
1093
|
1094 mike 1.5 // Flags:
1095 Uint32 flags;
1096
1097 if (!getUint32(flags))
1098 return false;
1099
|
1100 mike 1.1 // CIMProperty.name
|
1101 mike 1.5 if (!getName(name))
|
1102 mike 1.1 return false;
1103
1104 // CIMProperty.value
1105 if (!getValue(value))
1106 return false;
1107
1108 // CIMProperty.arraySize
|
1109 mike 1.5
1110 if (flags & FLAG_IS_ARRAY)
1111 {
1112 if (!getUint32(arraySize))
1113 return false;
1114 }
1115 else
1116 arraySize = 0;
|
1117 mike 1.1
1118 // CIMProperty.referenceClassName
|
1119 mike 1.5
1120 if (flags & FLAG_HAS_REFERENCE_CLASS)
1121 {
1122 if (!getName(referenceClassName))
1123 return false;
1124 }
|
1125 mike 1.1
1126 // CIMProperty.classOrigin
|
1127 mike 1.5
1128 if (flags & FLAG_HAS_CLASS_ORIGIN)
1129 {
1130 if (!getName(classOrigin))
1131 return false;
1132 }
|
1133 mike 1.1
1134 // CIMProperty.propagated
|
1135 mike 1.5 propagated = flags & FLAG_IS_PROPAGATED;
1136
1137 // Create property:
|
1138 mike 1.1
1139 x.~CIMProperty();
1140
1141 new(&x) CIMProperty(
|
1142 mike 1.5 name,
|
1143 mike 1.1 value,
1144 arraySize,
|
1145 mike 1.5 referenceClassName,
1146 classOrigin,
|
1147 mike 1.1 propagated);
1148
1149 CIMPropertyRep* rep = *((CIMPropertyRep**)&x);
1150
1151 // CIMProperty.qualifiers
|
1152 mike 1.5
1153 if (flags & FLAG_HAS_QUALIFIERS)
1154 {
1155 if (!getQualifierList(rep->_qualifiers))
1156 return false;
1157 }
|
1158 mike 1.1
1159 return true;
1160 }
1161
|
1162 mike 1.5 void CIMBuffer::putInstance(
|
1163 kumpf 1.8 const CIMInstance& x,
|
1164 mike 1.5 bool includeHostAndNamespace,
1165 bool includeKeyBindings)
|
1166 mike 1.1 {
1167 const CIMInstanceRep* rep = *((const CIMInstanceRep**)&x);
1168
1169 // INSTANCE_MAGIC:
1170 _putMagic(INSTANCE_MAGIC);
1171
1172 // CIMInstance.initialized:
1173
1174 if (x.isUninitialized())
1175 {
1176 putBoolean(false);
1177 return;
1178 }
1179 else
1180 putBoolean(true);
1181
1182 // CIMInstance.reference:
|
1183 mike 1.5 putObjectPath(rep->_reference, includeHostAndNamespace, includeKeyBindings);
|
1184 mike 1.1
1185 // CIMInstance.qualifiers:
1186 putQualifierList(rep->_qualifiers);
1187
1188 // CIMInstance.properties:
1189 {
1190 Uint32 n = rep->_properties.size();
1191 putUint32(n);
1192
1193 for (Uint32 i = 0; i < n; i++)
1194 putProperty(rep->_properties[i]);
1195 }
1196 }
1197
1198 bool CIMBuffer::getInstance(CIMInstance& x)
1199 {
1200 CIMInstanceRep* rep;
1201
1202 // INSTANCE_MAGIC:
1203
1204 if (!_testMagic(INSTANCE_MAGIC))
1205 mike 1.1 return false;
1206
1207 // initialized:
1208
1209 Boolean initialized;
1210
1211 if (!getBoolean(initialized))
1212 return false;
1213
1214 if (!initialized)
1215 {
1216 x = CIMInstance();
1217 return true;
1218 }
1219
1220 // CIMIntsance.reference:
1221
1222 CIMObjectPath reference;
1223
1224 if (!getObjectPath(reference))
1225 return false;
1226 mike 1.1
1227 rep = new CIMInstanceRep(reference);
1228
1229 // CIMInstance.qualifiers:
1230
1231 if (!getQualifierList(rep->_qualifiers))
1232 return false;
1233
1234 // CIMInstance.properties:
1235 {
1236 Uint32 n;
1237
1238 if (!getUint32(n))
1239 return false;
1240
1241 for (Uint32 i = 0; i < n; i++)
1242 {
1243 CIMProperty tmp;
1244
1245 if (!getProperty(tmp))
1246 {
1247 mike 1.1 return false;
1248 }
1249
1250 rep->_properties.append(tmp);
1251 }
1252 }
1253
1254 // Replace rep:
1255 CIMInstanceRep*& tmp = *((CIMInstanceRep**)&x);
1256
1257 if (tmp)
1258 tmp->Dec();
1259
1260 tmp = rep;
1261
1262 return true;
1263 }
1264
1265 void CIMBuffer::putClass(const CIMClass& x)
1266 {
1267 const CIMClassRep* rep = *((const CIMClassRep**)&x);
1268 mike 1.1
1269 // CLASS_MAGIC:
1270 _putMagic(CLASS_MAGIC);
1271
1272 // CIMClass.initialized:
1273
1274 if (x.isUninitialized())
1275 {
1276 putBoolean(false);
1277 return;
1278 }
1279 else
1280 putBoolean(true);
1281
1282 // CIMInstance.reference:
1283 putObjectPath(rep->_reference);
1284
1285 // CIMClass.superClassName:
|
1286 mike 1.5 putName(rep->_superClassName);
|
1287 mike 1.1
1288 // CIMClass.qualifiers:
1289 putQualifierList(rep->_qualifiers);
1290
1291 // CIMClass.properties:
1292 {
1293 Uint32 n = rep->_properties.size();
1294 putUint32(n);
1295
1296 for (Uint32 i = 0; i < n; i++)
1297 putProperty(rep->_properties[i]);
1298 }
1299
1300 // CIMClass.methods:
1301 {
1302 Uint32 n = rep->_methods.size();
1303 putUint32(n);
1304
1305 for (Uint32 i = 0; i < n; i++)
1306 putMethod(rep->_methods[i]);
1307 }
1308 mike 1.1 }
1309
1310 bool CIMBuffer::getClass(CIMClass& x)
1311 {
1312 CIMClassRep* rep;
|
1313 mike 1.5 CIMName superClassName;
|
1314 mike 1.1
1315 // CLASS_MAGIC:
1316
1317 if (!_testMagic(CLASS_MAGIC))
1318 return false;
1319
1320 // initialized:
1321
1322 Boolean initialized;
1323
1324 if (!getBoolean(initialized))
1325 return false;
1326
1327 if (!initialized)
1328 {
1329 x = CIMClass();
1330 return true;
1331 }
1332
1333 // CIMIntsance.reference:
1334
1335 mike 1.1 CIMObjectPath reference;
1336
1337 if (!getObjectPath(reference))
1338 return false;
1339
1340 // CIMIntsance.superClassName:
1341
|
1342 mike 1.5 if (!getName(superClassName))
|
1343 mike 1.1 return false;
1344
|
1345 kumpf 1.8 rep = new CIMClassRep(reference.getClassName(),
|
1346 mike 1.5 superClassName);
|
1347 mike 1.1
1348 rep->_reference = reference;
1349
1350 // CIMClass.qualifiers:
1351
1352 if (!getQualifierList(rep->_qualifiers))
1353 return false;
1354
1355 // CIMClass.properties:
1356 {
1357 Uint32 n;
1358
1359 if (!getUint32(n))
1360 return false;
1361
1362 for (Uint32 i = 0; i < n; i++)
1363 {
1364 CIMProperty tmp;
1365
1366 if (!getProperty(tmp))
1367 return false;
1368 mike 1.1
1369 rep->_properties.append(tmp);
1370 }
1371 }
1372
1373 // CIMClass.methods:
1374 {
1375 Uint32 n;
1376
1377 if (!getUint32(n))
1378 return false;
1379
1380 for (Uint32 i = 0; i < n; i++)
1381 {
1382 CIMMethod tmp;
1383
1384 if (!getMethod(tmp))
1385 return false;
1386
1387 rep->_methods.append(tmp);
1388 }
1389 mike 1.1 }
1390
1391 // Replace rep:
1392 CIMClassRep*& tmp = *((CIMClassRep**)&x);
1393
1394 if (tmp)
1395 tmp->Dec();
1396
1397 tmp = rep;
1398
1399 return true;
1400 }
1401
1402 void CIMBuffer::putParameter(const CIMParameter& x)
1403 {
1404 const CIMParameterRep* rep = *((const CIMParameterRep**)&x);
1405
1406 // CIMParameter.name
|
1407 mike 1.5 putName(rep->_name);
|
1408 mike 1.1
1409 // CIMParameter.type
1410 putUint32(rep->_type);
1411
1412 // CIMParameter.isArray
1413 putBoolean(rep->_isArray);
1414
1415 // CIMParameter.arraySize
1416 putUint32(rep->_arraySize);
1417
1418 // CIMParameter.referenceClassName
|
1419 mike 1.5 putName(rep->_referenceClassName);
|
1420 mike 1.1
1421 // CIMParameter.qualifiers
1422 putQualifierList(rep->_qualifiers);
1423 }
1424
1425 bool CIMBuffer::getParameter(CIMParameter& x)
1426 {
|
1427 mike 1.5 CIMName name;
|
1428 mike 1.1 Uint32 type;
1429 Boolean isArray;
1430 Uint32 arraySize;
|
1431 mike 1.5 CIMName referenceClassName;
|
1432 mike 1.1
1433 // CIMParameter.name
|
1434 mike 1.5 if (!getName(name))
|
1435 mike 1.1 return false;
1436
1437 // CIMParameter.type
1438 if (!getUint32(type))
1439 return false;
1440
1441 // CIMParameter.isArray
1442 if (!getBoolean(isArray))
1443 return false;
1444
1445 // CIMParameter.arraySize
1446 if (!getUint32(arraySize))
1447 return false;
1448
1449 // CIMParameter.referenceClassName
|
1450 mike 1.5 if (!getName(referenceClassName))
|
1451 mike 1.1 return false;
1452
1453 x.~CIMParameter();
1454
1455 new(&x) CIMParameter(
|
1456 mike 1.5 name,
|
1457 mike 1.1 CIMType(type),
1458 isArray,
1459 arraySize,
|
1460 mike 1.5 referenceClassName);
|
1461 mike 1.1
1462 CIMParameterRep* rep = *((CIMParameterRep**)&x);
1463
1464 // CIMParameter.qualifiers
1465 if (!getQualifierList(rep->_qualifiers))
1466 return false;
1467
1468 return true;
1469 }
1470
1471 void CIMBuffer::putMethod(const CIMMethod& x)
1472 {
1473 const CIMMethodRep* rep = *((const CIMMethodRep**)&x);
1474
1475 // CIMParameter.name
|
1476 mike 1.5 putName(rep->_name);
|
1477 mike 1.1
1478 // CIMParameter.type
1479 putUint32(rep->_type);
1480
1481 // CIMProperty.classOrigin
|
1482 mike 1.5 putName(rep->_classOrigin);
|
1483 mike 1.1
1484 // CIMProperty.propagated
1485 putBoolean(rep->_propagated);
1486
1487 // CIMMethod.qualifiers:
1488 putQualifierList(rep->_qualifiers);
1489
1490 // CIMMethod.parameters:
1491 {
1492 Uint32 n = rep->_parameters.size();
1493 putUint32(n);
1494
1495 for (Uint32 i = 0; i < n; i++)
1496 putParameter(rep->_parameters[i]);
1497 }
1498 }
1499
1500 bool CIMBuffer::getMethod(CIMMethod& x)
1501 {
1502 CIMMethodRep* rep;
|
1503 mike 1.5 CIMName name;
|
1504 mike 1.1 Uint32 type;
|
1505 mike 1.5 CIMName classOrigin;
|
1506 mike 1.1 Boolean propagated;
1507
1508 // CIMMethod.name
|
1509 mike 1.5 if (!getName(name))
|
1510 mike 1.1 return false;
1511
1512 // CIMMethod.type
1513 if (!getUint32(type))
1514 return false;
1515
1516 // CIMParameter.classOrigin
|
1517 mike 1.5 if (!getName(classOrigin))
|
1518 mike 1.1 return false;
1519
1520 // CIMParameter.propagated
1521 if (!getBoolean(propagated))
1522 return false;
1523
|
1524 mike 1.5 rep = new CIMMethodRep(
1525 name, CIMType(type), classOrigin, propagated);
|
1526 mike 1.1
1527 // CIMMethod.qualifiers:
1528 if (!getQualifierList(rep->_qualifiers))
1529 return false;
1530
1531 // CIMMethod.parameters:
1532 {
1533 Uint32 n;
1534
1535 if (!getUint32(n))
1536 return false;
1537
1538 for (Uint32 i = 0; i < n; i++)
1539 {
1540 CIMParameter tmp;
1541
1542 if (!getParameter(tmp))
1543 return false;
1544
1545 rep->_parameters.append(tmp);
1546 }
1547 mike 1.1 }
1548
1549 // Replace rep:
1550
1551 CIMMethodRep*& tmp = *((CIMMethodRep**)&x);
1552
1553 if (tmp)
1554 tmp->Dec();
1555
1556 tmp = rep;
1557
1558 return true;
1559 }
1560
1561 void CIMBuffer::putPropertyList(const CIMPropertyList& x)
1562 {
1563 CIMPropertyListRep* rep = *((CIMPropertyListRep**)&x);
1564
1565 putBoolean(rep->isNull);
1566
1567 if (!rep->isNull)
1568 mike 1.1 {
1569 Uint32 n = rep->propertyNames.size();
1570 putUint32(n);
1571
1572 for (Uint32 i = 0; i < n; i++)
|
1573 mike 1.5 putName(rep->propertyNames[i]);
|
1574 anusha.kandepu 1.11
1575 Uint32 tagCount = rep->cimNameTags.size();
1576 putUint32(tagCount);
1577
1578 for(Uint32 j = 0; j < tagCount; j++)
1579 {
1580 putUint32(rep->cimNameTags[j]);
1581 }
|
1582 mike 1.1 }
1583 }
1584
1585 bool CIMBuffer::getPropertyList(CIMPropertyList& x)
1586 {
1587 Boolean isNull;
1588
1589 if (!getBoolean(isNull))
1590 return false;
1591
1592 if (isNull)
1593 {
1594 x.~CIMPropertyList();
1595 new(&x) CIMPropertyList();
1596 }
1597 else
1598 {
1599 Array<CIMName> names;
1600
1601 Uint32 n;
1602
1603 mike 1.1 if (!getUint32(n))
1604 return false;
1605
1606 for (Uint32 i = 0; i < n; i++)
1607 {
|
1608 mike 1.5 CIMName name;
|
1609 mike 1.1
|
1610 mike 1.5 if (!getName(name))
|
1611 mike 1.1 return false;
1612
|
1613 mike 1.5 names.append(name);
|
1614 mike 1.1 }
1615
1616 x.~CIMPropertyList();
1617 new(&x) CIMPropertyList(names);
|
1618 anusha.kandepu 1.11
1619 Uint32 tagCount;
|
1620 marek 1.12 if (!getUint32(tagCount))
1621 {
1622 return false;
1623 }
|
1624 anusha.kandepu 1.11
1625 for(Uint32 j=0;j<tagCount;j++)
1626 {
1627 Uint32 tag;
|
1628 marek 1.12 if (!getUint32(tag))
1629 {
1630 return false;
1631 }
|
1632 anusha.kandepu 1.11 x.appendCIMNameTag(tag);
1633 }
1634
|
1635 mike 1.1 }
1636
1637 return true;
1638 }
1639
|
1640 mike 1.5 void CIMBuffer::putObject(
1641 const CIMObject& x,
1642 bool includeHostAndNamespace,
1643 bool includeKeyBindings)
|
1644 mike 1.1 {
1645 _putMagic(OBJECT_MAGIC);
1646
1647 if (x.isUninitialized())
1648 {
1649 putBoolean(false);
1650 return;
1651 }
1652 else
1653 putBoolean(true);
1654
1655 if (x.isInstance())
1656 {
1657 putUint8('I');
|
1658 mike 1.5 putInstance(
1659 CIMInstance(x), includeHostAndNamespace, includeKeyBindings);
|
1660 mike 1.1 }
1661 else
1662 {
1663 putUint8('C');
1664 putClass(CIMClass(x));
1665 }
1666 }
1667
1668 bool CIMBuffer::getObject(CIMObject& x)
1669 {
1670 Boolean initialized;
1671 Uint8 tag;
1672
1673 if (!_testMagic(OBJECT_MAGIC))
1674 return false;
1675
1676 if (!getBoolean(initialized))
1677 return false;
1678
1679 if (!initialized)
1680 {
1681 mike 1.1 x = CIMObject();
1682 return true;
1683 }
1684
1685 if (!getUint8(tag))
1686 return false;
1687
1688 if (tag == 'I')
1689 {
1690 CIMInstance tmp;
1691
1692 if (!getInstance(tmp))
1693 return false;
1694
1695 x.~CIMObject();
1696 new(&x) CIMObject(tmp);
1697 return true;
1698 }
1699 else if (tag == 'C')
1700 {
1701 CIMClass tmp;
1702 mike 1.1
1703 if (!getClass(tmp))
1704 return false;
1705
1706 x.~CIMObject();
1707 new(&x) CIMObject(tmp);
1708 return true;
1709 }
1710 else
1711 return false;
1712
1713 }
1714
1715 void CIMBuffer::putParamValue(const CIMParamValue& x)
1716 {
1717 const CIMParamValueRep* rep = *((const CIMParamValueRep**)&x);
1718
1719 // CIMParamValue.parameterName:
1720 putString(rep->_parameterName);
1721
1722 // CIMParamValue.value:
1723 mike 1.1 putValue(rep->_value);
1724
1725 // CIMParamValue.isTyped:
1726 putBoolean(rep->_isTyped);
1727 }
1728
1729 bool CIMBuffer::getParamValue(CIMParamValue& x)
1730 {
1731 String parameterName;
1732 CIMValue value;
1733 Boolean isTyped;
1734
1735 // CIMParamValue.parameterName:
1736 if (!getString(parameterName))
1737 return false;
1738
1739 // CIMParamValue.value:
1740 if (!getValue(value))
1741 return false;
1742
1743 // CIMParamValue.isTyped:
1744 mike 1.1 if (!getBoolean(isTyped))
1745 return false;
1746
1747 x.~CIMParamValue();
1748 new(&x) CIMParamValue(parameterName, value, isTyped);
1749
1750 return true;
1751 }
1752
1753 void CIMBuffer::putPresent(Boolean flag)
1754 {
1755 if (flag)
1756 putUint32(PRESENT_MAGIC);
1757 else
1758 putUint32(ABSENT_MAGIC);
1759 }
1760
1761 bool CIMBuffer::getPresent(Boolean& flag)
1762 {
1763 Uint32 tmp;
1764
1765 mike 1.1 if (!getUint32(tmp))
1766 return false;
1767
1768 if (tmp == PRESENT_MAGIC)
1769 {
1770 flag = true;
1771 return true;
1772 }
1773 else if (tmp == ABSENT_MAGIC)
1774 {
1775 flag = false;
1776 return true;
1777 }
1778
1779 return false;
1780 }
1781
|
1782 mike 1.5 void CIMBuffer::putInstanceA(
|
1783 kumpf 1.8 const Array<CIMInstance>& x,
|
1784 mike 1.5 bool includeHostAndNamespace,
1785 bool includeKeyBindings)
1786 {
1787 Uint32 n = x.size();
1788 putUint32(n);
1789
1790 for (size_t i = 0; i < n; i++)
1791 putInstance(x[i], includeHostAndNamespace, includeKeyBindings);
1792 }
1793
|
1794 thilo.boehm 1.9
1795 void CIMBuffer::putSCMOClass(const SCMOClass& scmoClass)
1796 {
1797 SCMOStreamer::serializeClass(*this, scmoClass);
1798 }
1799
1800 bool CIMBuffer::getSCMOClass(SCMOClass& scmoClass)
1801 {
1802 return SCMOStreamer::deserializeClass(*this, scmoClass);
1803 }
1804
1805
1806 void CIMBuffer::putSCMOInstanceA(Array<SCMOInstance>& x)
1807 {
1808 Uint32 n = x.size();
1809 _grow(n<<13);
1810
1811 putUint32(n);
1812
1813
1814 SCMOStreamer scmoStreamer(*this,x);
1815 thilo.boehm 1.9 scmoStreamer.serialize();
1816 }
1817
1818 bool CIMBuffer::getSCMOInstanceA(Array<SCMOInstance>& x)
1819 {
1820 Uint32 n;
1821
1822 if (!getUint32(n))
1823 return false;
1824
1825 SCMOStreamer scmoStreamer(*this,x);
1826 return scmoStreamer.deserialize();
1827 }
1828
1829
1830
|
1831 mike 1.1 PEGASUS_NAMESPACE_END
|