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

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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2