1 karl 1.12 //%2005////////////////////////////////////////////////////////////////////////
|
2 schuur 1.1 //
|
3 karl 1.9 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
4 // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
5 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
|
6 schuur 1.1 // IBM Corp.; EMC Corporation, The Open Group.
|
7 karl 1.9 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
8 // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
|
9 karl 1.12 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
10 // EMC Corporation; VERITAS Software Corporation; The Open Group.
|
11 schuur 1.1 //
12 // Permission is hereby granted, free of charge, to any person obtaining a copy
13 // of this software and associated documentation files (the "Software"), to
14 // deal in the Software without restriction, including without limitation the
15 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
16 // sell copies of the Software, and to permit persons to whom the Software is
17 // furnished to do so, subject to the following conditions:
|
18 karl 1.9 //
|
19 schuur 1.1 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
20 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
21 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
22 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
23 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
24 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
25 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 //
28 //==============================================================================
29 //
30 // Author: Adrian Schuur (schuur@de.ibm.com) - PEP 164
31 //
|
32 dave.sudlik 1.2 // Modified By: Dave Sudlik (dsudlik@us.ibm.com)
|
33 david.dillard 1.10 // David Dillard, VERITAS Software Corp.
34 // (david.dillard@veritas.com)
|
35 schuur 1.1 //
36 //%/////////////////////////////////////////////////////////////////////////////
37
38 #include "XmlWriter.h"
39 #include "XmlReader.h"
40 #include "XmlParser.h"
41
42 #include "CIMName.h"
43 #include "BinaryStreamer.h"
44 #include "CIMClassRep.h"
45 #include "CIMInstanceRep.h"
46 #include "CIMMethodRep.h"
47 #include "CIMParameterRep.h"
48 #include "CIMPropertyRep.h"
49 #include "CIMQualifierRep.h"
50
51 #include "CIMValue.h"
52 #include "CIMValueRep.h"
53
54 PEGASUS_USING_STD;
55
56 schuur 1.1 PEGASUS_NAMESPACE_BEGIN
57
|
58 konrad.r 1.8 #if defined(PEGASUS_OS_HPUX)
59 #define TYPE_CONV
60 #endif
61
|
62 david.dillard 1.10 void BinaryStreamer::encode(Array<char>& out, const CIMClass& cls)
|
63 schuur 1.1 {
64 toBin(out, cls);
65 }
66
|
67 david.dillard 1.10 void BinaryStreamer::encode(Array<char>& out, const CIMInstance& inst)
|
68 schuur 1.1 {
69 toBin(out, inst);
70 }
71
|
72 david.dillard 1.10 void BinaryStreamer::encode(Array<char>& out, const CIMQualifierDecl& qual)
|
73 schuur 1.1 {
74 toBin(out, qual);
75 }
76
|
77 david.dillard 1.10 void BinaryStreamer::decode(const Array<char>& in, unsigned int pos, CIMClass& cls)
|
78 schuur 1.1 {
79 cls=extractClass(in,pos,"");
80 }
81
|
82 david.dillard 1.10 void BinaryStreamer::decode(const Array<char>& in, unsigned int pos, CIMInstance& inst)
|
83 schuur 1.1 {
84 inst=extractInstance(in,pos,"");
85 }
86
|
87 david.dillard 1.10 void BinaryStreamer::decode(const Array<char>& in, unsigned int pos, CIMQualifierDecl& qual)
|
88 schuur 1.1 {
89 qual=extractQualifierDecl(in,pos,"");
90 }
91
92
93
|
94 david.dillard 1.10 void BinaryStreamer::append(Array<char>& out, const CIMObjectPath &op)
|
95 schuur 1.1 {
96 CString ustr=op.toString().getCString();
97 Uint16 nl=strlen((const char*)ustr);
|
98 david.dillard 1.10 out.append((char*)&nl,sizeof(Uint16));
99 out.append((char*)((const char*)ustr),nl);
|
100 schuur 1.1 }
101
|
102 david.dillard 1.10 void BinaryStreamer::append(Array<char>& out, const CIMName &cn)
|
103 schuur 1.1 {
104 CString ustr=cn.getString().getCString();
105 Uint16 nl=strlen((const char*)ustr);
|
106 david.dillard 1.10 out.append((char*)&nl,sizeof(Sint16));
|
107 schuur 1.1 if (nl)
|
108 david.dillard 1.10 out.append((char*)((const char*)ustr),nl);
|
109 schuur 1.1 }
110
|
111 david.dillard 1.10 void BinaryStreamer::append(Array<char>& out, const CIMType &typ)
|
112 schuur 1.1 {
113 Uint16 type=(Uint16)typ;
|
114 david.dillard 1.10 out.append((char*)&type,sizeof(Uint16));
|
115 schuur 1.1 }
116
|
117 david.dillard 1.10 void BinaryStreamer::append(Array<char>& out, Uint16 ui)
|
118 schuur 1.1 {
|
119 david.dillard 1.10 out.append((char*)&ui,sizeof(Uint16));
|
120 schuur 1.1 }
121
|
122 david.dillard 1.10 void BinaryStreamer::append(Array<char>& out, Uint32 ui)
|
123 schuur 1.1 {
|
124 david.dillard 1.10 out.append((char*)&ui,sizeof(Uint32));
|
125 schuur 1.1 }
126
|
127 david.dillard 1.10 void BinaryStreamer::append(Array<char>& out, Boolean b)
|
128 schuur 1.1 {
|
129 jim.wunderlich 1.18 out.append((char*) &b,sizeof(Boolean));
|
130 schuur 1.1 }
131
132
133
|
134 david.dillard 1.10 CIMObjectPath BinaryStreamer::extractObjectPath(const char *ar, Uint32 & pos)
|
135 schuur 1.1 {
|
136 konrad.r 1.5 Uint16 sl; //=*(Uint16*)(ar+pos);
137 memcpy( &sl, ar + pos, sizeof (Uint16));
|
138 schuur 1.1 Uint32 ppos=pos+=sizeof(Uint16);
|
139 konrad.r 1.5
|
140 schuur 1.1 pos+=sl;
141 return CIMObjectPath(String(((char*)(ar+ppos)),sl));
142 }
143
|
144 david.dillard 1.10 CIMName BinaryStreamer::extractName(const char *ar, Uint32 & pos)
|
145 schuur 1.1 {
|
146 konrad.r 1.5 Uint16 sl; //=*(Uint16*)(ar+pos);
147 memcpy(&sl, ar + pos, sizeof (Uint16));
|
148 schuur 1.1 Uint32 ppos=pos+=sizeof(Uint16);
149 if (sl) {
150 pos+=sl;
151 return CIMName(String(((char*)(ar+ppos)),sl));
152 }
153 return CIMName();
154 }
155
|
156 david.dillard 1.10 Uint16 BinaryStreamer::extractUint16(const char *ar, Uint32 & pos)
|
157 schuur 1.1 {
|
158 konrad.r 1.5 Uint16 ui; //=*(Uint16*)(ar+pos);
159 memcpy (&ui, ar + pos, sizeof (Uint16));
|
160 schuur 1.1 pos+=sizeof(Uint16);
161 return ui;
162 }
163
|
164 david.dillard 1.10 CIMType BinaryStreamer::extractType(const char *ar, Uint32 & pos)
|
165 schuur 1.1 {
|
166 konrad.r 1.5 Uint16 ui; //=*(Uint16*)(ar+pos);
167 memcpy( &ui, ar + pos, sizeof (Uint16));
|
168 schuur 1.1 pos+=sizeof(Uint16);
169 CIMType t=(CIMType)ui;
170 return t;
171 }
172
|
173 david.dillard 1.10 Uint32 BinaryStreamer::extractUint32(const char *ar, Uint32 & pos)
|
174 schuur 1.1 {
|
175 konrad.r 1.5 Uint32 ui; //=*(Uint32*)(ar+pos);
176 memcpy ( &ui, ar + pos, sizeof(Uint32));
|
177 schuur 1.1 pos+=sizeof(Uint32);
178 return ui;
179 }
180
|
181 david.dillard 1.10 Boolean BinaryStreamer::extractBoolean(const char *ar, Uint32 & pos)
|
182 schuur 1.1 {
|
183 jim.wunderlich 1.17 return ((*((Boolean *)(ar+(pos++))))!=0);
|
184 schuur 1.1 }
185
186
187
188
|
189 david.dillard 1.10 void BinaryStreamer::toBin(Array<char>& out, const CIMClass& cls)
|
190 schuur 1.1 {
191 CIMClassRep *rep=cls._rep;
192 static BINREP_CLASS_PREAMBLE_V1(preamble);
|
193 david.dillard 1.10 out.append((char*)&preamble,sizeof(preamble));
|
194 schuur 1.1
195 append(out,rep->getClassName());
196
197 append(out,rep->getSuperClassName());
198
199 Uint16 qn=rep->getQualifierCount();
200 append(out,qn);
201 for (Uint16 i=0; i<qn; i++) {
202 const CIMQualifier &cq=rep->getQualifier(i);
203 toBin(out,cq);
204 }
205
206 Uint16 pn=rep->getPropertyCount();
207 append(out,pn);
208 for (Uint16 i = 0; i < pn; i++) {
209 toBin(out,rep->getProperty(i));
210 }
211
212 Uint16 mn=rep->getMethodCount();
213 append(out,mn);
214 for (Uint16 i = 0; i < mn; i++) {
215 schuur 1.1 toBin(out,rep->getMethod(i));
216 }
217
218 append(out,rep->_resolved);
219 }
220
221
|
222 david.dillard 1.10 CIMClass BinaryStreamer::extractClass(const Array<char>& in, Uint32 & pos, const String &path)
|
223 schuur 1.1 {
|
224 konrad.r 1.8 #ifdef TYPE_CONV
225 AutoPtr<record_preamble> preamble(new record_preamble());
226
227 Uint32 idx = pos;
228 memcpy( &preamble->_format, in.getData() +idx, sizeof(Uint8));
229 idx+=sizeof(Uint8);
230 memcpy( &preamble->_pVersion, in.getData()+idx, sizeof(Uint8));
231 idx+=sizeof(Uint8);
232 memcpy( &preamble->_pLenAndCtl, in.getData()+idx, sizeof(Uint16));
233 idx+=sizeof(Uint16);
234 memcpy( &preamble->_type, in.getData()+idx, sizeof(Uint8));
235 idx+=sizeof(Uint8);
236 memcpy( &preamble->_tVersion, in.getData()+idx, sizeof(Uint8));
237 //idx+=sizeof(Uint8);
238 #else
|
239 schuur 1.1 BINREP_RECORD_IN(preamble,in,pos);
|
240 konrad.r 1.8 #endif
|
241 david.dillard 1.10 const char *ar=in.getData();
|
242 schuur 1.1
243 try {
244 if (!preamble->endogenous()) {
245 throw BinException(BINREP_CLASS,String("Incompatible Binary Repository not supported"));
246 }
247 if (preamble->type()!=BINREP_CLASS) {
248 throw BinException(BINREP_CLASS,String("Expected CIMClass subtype not found"));
249 }
250
251 pos+=preamble->size();
252
253 switch (preamble->version()) {
254 case BINREP_CLASS_V1: {
255
256 CIMName name=extractName(ar,pos); //if (name=="CIM_Memory") asm("int $3");
257 CIMName super=extractName(ar,pos);
258 CIMClass cls(name,super);
259
260 Uint16 qn=extractUint16(ar,pos);
261 for (Uint16 i=0; i<qn; i++) {
262 CIMQualifier q=extractQualifier(in,pos);
263 schuur 1.1 cls.addQualifier(q);
264 }
265
266 Uint16 pn=extractUint16(ar,pos);
267 for (Uint16 i=0; i<pn; i++) {
268 CIMProperty p=extractProperty(in,pos);
269 cls.addProperty(p);
270 }
271
272 Uint16 mn=extractUint16(ar,pos);
273 for (Uint16 i=0; i<mn; i++) {
274 CIMMethod m=extractMethod(in,pos);
275 cls.addMethod(m);
276 }
277
278 cls._rep->_resolved=extractBoolean(ar,pos);
279 return cls;
280 }
281 default:
282 throw BinException(BINREP_CLASS,String("CIMClass subtype version ")+
283 CIMValue(preamble->version()).toString()+" not supported ");
284 schuur 1.1 }
285 }
286 catch (BinException &be) {
287 throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED,"Binary Repository integraty failure: "+
288 be.message+" - Accessing class: "+path);
289 }
|
290 gs.keenan 1.16 PEGASUS_UNREACHABLE(return CIMClass();)
|
291 schuur 1.1 }
292
293
294
295
296
|
297 david.dillard 1.10 void BinaryStreamer::toBin(Array<char>& out, const CIMInstance& inst)
|
298 schuur 1.1 {
299 CIMInstanceRep *rep=inst._rep;
300
301 static BINREP_INSTANCE_PREAMBLE_V1(preamble);
|
302 david.dillard 1.10 out.append((char*)&preamble,sizeof(preamble));
|
303 schuur 1.1
304 append(out,rep->getPath());
305
306 Uint16 qn=rep->getQualifierCount();
307 append(out,qn);
308 for (Uint16 i=0; i<qn; i++) {
309 const CIMQualifier &cq=rep->getQualifier(i);
310 toBin(out,cq);
311 }
312
313 Uint16 pn=rep->getPropertyCount();
314 append(out,pn);
315 for (Uint16 i = 0; i < pn; i++) {
316 toBin(out,rep->getProperty(i));
317 }
318
319 append(out,rep->_resolved);
320 }
321
322
|
323 david.dillard 1.10 CIMInstance BinaryStreamer::extractInstance(const Array<char>& in, Uint32 & pos,
|
324 schuur 1.1 const String & path)
325 {
|
326 konrad.r 1.8
327 #ifdef TYPE_CONV
328 AutoPtr<record_preamble> preamble(new record_preamble());
329
330 Uint32 idx = pos;
331 memcpy( &preamble->_format, in.getData() +idx, sizeof(Uint8));
332 idx+=sizeof(Uint8);
333 memcpy( &preamble->_pVersion, in.getData()+idx, sizeof(Uint8));
334 idx+=sizeof(Uint8);
335 memcpy( &preamble->_pLenAndCtl, in.getData()+idx, sizeof(Uint16));
336 idx+=sizeof(Uint16);
337 memcpy( &preamble->_type, in.getData()+idx, sizeof(Uint8));
338 idx+=sizeof(Uint8);
339 memcpy( &preamble->_tVersion, in.getData()+idx, sizeof(Uint8));
340 //idx+=sizeof(Uint8);
341 #else
|
342 schuur 1.1 BINREP_RECORD_IN(preamble,in,pos);
|
343 konrad.r 1.8 #endif
|
344 david.dillard 1.10 const char *ar=in.getData();
|
345 schuur 1.1
346 try {
347 if (!preamble->endogenous()) {
348 throw BinException(BINREP_INSTANCE,String("Incompatible Binary Repository not supported"));
349 }
350 if (preamble->type()!=BINREP_INSTANCE) {
351 throw BinException(BINREP_INSTANCE,String("Expected CIMInstance subtype not found"));
352 }
353
354 pos+=preamble->size();
355
356 switch (preamble->version()) {
357 case BINREP_INSTANCE_V1: {
358
359 CIMObjectPath op=extractObjectPath(ar,pos);
360 CIMInstance inst(op.getClassName());
361 inst.setPath(op);
362
363 Uint16 qn=extractUint16(ar,pos);
364 for (Uint16 i=0; i<qn; i++) {
365 CIMQualifier q=extractQualifier(in,pos);
366 schuur 1.1 inst.addQualifier(q);
367 }
368
369 Uint16 pn=extractUint16(ar,pos);
370 for (Uint16 i=0; i<pn; i++) {
371 CIMProperty p=extractProperty(in,pos);
372 inst.addProperty(p);
373 }
374
375 inst._rep->_resolved=extractBoolean(ar,pos);
376
377 return inst;
378 }
379 default:
380 throw BinException(BINREP_INSTANCE,String("CIMInstance subtype version ")+
381 CIMValue(preamble->version()).toString()+" not supported ");
382 }
383 }
384 catch (BinException &be) {
385 throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED,"Binary Repository integraty failure: "+
386 be.message+" - Accessing instance: "+path);
387 schuur 1.1 }
|
388 carson.hovey 1.14 PEGASUS_UNREACHABLE( return CIMInstance(); )
|
389 schuur 1.1 }
390
391
392
393
394
395
|
396 david.dillard 1.10 void BinaryStreamer::toBin(Array<char>& out, const CIMQualifierDecl& qdc)
|
397 schuur 1.1 {
398 static BINREP_QUALIFIERDECL_PREAMBLE_V1(preamble);
|
399 david.dillard 1.10 out.append((char*)&preamble,sizeof(preamble));
|
400 schuur 1.1
401 append(out,qdc.getName());
402
403 toBin(out,qdc.getValue());
404
405 toBin(out,qdc.getScope());
406
407 toBin(out,qdc.getFlavor());
408
409 append(out,qdc.getArraySize());
410
411 }
412
413
|
414 david.dillard 1.10 CIMQualifierDecl BinaryStreamer::extractQualifierDecl(const Array<char>& in, Uint32 & pos,
|
415 schuur 1.1 const String &path)
416 {
|
417 konrad.r 1.8 #ifdef TYPE_CONV
418 AutoPtr<record_preamble> preamble(new record_preamble());
419
420 Uint32 idx = pos;
421 memcpy( &preamble->_format, in.getData() +idx, sizeof(Uint8));
422 idx+=sizeof(Uint8);
423 memcpy( &preamble->_pVersion, in.getData()+idx, sizeof(Uint8));
424 idx+=sizeof(Uint8);
425 memcpy( &preamble->_pLenAndCtl, in.getData()+idx, sizeof(Uint16));
426 idx+=sizeof(Uint16);
427 memcpy( &preamble->_type, in.getData()+idx, sizeof(Uint8));
428 idx+=sizeof(Uint8);
429 memcpy( &preamble->_tVersion, in.getData()+idx, sizeof(Uint8));
430 //idx+=sizeof(Uint8);
431 #else
|
432 schuur 1.1 BINREP_RECORD_IN(preamble,in,pos);
|
433 konrad.r 1.8 #endif
|
434 david.dillard 1.10 const char *ar=in.getData();
|
435 schuur 1.1
436 try {
437 if (!preamble->endogenous()) {
438 throw BinException(BINREP_QUALIFIERDECL,String
439 ("Incompatible Binary Repository not supported"));
440 }
441 if (preamble->type()!=BINREP_QUALIFIERDECL) {
442 throw BinException(BINREP_QUALIFIERDECL,String(
443 "Expected CIMQualifierDecl subtype not found"));
444 }
445
446 pos+=preamble->size();
447
448 switch (preamble->version()) {
449 case BINREP_INSTANCE_V1: {
450
451 CIMName name=extractName(ar,pos);
452 CIMValue val=extractValue(in,pos);
453 CIMScope scp=extractScope(in,pos);
454 CIMFlavor fl=extractFlavor(in,pos);
455 Uint32 as=extractUint32(ar,pos);
456 schuur 1.1
457 CIMQualifierDecl qdl(name,val,scp,fl,as);
458
459 return qdl;
460 }
461 default:
462 throw BinException(BINREP_INSTANCE,String("CIMInstance subtype version ")+
463 CIMValue(preamble->version()).toString()+" not supported ");
464 }
465 }
466 catch (BinException &be) {
467 throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED,"Binary Repository integraty failure: "+
468 be.message+" - Accessing instance: "+path);
469 }
|
470 carson.hovey 1.14 PEGASUS_UNREACHABLE( return CIMQualifierDecl(); )
|
471 schuur 1.1 }
472
473
474
475
476
|
477 david.dillard 1.10 void BinaryStreamer::toBin(Array<char>& out, const CIMMethod &meth)
|
478 schuur 1.1 {
479 CIMMethodRep *rep=meth._rep;
480
481 static BINREP_METHOD_PREAMBLE_V1(preamble);
|
482 david.dillard 1.10 out.append((char*)&preamble,sizeof(preamble));
|
483 schuur 1.1
484 append(out,rep->getName());
485
486 append(out,rep->getType());
487
488 append(out,rep->getClassOrigin());
489
490 append(out,rep->getPropagated());
491
492 Uint16 qn=rep->getQualifierCount();
493 append(out,qn);
494 for (Uint16 i=0; i<qn; i++) {
495 const CIMQualifier &cq=rep->getQualifier(i);
496 toBin(out,cq);
497 }
498
499 Uint16 pn=rep->getParameterCount();
|
500 david.dillard 1.10 out.append((char*)&pn,sizeof(Uint16));
|
501 schuur 1.1 for (Uint16 i = 0; i < pn; i++) {
502 toBin(out,rep->getParameter(i));
503 }
504 }
505
506
|
507 david.dillard 1.10 CIMMethod BinaryStreamer::extractMethod(const Array<char>& in, Uint32 & pos)
|
508 schuur 1.1 {
|
509 konrad.r 1.8 #ifdef TYPE_CONV
510 AutoPtr<subtype_preamble> preamble(new subtype_preamble());
511
512 Uint32 idx = pos;
513 memcpy( &preamble->_pLength, in.getData() +idx, sizeof(Uint8));
514 idx+=sizeof(Uint8);
515 memcpy( &preamble->_type, in.getData()+idx, sizeof(Uint8));
516 idx+=sizeof(Uint8);
517 memcpy( &preamble->_tVersion, in.getData()+idx, sizeof(Uint8));
518 //idx+=sizeof(Uint8);
519 #else
|
520 schuur 1.1 BINREP_SUBTYPE_IN(preamble,in,pos);
|
521 konrad.r 1.8 #endif
|
522 david.dillard 1.10 const char *ar=in.getData();
|
523 schuur 1.1
524 if (preamble->type()!=BINREP_METHOD) {
525 throw BinException(BINREP_METHOD,String("Expected CIMMethod subtype not found"));
526 }
527
528 pos+=preamble->size();
529
530 switch (preamble->version()) {
531 case BINREP_METHOD_V1: {
532
533 CIMName name=extractName(ar,pos);
534 CIMType type=extractType(ar,pos);
535 CIMName orig=extractName(ar,pos);
536 Boolean prpg=extractBoolean(ar,pos);
537
538 CIMMethod meth(name,type,orig,prpg);
539
540 Uint16 qn=extractUint16(ar,pos);
541 for (Uint16 i=0; i<qn; i++) {
542 CIMQualifier q=extractQualifier(in,pos);
543 meth.addQualifier(q);
544 schuur 1.1 }
545
546 Uint16 pn=extractUint16(ar,pos);
547 for (Uint16 i=0; i<pn; i++) {
548 CIMParameter p=extractParameter(in,pos);
549 meth.addParameter(p);
550 }
551
552 return meth;
553 }
554 default: ;
555 throw BinException(BINREP_METHOD,String("CIMMethod subtype version ")+
556 CIMValue(preamble->version()).toString()+" not supported ");
557 }
|
558 carson.hovey 1.14 PEGASUS_UNREACHABLE( return CIMMethod(); )
|
559 schuur 1.1 }
560
561
562
563
564
|
565 david.dillard 1.10 void BinaryStreamer::toBin(Array<char>& out, const CIMParameter& prm)
|
566 schuur 1.1 {
567 CIMParameterRep *rep=prm._rep;
568
569 static BINREP_PARAMETER_PREAMBLE_V1(preamble);
|
570 david.dillard 1.10 out.append((char*)&preamble,sizeof(preamble));
|
571 schuur 1.1
572 append(out,rep->getName());
573
574 append(out,rep->getType());
575
576 append(out,rep->isArray());
577
578 append(out,rep->getArraySize());
579
580 append(out,rep->getReferenceClassName());
581
582 Uint16 qn=rep->getQualifierCount();
583 append(out,qn);
584 for (Uint16 i=0; i<qn; i++) {
585 const CIMQualifier &cq=rep->getQualifier(i);
586 toBin(out,cq);
587 }
588 }
589
|
590 david.dillard 1.10 CIMParameter BinaryStreamer::extractParameter(const Array<char>& in, Uint32 &pos)
|
591 schuur 1.1 {
|
592 konrad.r 1.8 #ifdef TYPE_CONV
593 AutoPtr<subtype_preamble> preamble(new subtype_preamble());
594
595 Uint32 idx = pos;
596 memcpy( &preamble->_pLength, in.getData() +idx, sizeof(Uint8));
597 idx+=sizeof(Uint8);
598 memcpy( &preamble->_type, in.getData()+idx, sizeof(Uint8));
599 idx+=sizeof(Uint8);
600 memcpy( &preamble->_tVersion, in.getData()+idx, sizeof(Uint8));
601 //idx+=sizeof(Uint8);
602 #else
|
603 schuur 1.1 BINREP_SUBTYPE_IN(preamble,in,pos);
|
604 konrad.r 1.8 #endif
|
605 david.dillard 1.10 const char *ar=in.getData();
|
606 schuur 1.1
607 if (preamble->type()!=BINREP_PARAMETER) {
608 throw BinException(BINREP_PARAMETER,String("Expected CIMParameter subtype not found"));
609 }
610
611 pos+=preamble->size();
612
613 switch (preamble->version()) {
614 case BINREP_PARAMETER_V1: {
615
616 CIMName name=extractName(ar,pos);
617 CIMType type=extractType(ar,pos);
618 Boolean isAr=extractBoolean(ar,pos);
619 Uint32 as=extractUint32(ar,pos);
620 CIMName clsr=extractName(ar,pos);
621
622 CIMParameter parm(name,type,isAr,as,clsr);
623
624 Uint16 qn=extractUint16(ar,pos);
625 for (Uint16 i=0; i<qn; i++) {
626 CIMQualifier q=extractQualifier(in,pos);
627 schuur 1.1 parm.addQualifier(q);
628 }
629
630 return parm;
631 }
632 default: ;
633 throw BinException(BINREP_PARAMETER,String("CIMParameter subtype version ")+
634 CIMValue(preamble->version()).toString()+" not supported ");
635 }
|
636 carson.hovey 1.14 PEGASUS_UNREACHABLE( return CIMParameter(); )
|
637 schuur 1.1 }
638
639
640
641
|
642 david.dillard 1.10 void BinaryStreamer::toBin(Array<char>& out, const CIMProperty& prop)
|
643 schuur 1.1 {
644 CIMPropertyRep *rep=prop._rep;
645
646 static BINREP_PROPERTY_PREAMBLE_V1(preamble);
|
647 david.dillard 1.10 out.append((char*)&preamble,sizeof(preamble));
|
648 schuur 1.1
649 append(out,rep->getName());
650
651 toBin(out,rep->getValue());
652
653 append(out,rep->getArraySize());
654
655 append(out,rep->getReferenceClassName());
656
657 append(out,rep->getClassOrigin());
658
659 append(out,rep->getPropagated());
660
661 Uint16 qn=rep->getQualifierCount();
662 append(out,qn);
663 for (Uint16 i=0; i<qn; i++) {
664 const CIMQualifier &cq=rep->getQualifier(i);
665 toBin(out,cq);
666 }
667 }
668
669 schuur 1.1
|
670 david.dillard 1.10 CIMProperty BinaryStreamer::extractProperty(const Array<char>& in, Uint32 &pos)
|
671 schuur 1.1 {
|
672 konrad.r 1.8 #ifdef TYPE_CONV
673 AutoPtr<subtype_preamble> preamble(new subtype_preamble());
674
675 Uint32 idx = pos;
676 memcpy( &preamble->_pLength, in.getData() +idx, sizeof(Uint8));
677 idx+=sizeof(Uint8);
678 memcpy( &preamble->_type, in.getData()+idx, sizeof(Uint8));
679 idx+=sizeof(Uint8);
680 memcpy( &preamble->_tVersion, in.getData()+idx, sizeof(Uint8));
681 //idx+=sizeof(Uint8);
682 #else
|
683 schuur 1.1 BINREP_SUBTYPE_IN(preamble,in,pos);
|
684 konrad.r 1.8 #endif
|
685 david.dillard 1.10 const char *ar=in.getData();
|
686 schuur 1.1
687 if (preamble->type()!=BINREP_PROPERTY) {
688 throw BinException(BINREP_PROPERTY,String("Expected CIMProperty subtype not found"));
689 }
690
691 pos+=preamble->size();
692
693 switch (preamble->version()) {
694 case BINREP_PROPERTY_V1: {
695
696 CIMName name=extractName(ar,pos);
697 CIMValue val=extractValue(in,pos);
698 Uint32 as=extractUint32(ar,pos);
699 CIMName clsr=extractName(ar,pos);
700 CIMName orig=extractName(ar,pos);
701 Boolean prpg=extractBoolean(ar,pos);
702
703 CIMProperty prop(name,val,as,clsr,orig,prpg);
704
705 Uint16 qn=extractUint16(ar,pos);
706 for (Uint16 i=0; i<qn; i++) {
707 schuur 1.1 CIMQualifier q=extractQualifier(in,pos);
708 prop.addQualifier(q);
709 }
710
711 return prop;
712 }
713 default: ;
714 throw BinException(BINREP_PROPERTY,String("CIMProperty subtype version ")+
715 CIMValue(preamble->version()).toString()+" not supported ");
716 }
|
717 carson.hovey 1.14 PEGASUS_UNREACHABLE( return CIMProperty(); )
|
718 schuur 1.1 }
719
720
721
722
723
|
724 david.dillard 1.10 void BinaryStreamer::toBin(Array<char>& out, const CIMFlavor& flav)
|
725 schuur 1.1 {
|
726 david.dillard 1.10 out.append((char*)&flav.cimFlavor,sizeof(flav.cimFlavor));
|
727 schuur 1.1 }
728
729
|
730 david.dillard 1.10 CIMFlavor BinaryStreamer::extractFlavor(const Array<char>& in, Uint32 & pos)
|
731 schuur 1.1 {
732 CIMFlavor flav;
733 flav.cimFlavor=extractUint32(in.getData(),pos);
734 return flav;
735 }
736
737
738
739
740
|
741 david.dillard 1.10 void BinaryStreamer::toBin(Array<char>& out, const CIMScope& scp)
|
742 schuur 1.1 {
|
743 david.dillard 1.10 out.append((char*)&scp.cimScope,sizeof(scp.cimScope));
|
744 schuur 1.1 }
745
746
|
747 david.dillard 1.10 CIMScope BinaryStreamer::extractScope(const Array<char>& in, Uint32 & pos)
|
748 schuur 1.1 {
749 CIMScope scp;
750 scp.cimScope=extractUint32(in.getData(),pos);
751 return scp;
752 }
753
754
755
756
|
757 david.dillard 1.10 void BinaryStreamer::toBin(Array<char>& out, const CIMQualifier& qual)
|
758 schuur 1.1 {
759 CIMQualifierRep *rep=qual._rep;
760
761 static BINREP_QUALIFIER_PREAMBLE_V1(preamble);
|
762 david.dillard 1.10 out.append((char*)&preamble,sizeof(preamble));
|
763 schuur 1.1
764 CIMName name=rep->getName();
765 append(out,name);
766
|
767 dave.sudlik 1.4 toBin(out,rep->getValue());
|
768 schuur 1.1
769 toBin(out,rep->getFlavor());
770
771 append(out,rep->getPropagated());
772 }
773
774
|
775 david.dillard 1.10 CIMQualifier BinaryStreamer::extractQualifier(const Array<char>& in, Uint32 & pos)
|
776 schuur 1.1 {
|
777 konrad.r 1.8 #ifdef TYPE_CONV
778 AutoPtr<subtype_preamble> preamble(new subtype_preamble());
779
780 Uint32 idx = pos;
781 memcpy( &preamble->_pLength, in.getData() +idx, sizeof(Uint8));
782 idx+=sizeof(Uint8);
783 memcpy( &preamble->_type, in.getData()+idx, sizeof(Uint8));
784 idx+=sizeof(Uint8);
785 memcpy( &preamble->_tVersion, in.getData()+idx, sizeof(Uint8));
786 //idx+=sizeof(Uint8);
787 #else
|
788 schuur 1.1 BINREP_SUBTYPE_IN(preamble,in,pos);
|
789 konrad.r 1.8 #endif
|
790 david.dillard 1.10 const char *ar=in.getData();
|
791 schuur 1.1
792 if (preamble->type()!=BINREP_QUALIFIER) {
793 throw BinException(BINREP_QUALIFIER,String("Expected CIMQualifier subtype not found"));
794 }
795
796 pos+=preamble->size();
797
798 switch (preamble->version()) {
799 case BINREP_QUALIFIER_V1: {
800
801 CIMName name=extractName(ar,pos);
802 CIMValue val=extractValue(in,pos);
803 CIMFlavor fl=extractFlavor(in,pos);
804 Boolean prpg=extractBoolean(ar,pos);
805
806 CIMQualifier q(name,val,fl,prpg);
807
808 return q;
809 }
810 default: ;
811 throw BinException(BINREP_QUALIFIER,String("CIMQualifier subtype version ")+
812 schuur 1.1 CIMValue(preamble->version()).toString()+" not supported ");
813 }
|
814 carson.hovey 1.14 PEGASUS_UNREACHABLE( return CIMQualifier(); )
|
815 schuur 1.1 }
816
817
818
819
|
820 david.dillard 1.10 void BinaryStreamer::toBin(Array<char> & out, const CIMValue& val)
|
821 schuur 1.1 {
822 CIMValueRep *_rep=val._rep;
823
824 static BINREP_VALUE_PREAMBLE_V1(preamble);
|
825 david.dillard 1.10 out.append((char*)&preamble,sizeof(preamble));
|
826 schuur 1.1
827 append(out,val.getType());
828
829 Boolean isArray=val.isArray();
830 append(out,isArray);
831
832 Uint32 as=0;
833
834 if (isArray) {
835 as=val.getArraySize();
836 append(out,as);
837 }
838
839 Boolean isNull=val.isNull();
840 append(out,isNull);
841
842 if (!isNull) {
843 if (isArray) {
844 switch (val.getType()) {
845 case CIMTYPE_BOOLEAN: {
|
846 david.dillard 1.10 out.append((char*)_rep->_u._booleanArray->getData(),sizeof(Boolean)*as);
|
847 schuur 1.1 }
848 break;
849 case CIMTYPE_UINT8: {
|
850 david.dillard 1.10 out.append((char*)_rep->_u._uint8Array->getData(),sizeof(Uint8)*as);
|
851 schuur 1.1 }
852 break;
853 case CIMTYPE_SINT8: {
|
854 david.dillard 1.10 out.append((char*)_rep->_u._sint8Array->getData(),sizeof(Sint8)*as);
|
855 schuur 1.1 }
856 break;
857 case CIMTYPE_UINT16: {
|
858 david.dillard 1.10 out.append((char*)_rep->_u._uint16Array->getData(),sizeof(Uint16)*as);
|
859 schuur 1.1 }
860 break;
861 case CIMTYPE_SINT16: {
|
862 david.dillard 1.10 out.append((char*)_rep->_u._sint16Array->getData(),sizeof(Sint16)*as);
|
863 schuur 1.1 }
864 break;
865 case CIMTYPE_UINT32: {
|
866 david.dillard 1.10 out.append((char*)_rep->_u._uint32Array->getData(),sizeof(Uint32)*as);
|
867 schuur 1.1 }
868 break;
869 case CIMTYPE_SINT32: {
|
870 david.dillard 1.10 out.append((char*)_rep->_u._sint32Array->getData(),sizeof(Sint32)*as);
|
871 schuur 1.1 }
872 break;
873 case CIMTYPE_UINT64: {
|
874 david.dillard 1.10 out.append((char*)_rep->_u._uint64Array->getData(),sizeof(Uint64)*as);
|
875 schuur 1.1 }
876 break;
877 case CIMTYPE_SINT64: {
|
878 david.dillard 1.10 out.append((char*)_rep->_u._sint64Array->getData(),sizeof(Uint64)*as);
|
879 schuur 1.1 }
880 break;
881 case CIMTYPE_REAL32: {
|
882 david.dillard 1.10 out.append((char*)_rep->_u._real32Array->getData(),sizeof(Real32)*as);
|
883 schuur 1.1 }
884 break;
885 case CIMTYPE_REAL64: {
|
886 david.dillard 1.10 out.append((char*)_rep->_u._real64Array->getData(),sizeof(Real64)*as);
|
887 schuur 1.1 }
888 break;
889 case CIMTYPE_CHAR16: {
|
890 david.dillard 1.10 out.append((char*)_rep->_u._char16Array->getData(),sizeof(Char16)*as);
|
891 schuur 1.1 }
892 break;
893 case CIMTYPE_STRING: {
894 for (Uint32 i=0; i<as; i++) {
895 CString ustr=(*(_rep->_u._stringArray))[i].getCString();
896 Uint32 sz=strlen((const char*)ustr);
|
897 david.dillard 1.10 out.append((char*)&sz,sizeof(Uint32));
898 out.append((char*)((const char*)ustr),sz);
|
899 schuur 1.1 }
900 }
901 break;
902 case CIMTYPE_DATETIME: {
903 for (Uint32 i=0; i<as; i++) {
904 String dts=(*(_rep->_u._dateTimeArray))[i].toString();
905 Sint32 dtl=dts.size();
|
906 david.dillard 1.10 out.append((char*)&dtl,sizeof(Sint32));
907 out.append((char*)dts.getChar16Data(),dtl*sizeof(Char16));
|
908 schuur 1.1 }
909 }
910 break;
911 case CIMTYPE_REFERENCE: {
912 for (Uint32 i=0; i<as; i++) {
913 String rfs=(*(_rep->_u._referenceArray))[i].toString();
914 Sint32 rfl=rfs.size();
|
915 david.dillard 1.10 out.append((char*)&rfl,sizeof(Sint32));
916 out.append((char*)rfs.getChar16Data(),rfl*sizeof(Char16));
|
917 schuur 1.1 }
918 }
919 break;
|
920 dave.sudlik 1.15 case CIMTYPE_OBJECT: {
921 for (Uint32 i=0; i<as; i++) {
922 String obs=(*(_rep->_u._objectArray))[i].toString();
923 Sint32 obl=obs.size();
924 out.append((char*)&obl,sizeof(Sint32));
925 out.append((char*)obs.getChar16Data(),obl*sizeof(Char16));
926 }
927 }
928 break;
|
929 schuur 1.1 }
930 }
931
932 else switch (val.getType()) {
933 case CIMTYPE_BOOLEAN:
|
934 david.dillard 1.10 out.append((char*)&_rep->_u,sizeof(Boolean)); break;
|
935 schuur 1.1 case CIMTYPE_UINT8:
|
936 david.dillard 1.10 out.append((char*)&_rep->_u,sizeof(Uint8)); break;
|
937 schuur 1.1 case CIMTYPE_SINT8:
|
938 david.dillard 1.10 out.append((char*)&_rep->_u,sizeof(Sint8)); break;
|
939 schuur 1.1 case CIMTYPE_UINT16:
|
940 david.dillard 1.10 out.append((char*)&_rep->_u,sizeof(Uint16)); break;
|
941 schuur 1.1 case CIMTYPE_SINT16:
|
942 david.dillard 1.10 out.append((char*)&_rep->_u,sizeof(Sint16)); break;
|
943 schuur 1.1 case CIMTYPE_UINT32:
|
944 david.dillard 1.10 out.append((char*)&_rep->_u,sizeof(Uint32)); break;
|
945 schuur 1.1 case CIMTYPE_SINT32:
|
946 david.dillard 1.10 out.append((char*)&_rep->_u,sizeof(Sint32)); break;
|
947 schuur 1.1 case CIMTYPE_UINT64:
|
948 david.dillard 1.10 out.append((char*)&_rep->_u,sizeof(Uint64)); break;
|
949 schuur 1.1 case CIMTYPE_SINT64:
|
950 david.dillard 1.10 out.append((char*)&_rep->_u,sizeof(Uint64)); break;
|
951 schuur 1.1 case CIMTYPE_REAL32:
|
952 david.dillard 1.10 out.append((char*)&_rep->_u,sizeof(Real32)); break;
|
953 schuur 1.1 case CIMTYPE_REAL64:
|
954 david.dillard 1.10 out.append((char*)&_rep->_u,sizeof(Real64)); break;
|
955 schuur 1.1 case CIMTYPE_CHAR16:
|
956 david.dillard 1.10 out.append((char*)&_rep->_u,sizeof(Char16)); break;
|
957 schuur 1.1 case CIMTYPE_STRING: {
958 CString ustr=_rep->_u._stringValue->getCString();
959 Uint32 sz=strlen((const char*)ustr);
|
960 david.dillard 1.10 out.append((char*)&sz,sizeof(Uint32));
961 out.append((char*)((const char*)ustr),sz);
|
962 schuur 1.1 }
963 break;
964 case CIMTYPE_DATETIME: {
965 String dts=_rep->_u._dateTimeValue->toString();
966 Sint32 dtl=dts.size();
|
967 david.dillard 1.10 out.append((char*)&dtl,sizeof(Sint32));
968 out.append((char*)dts.getChar16Data(),dtl*sizeof(Char16));
|
969 schuur 1.1 }
970 break;
971 case CIMTYPE_REFERENCE: {
972 String rfs=_rep->_u._referenceValue->toString();
973 Sint32 rfl=rfs.size();
|
974 david.dillard 1.10 out.append((char*)&rfl,sizeof(Sint32));
975 out.append((char*)rfs.getChar16Data(),rfl*sizeof(Char16));
|
976 schuur 1.1 }
977 break;
|
978 dave.sudlik 1.15 case CIMTYPE_OBJECT: {
979 String obs=_rep->_u._objectValue->toString();
980 Sint32 obl=obs.size();
981 out.append((char*)&obl,sizeof(Sint32));
982 out.append((char*)obs.getChar16Data(),obl*sizeof(Char16));
983 }
984 break;
|
985 schuur 1.1 }
986 }
987 else {
988 }
989 }
990
991
|
992 david.dillard 1.10 CIMValue BinaryStreamer::extractValue(const Array<char>& in, Uint32 & pos)
|
993 schuur 1.1 {
|
994 konrad.r 1.8 #ifdef TYPE_CONV
995 AutoPtr<subtype_preamble> preamble(new subtype_preamble());
996
997 Uint32 idx = pos;
998 memcpy( &preamble->_pLength, in.getData() +idx, sizeof(Uint8));
999 idx+=sizeof(Uint8);
1000 memcpy( &preamble->_type, in.getData()+idx, sizeof(Uint8));
1001 idx+=sizeof(Uint8);
1002 memcpy( &preamble->_tVersion, in.getData()+idx, sizeof(Uint8));
1003 //idx+=sizeof(Uint8);
1004 #else
|
1005 schuur 1.1 BINREP_SUBTYPE_IN(preamble,in,pos);
|
1006 konrad.r 1.8 #endif
|
1007 david.dillard 1.10 const char *ar=in.getData();
|
1008 schuur 1.1
1009 if (preamble->type()!=BINREP_VALUE) {
1010 throw BinException(BINREP_VALUE,String("Expected CIMValue subtype not found"));
1011 }
1012
1013 pos+=preamble->size();
1014
1015 Uint32 as=0;
1016
1017 switch (preamble->version()) {
1018 case BINREP_VALUE_V1: {
1019
|
1020 david.dillard 1.10 const char *ar=in.getData();
|
1021 schuur 1.1
1022 CIMType type=extractType(ar,pos);
1023
1024 Boolean isArray=extractBoolean(ar,pos);
1025 if (isArray)
1026 as=extractUint32(ar,pos);
1027
1028 Boolean isNull=extractBoolean(ar,pos);
1029
1030 if (!isNull) {
1031 if (isArray) {
1032
1033 CIMValue val(type,isArray,as);
1034
1035 switch (type) {
1036 case CIMTYPE_BOOLEAN: {
|
1037 konrad.r 1.7 #ifdef TYPE_CONV
1038 Array<Boolean> a_val;
1039 a_val.reserveCapacity(as);
1040 for (Uint32 i =0; i < as*sizeof(Boolean); i+=sizeof(Boolean)) {
1041 Boolean b;
1042 memcpy( &b, ar + pos + i, sizeof(Boolean));
1043 a_val.append(b);
1044 }
1045 val.set(a_val);
1046 #else
|
1047 schuur 1.1 val.set(Array<Boolean>((Boolean*)(ar+pos),as));
|
1048 konrad.r 1.7 #endif
|
1049 schuur 1.1 pos+=sizeof(Boolean)*as;
1050 }
1051 break;
1052 case CIMTYPE_UINT8: {
|
1053 konrad.r 1.7 #ifdef TYPE_CONV
1054 Array<Uint8> a_val;
1055 a_val.reserveCapacity(as);
1056 for (Uint32 i =0; i < as*sizeof(Uint8); i+=sizeof(Uint8)) {
1057 Uint8 val;
1058 memcpy( &val, ar + pos + i, sizeof(Uint8));
1059 a_val.append(val);
1060 }
1061 val.set(a_val);
1062 #else
|
1063 schuur 1.1 val.set(Array<Uint8>((Uint8*)(ar+pos),as));
|
1064 konrad.r 1.7 #endif
|
1065 schuur 1.1 pos+=sizeof(Uint8)*as;
1066 }
1067 break;
1068 case CIMTYPE_SINT8: {
|
1069 konrad.r 1.7 #ifdef TYPE_CONV
1070 Array<Sint8> a_val;
1071 a_val.reserveCapacity(as);
|
1072 david.dillard 1.10 for (Uint32 i =0; i < as*sizeof(char); i+=sizeof(Sint8)) {
1073 char val;
|
1074 konrad.r 1.7 memcpy( &val, ar + pos + i, sizeof(Sint8));
1075 a_val.append(val);
1076 }
1077 val.set(a_val);
1078 #else
|
1079 david.dillard 1.10 val.set(Array<Sint8>((Sint8 *)(ar+pos),as));
|
1080 konrad.r 1.7 #endif
|
1081 schuur 1.1 pos+=sizeof(Sint8)*as;
1082 }
1083 break;
1084 case CIMTYPE_UINT16: {
|
1085 konrad.r 1.7 #ifdef TYPE_CONV
1086 Array<Uint16> a_val;
1087 a_val.reserveCapacity(as);
1088 for (Uint32 i =0; i < as*sizeof(Uint16); i+=sizeof(Uint16)) {
1089 Uint16 val;
1090 memcpy( &val, ar + pos + i, sizeof(Uint16));
1091 a_val.append(val);
1092 }
1093 val.set(a_val);
1094 #else
|
1095 schuur 1.1 val.set(Array<Uint16>((Uint16*)(ar+pos),as));
|
1096 konrad.r 1.7 #endif
|
1097 schuur 1.1 pos+=sizeof(Uint16)*as;
1098 }
1099 break;
1100 case CIMTYPE_SINT16: {
|
1101 konrad.r 1.7 #ifdef TYPE_CONV
1102 Array<Sint16> a_val;
1103 a_val.reserveCapacity(as);
1104 for (Uint32 i =0; i < as*sizeof(Sint16); i+=sizeof(Sint16)) {
1105 Sint16 val;
1106 memcpy( &val, ar + pos + i, sizeof(Sint16));
1107 a_val.append(val);
1108 }
1109 val.set(a_val);
1110 #else
|
1111 schuur 1.1 val.set(Array<Sint16>((Sint16*)(ar+pos),as));
|
1112 konrad.r 1.7 #endif
|
1113 schuur 1.1 pos+=sizeof(Sint16)*as;
1114 }
1115 break;
1116 case CIMTYPE_UINT32: {
|
1117 konrad.r 1.7 #ifdef TYPE_CONV
1118 Array<Uint32> a_val;
1119 a_val.reserveCapacity(as);
1120 for (Uint32 i =0; i < as*sizeof(Uint32); i+=sizeof(Uint32)) {
1121 Uint32 val;
1122 memcpy( &val, ar + pos + i, sizeof(Uint32));
1123 a_val.append(val);
1124 }
1125 val.set(a_val);
1126 #else
|
1127 schuur 1.1 val.set(Array<Uint32>((Uint32*)(ar+pos),as));
|
1128 konrad.r 1.7 #endif
|
1129 schuur 1.1 pos+=sizeof(Uint32)*as;
1130 }
1131 break;
1132 case CIMTYPE_SINT32: {
|
1133 konrad.r 1.7 #ifdef TYPE_CONV
1134 Array<Sint32> a_val;
1135 a_val.reserveCapacity(as);
1136 for (Uint32 i =0; i < as*sizeof(Sint32); i+=sizeof(Sint32)) {
1137 Sint32 val;
1138 memcpy( &val, ar + pos + i, sizeof(Sint32));
1139 a_val.append(val);
1140 }
1141 val.set(a_val);
1142 #else
|
1143 schuur 1.1 val.set(Array<Sint32>((Sint32*)(ar+pos),as));
|
1144 konrad.r 1.7 #endif
|
1145 schuur 1.1 pos+=sizeof(Sint32)*as;
1146 }
1147 break;
1148 case CIMTYPE_UINT64: {
|
1149 konrad.r 1.7 #ifdef TYPE_CONV
1150 Array<Uint64> a_val;
1151 a_val.reserveCapacity(as);
1152 for (Uint32 i =0; i < as*sizeof(Uint64); i+=sizeof(Uint64)) {
1153 Uint64 val;
1154 memcpy( &val, ar + pos + i, sizeof(Uint64));
1155 a_val.append(val);
1156 }
1157 val.set(a_val);
1158 #else
|
1159 schuur 1.1 val.set(Array<Uint64>((Uint64*)(ar+pos),as));
|
1160 konrad.r 1.7 #endif
|
1161 schuur 1.1 pos+=sizeof(Uint64)*as;
1162 }
1163 break;
1164 case CIMTYPE_SINT64: {
|
1165 konrad.r 1.7 #ifdef TYPE_CONV
1166 Array<Sint64> a_val;
1167 a_val.reserveCapacity(as);
1168 for (Uint32 i =0; i < as*sizeof(Sint64); i+=sizeof(Sint64)) {
1169 Sint64 val;
1170 memcpy( &val, ar + pos + i, sizeof(Sint64));
1171 a_val.append(val);
1172 }
1173 val.set(a_val);
1174 #else
|
1175 schuur 1.1 val.set(Array<Sint64>((Sint64*)(ar+pos),as));
|
1176 konrad.r 1.7 #endif
|
1177 schuur 1.1 pos+=sizeof(Sint64)*as;
1178 }
1179 break;
1180 case CIMTYPE_REAL32: {
|
1181 konrad.r 1.7 #ifdef TYPE_CONV
1182 Array<Real32> a_val;
1183 a_val.reserveCapacity(as);
1184 for (Uint32 i =0; i < as*sizeof(Real32); i+=sizeof(Real32)) {
1185 Real32 val;
1186 memcpy( &val, ar + pos + i, sizeof(Real32));
1187 a_val.append(val);
1188 }
1189 val.set(a_val);
1190 #else
|
1191 schuur 1.1 val.set(Array<Real32>((Real32*)(ar+pos),as));
|
1192 konrad.r 1.7 #endif
|
1193 schuur 1.1 pos+=sizeof(Real32)*as;
1194 }
1195 break;
1196 case CIMTYPE_REAL64: {
|
1197 konrad.r 1.7 #ifdef TYPE_CONV
1198 Array<Real64> a_val;
1199 a_val.reserveCapacity(as);
1200 for (Uint32 i =0; i < as*sizeof(Real64); i+=sizeof(Real64)) {
1201 Real64 val;
1202 memcpy( &val, ar + pos + i, sizeof(Real64));
1203 a_val.append(val);
1204 }
1205 val.set(a_val);
1206 #else
|
1207 schuur 1.1 val.set(Array<Real64>((Real64*)(ar+pos),as));
|
1208 konrad.r 1.7 #endif
|
1209 schuur 1.1 pos+=sizeof(Real64)*as;
1210 }
1211 break;
1212 case CIMTYPE_CHAR16: {
|
1213 konrad.r 1.7 #ifdef TYPE_CONV
1214 Array<Char16> a_val;
1215 a_val.reserveCapacity(as);
1216 for (Uint32 i =0; i < as*sizeof(Char16); i+=sizeof(Char16)) {
1217 Char16 val;
1218 memcpy( &val, ar + pos + i, sizeof(Char16));
1219 a_val.append(val);
1220 }
1221 val.set(a_val);
1222 #else
|
1223 schuur 1.1 val.set(Array<Char16>((Char16*)(ar+pos),as));
|
1224 konrad.r 1.7 #endif
|
1225 schuur 1.1 pos+=sizeof(Char16)*as;
1226 }
1227 break;
1228 case CIMTYPE_STRING: {
1229 Array<String> sar;
1230 for (Uint32 i=0; i<as; i++) {
|
1231 konrad.r 1.5 Uint32 sl; //=*(Uint32*)(ar+pos);
1232 memcpy( &sl, ar+pos, sizeof(Uint32));
|
1233 schuur 1.1 pos+=sizeof(Uint32);
1234 sar.append(String(((char*)(ar+pos)),sl));
1235 pos+=sl;
1236 }
1237 val.set(sar);
1238 }
1239 break;
1240 case CIMTYPE_DATETIME: {
1241 Array<CIMDateTime> dar;
1242 for (Uint32 i=0; i<as; i++) {
|
1243 konrad.r 1.5 Uint32 sl; //=*(Uint32*)(ar+pos);
1244 memcpy( &sl, ar + pos, sizeof(Uint32));
|
1245 schuur 1.1 pos+=sizeof(Uint32);
|
1246 konrad.r 1.7 #ifdef TYPE_CONV
1247 String string;
1248 string.reserveCapacity(sl);
1249 for (Uint32 j=0; j < sl*sizeof(Char16); j+=sizeof(Char16)) {
1250 Char16 char16;
1251 memcpy( &char16, ar + pos + j, sizeof(Char16));
1252 string.append( char16 );
1253 }
1254 dar.append(CIMDateTime(string));
1255 #else
|
1256 schuur 1.1 dar.append(CIMDateTime(String(((Char16*)(ar+pos)),sl)));
|
1257 konrad.r 1.7 #endif
|
1258 schuur 1.1 pos+=sl*sizeof(Char16);
1259 }
1260 val.set(dar);
1261 }
1262 break;
1263 case CIMTYPE_REFERENCE: {
1264 Array<CIMObjectPath> rar;
1265 for (Uint32 i=0; i<as; i++) {
|
1266 konrad.r 1.5 Uint32 sl; //=*(Uint32*)(ar+pos);
1267 memcpy( &sl, ar + pos, sizeof(Uint32));
|
1268 schuur 1.1 pos+=sizeof(Uint32);
|
1269 konrad.r 1.7 #ifdef TYPE_CONV
1270 String string;
1271 string.reserveCapacity(sl);
1272 for (Uint32 j=0; j < sl*sizeof(Char16); j+=sizeof(Char16)) {
1273 Char16 char16;
1274 memcpy( &char16, ar + pos + j, sizeof(Char16));
1275 string.append( char16 );
1276 }
1277 rar.append(CIMObjectPath( string ));
1278 #else
|
1279 schuur 1.1 rar.append(CIMObjectPath(String(((Char16*)(ar+pos)),sl)));
|
1280 konrad.r 1.7 #endif
|
1281 schuur 1.1 pos+=sl*sizeof(Char16);
1282 }
1283 val.set(rar);
1284 }
1285 break;
1286 default:
1287 PEGASUS_ASSERT(false);
1288 }
1289 return val;
1290 }
1291
1292 else {
1293
1294 CIMValue val(type,isArray);
1295
1296 switch (type) {
1297 case CIMTYPE_BOOLEAN:
|
1298 konrad.r 1.6 Boolean b;
1299 memcpy(&b, ar + pos, sizeof(Boolean));
1300 //val.set(*(Boolean*)(ar+pos));
1301 val.set(b);
|
1302 jim.wunderlich 1.18 pos+=sizeof(Boolean);
|
1303 schuur 1.1 break;
1304 case CIMTYPE_SINT8:
|
1305 w.otsuka 1.11 {
1306 Sint8 sint=0;
|
1307 w.otsuka 1.13 memcpy( &sint, ar + pos, sizeof(Sint8));
|
1308 konrad.r 1.6 //val.set(*(Sint8*)(ar+pos));
1309 val.set(sint);
|
1310 schuur 1.1 pos++;
|
1311 w.otsuka 1.11 }
|
1312 schuur 1.1 break;
1313 case CIMTYPE_UINT8:
|
1314 konrad.r 1.6 Uint8 uint;
1315 //val.set(*(Uint8*)(ar+pos));
1316 memcpy(&uint, ar + pos, sizeof(Uint8));
1317 val.set(uint);
|
1318 schuur 1.1 pos++;
1319 break;
1320 case CIMTYPE_UINT16:
|
1321 konrad.r 1.6 Uint16 uint16;
1322 //val.set(*(Uint16*)(ar+pos));
1323 memcpy( &uint16, ar + pos, sizeof(Uint16));
1324 val.set(uint16);
|
1325 schuur 1.1 pos+=sizeof(Uint16);
1326 break;
1327 case CIMTYPE_SINT16:
|
1328 konrad.r 1.6 Sint16 sint16;
1329 //val.set(*(Sint16*)(ar+pos));
1330 memcpy( &sint16, ar + pos, sizeof(Sint16));
1331 val.set(sint16);
|
1332 schuur 1.1 pos+=sizeof(Sint16);
1333 break;
|
1334 konrad.r 1.7 case CIMTYPE_CHAR16: {
1335 Char16 char16;
1336 memcpy( &char16, ar + pos, sizeof(Char16));
1337 //val.set(*(Char16*)(ar+pos));
1338 val.set ( char16 );
|
1339 schuur 1.1 pos+=sizeof(Char16);
1340 break;
|
1341 konrad.r 1.7 }
|
1342 schuur 1.1 case CIMTYPE_UINT32:
|
1343 konrad.r 1.6 Uint32 uint32;
1344 memcpy ( &uint32, ar + pos, sizeof(Uint32));
1345 //val.set(*(Uint32*)(ar+pos));
1346 val.set( uint32 );
|
1347 schuur 1.1 pos+=sizeof(Uint32);
1348 break;
1349 case CIMTYPE_SINT32:
|
1350 konrad.r 1.6 Sint32 sint32;
1351 memcpy ( &sint32, ar + pos, sizeof(Sint32));
1352 //val.set(*(Sint32*)(ar+pos));
1353 val.set ( sint32 );
|
1354 schuur 1.1 pos+=sizeof(Sint32);
1355 break;
1356 case CIMTYPE_REAL32:
|
1357 konrad.r 1.6 Real32 real32;
1358 memcpy ( &real32, ar + pos, sizeof(Real32));
1359 //val.set(*(Real32*)(ar+pos));
1360 val.set ( real32 );
|
1361 schuur 1.1 pos+=sizeof(Real32);
1362 break;
1363 case CIMTYPE_UINT64:
|
1364 konrad.r 1.6 Uint64 uint64;
1365 memcpy ( &uint64, ar + pos, sizeof(Uint64));
1366 //val.set(*(Uint64*)(ar+pos));
1367 val.set( uint64 );
|
1368 schuur 1.1 pos+=sizeof(Uint64);
1369 break;
1370 case CIMTYPE_SINT64:
|
1371 konrad.r 1.6 Sint64 sint64;
1372 memcpy( &sint64, ar + pos, sizeof(Sint64));
1373 //val.set(*(Sint64*)(ar+pos));
1374 val.set( sint64 );
|
1375 schuur 1.1 pos+=sizeof(Sint64);
1376 break;
1377 case CIMTYPE_REAL64:
|
1378 konrad.r 1.6 Real64 real64;
1379 memcpy ( &real64, ar + pos, sizeof(Real64));
1380 //val.set(*(Real64*)(ar+pos));
1381 val.set( real64 );
|
1382 schuur 1.1 pos+=sizeof(Real64);
1383 break;
1384 case CIMTYPE_STRING: {
|
1385 konrad.r 1.5 Uint32 sl; //=*(Uint32*)(ar+pos);
1386 memcpy( &sl, ar + pos, sizeof(Uint32));
|
1387 schuur 1.1 pos+=sizeof(Uint32);
1388 val.set(String(((char*)(ar+pos)),sl));
1389 pos+=sl;
1390 }
1391 break;
1392 case CIMTYPE_DATETIME: {
|
1393 konrad.r 1.5 Uint32 dtl; //=*(Uint32*)(ar+pos);
1394 memcpy( &dtl, ar + pos, sizeof (Uint32));
|
1395 schuur 1.1 pos+=sizeof(Uint32);
|
1396 konrad.r 1.7
1397 CIMDateTime time;
1398 #ifdef TYPE_CONV
1399 String string;
1400 string.reserveCapacity(dtl);
1401
1402 for (Uint32 i =0; i < dtl*sizeof(Char16); i+=sizeof(Char16)) {
1403 Char16 char_at;
1404 memcpy( &char_at, ar + pos + i, sizeof(Char16));
1405 string.append( char_at );
1406 }
1407 time = CIMDateTime ( string );
1408 #else
1409 time = CIMDateTime(String(((Char16*)(ar+pos)),dtl));
1410 #endif
1411 val.set( time );
1412 pos+=dtl*sizeof(Char16);
|
1413 schuur 1.1 }
1414 break;
1415 case CIMTYPE_REFERENCE: {
|
1416 konrad.r 1.5 Uint32 rfl; //=*(Uint32*)(ar+pos);
1417 memcpy( &rfl, ar + pos, sizeof (Uint32));
|
1418 schuur 1.1 pos+=sizeof(Uint32);
|
1419 konrad.r 1.7
1420 CIMObjectPath objPath;
1421 #ifdef TYPE_CONV
1422 String string;
1423
1424 string.reserveCapacity(rfl);
1425 for (Uint32 i =0; i < rfl*sizeof(Char16); i+=sizeof(Char16)) {
1426 Char16 char_at;
1427 memcpy ( &char_at, ar + pos +i, sizeof(Char16));
1428 string.append( char_at );
1429 }
1430 objPath = CIMObjectPath( string );
1431 #else
1432 objPath = CIMObjectPath(String(((Char16*)(ar+pos)),rfl));
1433 #endif
1434 val.set( objPath);
|
1435 schuur 1.1 pos+=rfl*sizeof(Char16);
1436 }
1437 break;
1438 default:
1439 PEGASUS_ASSERT(false);
1440 }
1441 return val;
1442 }
1443 }
1444 else {
1445 CIMValue val;
1446 val.setNullValue(type,isArray,as);
1447 return val;
1448 }
1449 break;
1450 }
1451 default:
1452 throw BinException(BINREP_VALUE,String("CIMValue subtype version ")+
1453 CIMValue(preamble->version()).toString()+" not supported ");
1454 }
1455 return CIMValue();
1456 schuur 1.1 }
1457
1458
1459 PEGASUS_NAMESPACE_END
|