(file) Return to CMPI_Value.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / ProviderManager2 / CMPI

  1 martin 1.33 //%LICENSE////////////////////////////////////////////////////////////////
  2 martin 1.34 //
  3 martin 1.33 // 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.34 //
 10 martin 1.33 // 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.34 //
 17 martin 1.33 // The above copyright notice and this permission notice shall be included
 18             // in all copies or substantial portions of the Software.
 19 martin 1.34 //
 20 martin 1.33 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 21 martin 1.34 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 22 martin 1.33 // 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.34 //
 28 martin 1.33 //////////////////////////////////////////////////////////////////////////
 29 schuur 1.1  //
 30             //%/////////////////////////////////////////////////////////////////////////////
 31             
 32 schuur 1.5  #include "CMPI_Version.h"
 33 schuur 1.2  
 34 schuur 1.1  #include "CMPI_String.h"
 35 schuur 1.11 #include "CMPI_Value.h"
 36 r.kieninger 1.35.4.3 #include "CMPISCMOUtilities.h"
 37 schuur      1.1      
 38                      PEGASUS_USING_STD;
 39                      PEGASUS_NAMESPACE_BEGIN
 40                      
 41 kavita.gupta 1.27     #define CopyToArray(pt,ct) \
 42                           { \
 43                               Array<pt> ar##pt(aSize); \
 44                               for (int i=0; i<aSize; i++) \
 45                               { \
 46                                   ar##pt[i]=aData[i].value.ct; \
 47                               } \
 48 venkat.puvvada 1.29             v.set(ar##pt); \
 49 kavita.gupta   1.27         }
 50                         
 51                         #define CopyToStringArray(pt,ct) \
 52                             { \
 53                                 Array<pt> ar##pt(aSize); \
 54                                 for (int i=0; i<aSize; i++) \
 55                                 { \
 56                                     ar##pt[i]=String(((char*)aData[i].value.ct)); \
 57                                 } \
 58 venkat.puvvada 1.29             v.set(ar##pt); \
 59 kavita.gupta   1.27         }
 60                         
 61                         #define CopyCharsptrToStringArray(pt,ct) \
 62                             { \
 63                                 Array<pt> ar##pt(aSize); \
 64                                 for (int i=0; i<aSize; i++) \
 65                                 { \
 66                                     ar##pt[i]=String((*(char**)aData[i].value.ct)); \
 67                                 }\
 68 venkat.puvvada 1.29             v.set(ar##pt); \
 69 kavita.gupta   1.27         }
 70                         
 71                         #define CopyToEncArray(pt,ct) \
 72                             { \
 73                                 Array<pt> ar##pt(aSize); \
 74                                 for (int i=0; i<aSize; i++) \
 75                                 { \
 76                                     ar##pt[i]=*((pt*)aData[i].value.ct->hdl); \
 77 venkat.puvvada 1.29             } \
 78                                 v.set(ar##pt); \
 79                             }
 80                         
 81                         #define CopyFromArray(pt,ct) \
 82                             { \
 83                                 Array<pt> ar##pt; \
 84                                 v.get(ar##pt); \
 85                                 for (int i=0; i<aSize; i++) \
 86                                 { \
 87                                     aData[i].value.ct=ar##pt[i]; \
 88                                 } \
 89                             }
 90                         
 91                         #define CopyFromStringArray(pt,ct) \
 92                             { \
 93                                 Array<pt> ar##pt; \
 94                                 v.get(ar##pt); \
 95                                 for (int i=0; i<aSize; i++) \
 96                                 { \
 97                                      aData[i].value.ct=reinterpret_cast<CMPIString*>(\
 98 venkat.puvvada 1.29                      new CMPI_Object(ar##pt[i])); \
 99                                 } \
100                             }
101                         
102                         #define CopyFromEncArray(pt,ct,cn) \
103                             { \
104                                 Array<pt> ar##pt; \
105                                 v.get(ar##pt); \
106                                 for (int i=0; i<aSize; i++) \
107                                 { \
108                                     aData[i].value.cn=reinterpret_cast<ct*>(\
109                                         new CMPI_Object(new pt(ar##pt[i]))); \
110 kavita.gupta   1.27             } \
111                             }
112                         
113 venkat.puvvada 1.28     /**
114 r.kieninger    1.35.4.3   Function to convert CMPIValue to SCMBUnion
115                         */
116                         SCMBUnion value2SCMOValue(const CMPIValue* data,const CMPIType type)
117                         {
118                             SCMBUnion scmoData;
119                             scmoData.simple.val.u64 = data->uint64;
120                             scmoData.simple.hasValue = 1;
121                         
122                             if (!(type&CMPI_ARRAY))
123                             {
124                         
125                                 switch (type)
126                                 {
127                                 case CMPI_dateTime:
128                                     {
129 marek          1.35.4.8                 CIMDateTimeRep * cimdt =
130 r.kieninger    1.35.4.3                     CMPISCMOUtilities::scmoDateTimeFromCMPI(data->dateTime);
131                                         if (cimdt)
132                                         {
133                                             scmoData.dateTimeValue = *cimdt;
134                                         }
135                                         break;
136                                     }
137                                 case CMPI_chars:
138                                     {
139                                         scmoData.extString.pchar = (char*)data;
140                                         if (scmoData.extString.pchar)
141                                         {
142 marek          1.35.4.8                     scmoData.extString.length =
143 r.kieninger    1.35.4.3                         strlen(scmoData.extString.pchar);
144                                         }
145                                         break;
146                                     }
147                                 case CMPI_charsptr:
148                                     {
149                                         if (data && *(char**)data)
150                                         {
151                                             scmoData.extString.pchar = *(char**)data;
152 marek          1.35.4.8                     scmoData.extString.length =
153 r.kieninger    1.35.4.3                         strlen(scmoData.extString.pchar);
154                                         }
155                                         break;
156                                     }
157                                 case CMPI_string:
158                                     {
159                         
160                                         scmoData.extString.pchar = (char*)data->string->hdl;
161                                         if (scmoData.extString.pchar)
162                                         {
163 marek          1.35.4.8                     scmoData.extString.length =
164 r.kieninger    1.35.4.3                         strlen(scmoData.extString.pchar);
165                                         }
166                                         break;
167                                     }
168                                 case CMPI_ref:
169                                 case CMPI_instance:
170                                     {
171                                         if (data->inst)
172                                         {
173                                             scmoData.extRefPtr = (SCMOInstance*)data->inst->hdl;
174                                         }
175                                         break;
176                                     }
177                                 }
178                             }
179                             else
180                             {
181                                 //Array Implementation goes here ....
182                             }
183                             return scmoData;
184                         }
185 r.kieninger    1.35.4.3 
186                         
187                         /**
188 venkat.puvvada 1.28       Function to convert CMPIValue to CIMValue
189                         */
190 kavita.gupta   1.27     CIMValue value2CIMValue(const CMPIValue* data, const CMPIType type, CMPIrc *rc)
191                         {
192 venkat.puvvada 1.28         CIMValue v;
193                             if( rc )
194 kavita.gupta   1.27         {
195                                 *rc=CMPI_RC_OK;
196                             }
197 schuur         1.1      
198 venkat.puvvada 1.28     /**
199                            check data for NULL if type is not CMPIArray.
200                         */
201                             if( !(type & CMPI_ARRAY) && !data )
202                             {
203                                 return CIMValue(type2CIMType(type), false);
204                             }
205                             /**
206                                Case when type is CMPIArray
207                            */
208                             if( type & CMPI_ARRAY )
209 kavita.gupta   1.27         {
210                                 //Return if data itself is NULL or Array is NULL
211 venkat.puvvada 1.28             if( data == NULL || data->array == NULL )
212 kavita.gupta   1.27             {
213 venkat.puvvada 1.28                 CMPIType aType=type&~CMPI_ARRAY;
214                                     return CIMValue(type2CIMType(aType),true);
215                                 }
216 kavita.gupta   1.27             // When data is not NULL and data->array is also set
217 venkat.puvvada 1.28             CMPIArray *ar=data->array;
218 thilo.boehm    1.35.4.1         CMPIData *aData=(CMPIData*)((CMPI_Array*)ar->hdl)->hdl;
219 kavita.gupta   1.27     
220                                 //Get the type of the elements in the array
221 venkat.puvvada 1.28             CMPIType aType=aData->type&~CMPI_ARRAY;
222 kavita.gupta   1.27     
223 venkat.puvvada 1.28             int aSize=aData->value.sint32;
224                                 aData++;
225 schuur         1.1      
226 kavita.gupta   1.27             // Checks for Signed Integers
227 venkat.puvvada 1.28             if( (aType & (CMPI_UINT|CMPI_SINT))==CMPI_SINT )
228 kavita.gupta   1.27             {
229 venkat.puvvada 1.28                 switch( aType )
230 kavita.gupta   1.27                 {
231                                         case CMPI_sint32:
232                                             CopyToArray(Sint32,sint32);
233                                             break;
234                         
235                                         case CMPI_sint16:
236                                             CopyToArray(Sint16,sint16);
237                                             break;
238                         
239                                         case CMPI_sint8:
240                                             CopyToArray(Sint8,sint8);
241                                             break;
242                         
243                                         case CMPI_sint64:
244                                             CopyToArray(Sint64,sint64);
245                                             break;
246 schuur         1.11     
247 venkat.puvvada 1.28                     default: ;
248                                     }
249                                 }
250                                 else
251                                 if( aType == CMPI_chars )
252 kavita.gupta   1.27             {
253 marek          1.31                 CopyToStringArray(String,string->hdl)
254 kavita.gupta   1.27             }
255 kumpf          1.35             else
256 venkat.puvvada 1.28             if( aType == CMPI_charsptr )
257 kavita.gupta   1.27             {
258                                     CopyCharsptrToStringArray(String,chars)
259                                 }
260 kumpf          1.35             else
261 venkat.puvvada 1.28             if( aType == CMPI_string )
262 kavita.gupta   1.27             {
263                                     CopyToStringArray(String,string->hdl)
264                                 }
265                         
266                         
267                                 // Checks for Unsigned Integers
268 venkat.puvvada 1.28             else
269                                 if( (aType & (CMPI_UINT|CMPI_SINT))==CMPI_UINT )
270 kavita.gupta   1.27             {
271 venkat.puvvada 1.28                 switch( aType )
272 kavita.gupta   1.27                 {
273                                         case CMPI_uint32:
274                                             CopyToArray(Uint32,uint32);
275                                             break;
276                                         case CMPI_uint16:
277                                             CopyToArray(Uint16,uint16);
278                                             break;
279                                         case CMPI_uint8:
280                                             CopyToArray(Uint8,uint8);
281                                             break;
282                                         case CMPI_uint64:
283                                             CopyToArray(Uint64,uint64);
284                                             break;
285 venkat.puvvada 1.28                     default: ;
286                                     }
287 kavita.gupta   1.27     
288                         
289 venkat.puvvada 1.28             }
290 kavita.gupta   1.27             else
291                                 {
292 venkat.puvvada 1.28                 switch( aType )
293 kavita.gupta   1.27                 {
294                                         case CMPI_ref:
295 r.kieninger    1.35.4.6                     {
296                                                 Array<CIMObjectPath> arCIMObjectPath(aSize);
297                                                 for (int i=0; i<aSize; i++)
298                                                 {
299 marek          1.35.4.8                             SCMOInstance* scmoInst =
300 r.kieninger    1.35.4.6                                 (SCMOInstance*)aData[i].value.ref->hdl;
301                                                     CIMObjectPath ref;
302                                                     scmoInst->getCIMObjectPath(ref);
303                                                     arCIMObjectPath[i]=ref;
304                                                 }
305                                                 v.set(arCIMObjectPath);
306                                             }
307 kavita.gupta   1.27                         break;
308                         
309                                         case CMPI_dateTime:
310                                             CopyToEncArray(CIMDateTime,dateTime);
311                                             break;
312                                         case CMPI_instance:
313 marek          1.35.4.8                     {
314                                                 Array<CIMObject> arCIMInstance(aSize);
315                                                 for (int i=0; i<aSize; i++)
316 r.kieninger    1.35.4.6                         {
317 marek          1.35.4.8                             SCMOInstance* scmoInst =
318 r.kieninger    1.35.4.6                                 (SCMOInstance*)aData[i].value.inst->hdl;
319                                                     CIMInstance inst;
320                                                     scmoInst->getCIMInstance(inst);
321                                                     CIMObject obj(inst);
322                                                     arCIMInstance[i]=obj;
323                                                 }
324                                                 v.set(arCIMInstance);
325                                             }
326 kavita.gupta   1.27                         break;
327                                         case CMPI_boolean:
328                                             CopyToArray(Boolean,boolean);
329                                             break;
330                         
331                                         case CMPI_char16:
332                                             CopyToArray(Char16,char16);
333                                             break;
334                         
335                                         case CMPI_real32:
336                                             CopyToArray(Real32,real32);
337                                             break;
338                         
339                                         case CMPI_real64:
340                                             CopyToArray(Real64,real64);
341                                             break;
342                         
343 venkat.puvvada 1.28                     default:
344                                             if( rc )
345 kavita.gupta   1.27                         {
346                                                 *rc=CMPI_RC_ERR_NOT_SUPPORTED;
347                                             }
348                                     }
349 venkat.puvvada 1.28             }
350                                 return CIMValue(v);
351                             } // end of array processing
352 kavita.gupta   1.27         //Start of non - array types processing
353 venkat.puvvada 1.28         else
354                             if( type == CMPI_chars )
355 kavita.gupta   1.27         {
356                                 v.set(String((char*)data));
357 venkat.puvvada 1.28         }
358                             else
359                             if( type == CMPI_charsptr )
360 kavita.gupta   1.27         {
361 venkat.puvvada 1.28             if( data && *(char**)data )
362 kavita.gupta   1.27             {
363                                     v.set(String(*(char**)data));
364                                 }
365                                 else
366                                 {
367 schuur         1.11                 return CIMValue(CIMTYPE_STRING,false);
368 venkat.puvvada 1.28             }
369 kavita.gupta   1.27         }
370 schuur         1.11     
371 kavita.gupta   1.27         //Checks for Signed integers
372 venkat.puvvada 1.28         else
373                             if( (type & (CMPI_UINT|CMPI_SINT))==CMPI_SINT )
374 kavita.gupta   1.27         {
375 venkat.puvvada 1.28             switch( type )
376 kavita.gupta   1.27             {
377                                     case CMPI_sint32:
378                                         v.set((Sint32)data->sint32);
379                                         break;
380                         
381                                     case CMPI_sint16:
382                                         v.set((Sint16)data->sint16);
383                                         break;
384                         
385                                     case CMPI_sint8:
386                                         v.set((Sint8)data->sint8);
387                                         break;
388                         
389                                     case CMPI_sint64:
390                                         v.set((Sint64)data->sint64);
391                                         break;
392 venkat.puvvada 1.28                 default: ;
393                                 }
394                             }
395                             else
396                             if( type == CMPI_string )
397 kavita.gupta   1.27         {
398 venkat.puvvada 1.28             if( data->string && data->string->hdl )
399 kavita.gupta   1.27             {
400                                     v.set(String((char*)data->string->hdl));
401                                 }
402                                 else
403                                 {
404                                     return CIMValue(CIMTYPE_STRING,false);
405                                 }
406                             }
407 schuur         1.1      
408 kavita.gupta   1.27         //Checks for Unsigned Integers
409 venkat.puvvada 1.28         else
410                             if( (type & (CMPI_UINT|CMPI_SINT))==CMPI_UINT )
411 kavita.gupta   1.27         {
412 venkat.puvvada 1.28             switch( type )
413 kavita.gupta   1.27             {
414                                     case CMPI_uint32:
415                                         v.set((Uint32)data->uint32);
416                                         break;
417                         
418                                     case CMPI_uint16:
419                                         v.set((Uint16)data->uint16);
420                                         break;
421                         
422                                     case CMPI_uint8:
423                                         v.set((Uint8)data->uint8);
424                                         break;
425                         
426                                     case CMPI_uint64:
427                                         v.set((Uint64)data->uint64);
428                                         break;
429 schuur         1.1      
430 venkat.puvvada 1.28                 default: ;
431                                 }
432                             }
433 kavita.gupta   1.27     
434                             //Checks for remaining Encapsulated and non-encapsulated types
435 venkat.puvvada 1.28         else
436                                 switch( type )
437                                 {
438                                     case CMPI_instance:
439                                         if( data->inst && data->inst->hdl )
440                                         {
441 r.kieninger    1.35.4.4                     SCMOInstance* scmoInst = (SCMOInstance*)data->inst->hdl;
442                                             CIMInstance inst;
443                                             scmoInst->getCIMInstance(inst);
444 r.kieninger    1.35.4.6                     CIMObject obj(inst);
445                                             v.set(obj);
446 venkat.puvvada 1.28                     }
447                                         else
448                                         {
449                                             return CIMValue(CIMTYPE_OBJECT, false);
450 kumpf          1.35                     }
451 venkat.puvvada 1.28                     break;
452                         
453 kumpf          1.35                 case CMPI_ref:
454 venkat.puvvada 1.28                     if( data->ref && data->ref->hdl )
455                                         {
456 r.kieninger    1.35.4.4                     SCMOInstance* scmoInst = (SCMOInstance*)data->ref->hdl;
457                                             CIMObjectPath ref;
458                                             scmoInst->getCIMObjectPath(ref);
459                                             v.set(ref);
460 venkat.puvvada 1.28                     }
461                                         else
462                                         {
463                                             return CIMValue(CIMTYPE_REFERENCE, false);
464                                         }
465                                         break;
466 kumpf          1.35                 case CMPI_dateTime:
467 venkat.puvvada 1.28                     if( data->dateTime && data->dateTime->hdl )
468                                         {
469 kumpf          1.35                         v.set(*((CIMDateTime*)data->dateTime->hdl));
470 venkat.puvvada 1.28                     }
471                                         else
472                                         {
473                                             return CIMValue(CIMTYPE_DATETIME, false);
474                                         }
475                                         break;
476 kavita.gupta   1.27     
477 venkat.puvvada 1.28                 case CMPI_boolean:
478                                         v.set((Boolean&)data->boolean);
479                                         break;
480 kavita.gupta   1.27     
481 venkat.puvvada 1.28                 case CMPI_char16:
482                                         v.set((Char16)data->char16);
483                                         break;
484 kavita.gupta   1.27     
485 venkat.puvvada 1.28                 case CMPI_real32:
486                                         v.set((Real32)data->real32);
487                                         break;
488 kavita.gupta   1.27     
489 venkat.puvvada 1.28                 case CMPI_real64:
490                                         v.set((Real64)data->real64);
491                                         break;
492 kavita.gupta   1.27     
493 venkat.puvvada 1.28                 default:
494                                         if( rc )
495                                         {
496                                             *rc=CMPI_RC_ERR_NOT_SUPPORTED;
497                                         }
498                                 }
499                             return CIMValue(v);
500 schuur         1.1      }
501                         
502 kavita.gupta   1.27     //Function to convert CIMValue to CMPIData
503                         CMPIrc value2CMPIData(const CIMValue& v, CMPIType t, CMPIData *data)
504                         {
505                             //Initialize CMPIData object
506 venkat.puvvada 1.28         data->type=t;
507                             data->state=0;
508                             data->value.uint64=0;
509 schuur         1.11     
510 kavita.gupta   1.27         //Check for NULL CIMValue
511 venkat.puvvada 1.28         if( v.isNull() )
512 kavita.gupta   1.27         {
513 venkat.puvvada 1.28             data->state=CMPI_nullValue;
514                                 return CMPI_RC_OK;
515                             }
516 schuur         1.1      
517 kavita.gupta   1.27         //Start of CMPIArray processing
518 venkat.puvvada 1.28         if( t & CMPI_ARRAY )
519 kavita.gupta   1.27         {
520                                 //Get the size of the array
521 venkat.puvvada 1.28             int aSize=v.getArraySize();
522 kavita.gupta   1.27     
523                                 //Get the type of the element of the CMPIArray
524 venkat.puvvada 1.28             CMPIType aType=t&~CMPI_ARRAY;
525                                 CMPIData *aData=new CMPIData[aSize+1];
526                                 aData->type=aType;
527                                 aData->value.sint32=aSize;
528 schuur         1.11     
529 kavita.gupta   1.27             //Set the type and state for all array elements
530 venkat.puvvada 1.28             for( int i=1; i<aSize+1; i++ )
531 kavita.gupta   1.27             {
532 venkat.puvvada 1.28                 aData[i].type=aType;
533                                     aData[i].state=0;
534                                 }
535                                 aData++;
536 schuur         1.1      
537 kavita.gupta   1.27             //Check for Signed Integers
538 venkat.puvvada 1.28             if( (aType & (CMPI_UINT|CMPI_SINT))==CMPI_SINT )
539 kavita.gupta   1.27             {
540 venkat.puvvada 1.28                 switch( aType )
541 kavita.gupta   1.27                 {
542                                         case CMPI_sint32:
543                                             CopyFromArray(Sint32,sint32);
544                                             break;
545                         
546                                         case CMPI_sint16:
547                                             CopyFromArray(Sint16,sint16);
548                                             break;
549                         
550                                         case CMPI_sint8:
551                                             CopyFromArray(Sint8,sint8);
552                                             break;
553                         
554                                         case CMPI_sint64:
555                                             CopyFromArray(Sint64,sint64);
556                                             break;
557                         
558 venkat.puvvada 1.28                     default: ;
559                                     }
560                                 }
561 kavita.gupta   1.27             //Check for CMPI_string data type
562 venkat.puvvada 1.28             else
563                                 if( aType == CMPI_string )
564 kavita.gupta   1.27             {
565                                     CopyFromStringArray(String,string)
566                                 }
567                         
568                                 // Check for Unsigned Integers
569 venkat.puvvada 1.28             else
570                                 if( (aType & (CMPI_UINT|CMPI_SINT))==CMPI_UINT )
571 kavita.gupta   1.27             {
572 venkat.puvvada 1.28                 switch( aType )
573 kavita.gupta   1.27                 {
574                                         case CMPI_uint32:
575                                             CopyFromArray(Uint32,uint32);
576                                             break;
577                         
578                                         case CMPI_uint16:
579                                             CopyFromArray(Uint16,uint16);
580                                             break;
581                         
582                                         case CMPI_uint8:
583                                             CopyFromArray(Uint8,uint8);
584                                             break;
585                         
586                                         case CMPI_uint64:
587                                             CopyFromArray(Uint64,uint64);
588                                             break;
589                         
590 venkat.puvvada 1.28                     default: ;
591                                     }
592                                 }
593                                 else
594                                     switch( aType )
595                                     {
596                                         case CMPI_ref:
597 marek          1.35.4.8                     {
598                                                 Array<CIMObjectPath> arRef;
599                                                 v.get(arRef);
600                                                 for (int i=0; i<aSize; i++)
601                                                 {
602                                                     SCMOInstance* scmoRef =
603 r.kieninger    1.35.4.5                                 CMPISCMOUtilities::
604 marek          1.35.4.8                                 getSCMOFromCIMObjectPath(arRef[i]);
605 r.kieninger    1.35.4.5                             aData[i].value.ref=
606                                                         reinterpret_cast<CMPIObjectPath*>(
607 r.kieninger    1.35.4.7                                     new CMPI_Object(
608                                                                 scmoRef,
609 marek          1.35.4.8                                         CMPI_Object::ObjectTypeObjectPath));
610                                                 }
611 r.kieninger    1.35.4.5                     }
612 venkat.puvvada 1.28                         break;
613 kavita.gupta   1.27     
614 venkat.puvvada 1.28                     case CMPI_dateTime:
615                                             CopyFromEncArray(CIMDateTime,CMPIDateTime,dateTime);
616                                             break;
617 r.kieninger    1.35.4.5 
618 venkat.puvvada 1.28                     case CMPI_instance:
619 venkat.puvvada 1.30                         if (v.getType() == CIMTYPE_OBJECT)
620                                             {
621                                                 Array<CIMObject> tmpObjs;
622                                                 v.get(tmpObjs);
623                                                 for (int i = 0; i < aSize ; ++i)
624                                                 {
625 r.kieninger    1.35.4.5                             CIMInstance inst = CIMInstance(tmpObjs[i]);
626 marek          1.35.4.8                             SCMOInstance* scmoInst =
627 r.kieninger    1.35.4.5                                 CMPISCMOUtilities::getSCMOFromCIMInstance(inst);
628 marek          1.35.4.8                             aData[i].value.inst =
629 r.kieninger    1.35.4.5                                 reinterpret_cast<CMPIInstance*>(
630 r.kieninger    1.35.4.7                                     new CMPI_Object(
631                                                                 scmoInst,
632                                                                 CMPI_Object::ObjectTypeInstance));
633 kumpf          1.35                             }
634 venkat.puvvada 1.30                         }
635                                             else
636                                             {
637 r.kieninger    1.35.4.5                         Array<CIMInstance> arInst;
638                                                 v.get(arInst);
639                                                 for (int i = 0; i < aSize ; ++i)
640                                                 {
641 marek          1.35.4.8                             SCMOInstance* scmoInst =
642 r.kieninger    1.35.4.5                                 CMPISCMOUtilities::
643                                                         getSCMOFromCIMInstance(arInst[i]);
644 marek          1.35.4.8                             aData[i].value.inst =
645 r.kieninger    1.35.4.7                                 reinterpret_cast<CMPIInstance*>
646                                                         (new CMPI_Object(
647 marek          1.35.4.8                                     scmoInst,
648 r.kieninger    1.35.4.7                                     CMPI_Object::ObjectTypeInstance));
649 r.kieninger    1.35.4.5                         }
650 venkat.puvvada 1.30                         }
651 venkat.puvvada 1.28                         break;
652                                         case CMPI_boolean:
653                                             CopyFromArray(Boolean,boolean);
654                                             break;
655 kavita.gupta   1.27     
656 venkat.puvvada 1.28                     case CMPI_char16:
657                                             CopyFromArray(Char16,char16);
658                                             break;
659 kavita.gupta   1.27     
660 venkat.puvvada 1.28                     case CMPI_real32:
661                                             CopyFromArray(Real32,real32);
662                                             break;
663 kavita.gupta   1.27     
664 venkat.puvvada 1.28                     case CMPI_real64:
665                                             CopyFromArray(Real64,real64);
666                                             break;
667 kavita.gupta   1.27     
668 venkat.puvvada 1.28                     default:
669                                             // Not supported for this CMPItype
670                                             delete [] aData;
671                                             return CMPI_RC_ERR_NOT_SUPPORTED;
672                                     }
673 kavita.gupta   1.27             data->value.array = reinterpret_cast<CMPIArray*>(
674 thilo.boehm    1.35.4.1         new CMPI_Object(new CMPI_Array(aData-1)));
675 venkat.puvvada 1.28         }  // end of array porocessing
676 schuur         1.1      
677 kavita.gupta   1.27         //Start of non-array processing
678                             //Ckecking for Signed integers
679 kumpf          1.35         else
680 venkat.puvvada 1.28         if( (t & (CMPI_UINT|CMPI_SINT)) == CMPI_SINT )
681 kavita.gupta   1.27         {
682 venkat.puvvada 1.28             switch( t )
683 kavita.gupta   1.27             {
684                                     case CMPI_sint32:
685                                         v.get((Sint32&)data->value.sint32);
686                                         break;
687                         
688                                     case CMPI_sint16:
689                                         v.get((Sint16&)data->value.sint16);
690                                         break;
691                         
692                                     case CMPI_sint8:
693                                         v.get((Sint8&)data->value.sint8);
694                                         break;
695                         
696                                     case CMPI_sint64:
697                                         v.get((Sint64&)data->value.sint64);
698                                         break;
699                         
700 venkat.puvvada 1.28                 default: ;
701                                 }
702                             }
703 schuur         1.1      
704 kavita.gupta   1.27         //Check for CMPI_string data type
705 kumpf          1.35         else
706 venkat.puvvada 1.28         if( t == CMPI_string )
707 kavita.gupta   1.27         {
708 venkat.puvvada 1.28             String str;
709                                 v.get(str);
710                                 data->value.string=string2CMPIString(str);
711                             }
712 schuur         1.1      
713 kavita.gupta   1.27         //Check for Unsigned Integers
714 venkat.puvvada 1.28         else
715                             if( (t & (CMPI_UINT|CMPI_SINT)) == CMPI_UINT )
716 kavita.gupta   1.27         {
717 venkat.puvvada 1.28             switch( t )
718 kavita.gupta   1.27             {
719                                     case CMPI_uint32:
720                                         v.get((Uint32&)data->value.uint32);
721                                         break;
722                         
723                                     case CMPI_uint16:
724                                         v.get((Uint16&)data->value.uint16);
725                                         break;
726                         
727                                     case CMPI_uint8:
728                                         v.get((Uint8&)data->value.uint8);
729                                         break;
730                         
731                                     case CMPI_uint64:
732                                         v.get((Uint64&)data->value.uint64);
733                                         break;
734                         
735 venkat.puvvada 1.28                 default: ;
736                                 }
737                             }
738 schuur         1.1      
739 r.kieninger    1.35.4.4     //Checking for remaining encapsulated and simple types
740 venkat.puvvada 1.28         else
741                                 switch( t )
742 kavita.gupta   1.27             {
743 venkat.puvvada 1.28                 case CMPI_ref:
744                                         {
745                                             CIMObjectPath ref;
746                                             v.get(ref);
747 marek          1.35.4.8                     SCMOInstance* scmoRef =
748 r.kieninger    1.35.4.4                        CMPISCMOUtilities:: getSCMOFromCIMObjectPath(ref);
749 venkat.puvvada 1.28                         data->value.ref = reinterpret_cast<CMPIObjectPath*>(
750 r.kieninger    1.35.4.7                     new CMPI_Object(scmoRef,CMPI_Object::ObjectTypeObjectPath));
751 venkat.puvvada 1.28                     }
752                                         break;
753 kavita.gupta   1.27     
754 venkat.puvvada 1.28                 case CMPI_instance:
755                                         {
756                                             CIMInstance inst;
757                                             if( v.getType() == CIMTYPE_OBJECT )
758                                             {
759                                                 CIMObject tmpObj;
760                                                 v.get(tmpObj);
761                                                 inst = CIMInstance(tmpObj);
762                                             }
763                                             else
764                                             {
765                                                 v.get(inst);
766                                             }
767 marek          1.35.4.8                     SCMOInstance* scmoInst =
768 r.kieninger    1.35.4.4                         CMPISCMOUtilities::getSCMOFromCIMInstance(inst);
769 venkat.puvvada 1.28                         data->value.inst = reinterpret_cast<CMPIInstance*>(
770 r.kieninger    1.35.4.7                     new CMPI_Object(scmoInst, CMPI_Object::ObjectTypeInstance));
771 venkat.puvvada 1.28                     }
772                                         break;
773 kavita.gupta   1.27     
774 venkat.puvvada 1.28                 case CMPI_dateTime:
775                                         {
776                                             CIMDateTime dt;
777                                             v.get(dt);
778                                             data->value.dateTime = reinterpret_cast<CMPIDateTime*>(
779                                             new CMPI_Object(new CIMDateTime(dt)));
780                                         }
781                                         break;
782 kavita.gupta   1.27     
783 venkat.puvvada 1.28                 case CMPI_boolean:
784                                         v.get((Boolean&)data->value.boolean);
785                                         break;
786 kavita.gupta   1.27     
787 venkat.puvvada 1.28                 case CMPI_char16:
788                                         v.get((Char16&)data->value.char16);
789                                         break;
790 kavita.gupta   1.27     
791 venkat.puvvada 1.28                 case CMPI_real32:
792                                         v.get((Real32&)data->value.real32);
793                                         break;
794 kavita.gupta   1.27     
795 venkat.puvvada 1.28                 case CMPI_real64:
796                                         v.get((Real64&)data->value.real64);
797                                         break;
798 kavita.gupta   1.27     
799 venkat.puvvada 1.28                 default:
800                                         return CMPI_RC_ERR_NOT_SUPPORTED;
801                                 }
802                             return CMPI_RC_OK;
803 schuur         1.1      }
804                         
805 kavita.gupta   1.27     //Function to convert CIMType to CMPIType
806                         CMPIType type2CMPIType(CIMType pt, int array)
807                         {
808                             static CMPIType types[] =
809                             {
810 schuur         1.1              CMPI_boolean,    // BOOLEAN,
811                                 CMPI_uint8,      // UINT8,
812                                 CMPI_sint8,      // SINT8,
813                                 CMPI_uint16,     // UINT16,
814                                 CMPI_sint16,     // SINT16,
815                                 CMPI_uint32,     // UINT32,
816                                 CMPI_sint32,     // SINT32,
817                                 CMPI_uint64,     // UINT64,
818                                 CMPI_sint64,     // SINT64,
819                                 CMPI_real32,     // REAL32,
820                                 CMPI_real64,     // REAL64,
821                                 CMPI_char16,     // CHAR16,
822                                 CMPI_string,     // STRING,
823                                 CMPI_dateTime,   // DATETIME,
824                                 CMPI_ref,        // REFERENCE
825 s.kodali       1.32             CMPI_instance,    // Embedded Object
826                                 CMPI_instance  // Embedded Instance
827 schuur         1.1          };
828                             int t=types[pt];
829 venkat.puvvada 1.28         if( array )
830 kavita.gupta   1.27         {
831                                 t|=CMPI_ARRAY;
832                             }
833 venkat.puvvada 1.28         return(CMPIType)t;
834 schuur         1.1      }
835                         
836                         PEGASUS_NAMESPACE_END
837                         

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2