(file) Return to CIMValue.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2