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

   1 thilo.boehm 1.1.2.1 //%LICENSE////////////////////////////////////////////////////////////////
   2                     //
   3                     // Licensed to The Open Group (TOG) under one or more contributor license
   4                     // agreements.  Refer to the OpenPegasusNOTICE.txt file distributed with
   5                     // this work for additional information regarding copyright ownership.
   6                     // Each contributor licenses this file to you under the OpenPegasus Open
   7                     // Source License; you may not use this file except in compliance with the
   8                     // License.
   9                     //
  10                     // Permission is hereby granted, free of charge, to any person obtaining a
  11                     // copy of this software and associated documentation files (the "Software"),
  12                     // to deal in the Software without restriction, including without limitation
  13                     // the rights to use, copy, modify, merge, publish, distribute, sublicense,
  14                     // and/or sell copies of the Software, and to permit persons to whom the
  15                     // Software is furnished to do so, subject to the following conditions:
  16                     //
  17                     // The above copyright notice and this permission notice shall be included
  18                     // in all copies or substantial portions of the Software.
  19                     //
  20                     // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  21                     // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  22 thilo.boehm 1.1.2.1 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  23                     // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
  24                     // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  25                     // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  26                     // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  27                     //
  28                     //////////////////////////////////////////////////////////////////////////
  29                     //
  30                     //%/////////////////////////////////////////////////////////////////////////////
  31                     
  32                     #ifndef _SCMOINSTANCE_H_
  33                     #define _SCMOINSTANCE_H_
  34                     
  35                     
  36                     #include <Pegasus/Common/Config.h>
  37                     #include <Pegasus/Common/Linkage.h>
  38                     #include <Pegasus/Common/SCMO.h>
  39 thilo.boehm 1.1.2.2 #include <Pegasus/Common/SCMOClass.h>
  40 r.kieninger 1.1.2.10 #include <Pegasus/Common/Union.h>
  41 thilo.boehm 1.1.2.1  
  42                      PEGASUS_NAMESPACE_BEGIN
  43                      
  44                      #define PEGASUS_SCMB_INSTANCE_MAGIC 0xD00D1234
  45                      
  46                      class PEGASUS_COMMON_LINKAGE SCMOInstance
  47                      {
  48                      public:
  49                      
  50                          /**
  51 thilo.boehm 1.1.2.19      * A SCMOInstance can only be created by a SCMOClass
  52                           */
  53                          SCMOInstance();
  54                      
  55                          /**
  56 thilo.boehm 1.1.2.1       * Creating a SCMOInstance using a SCMOClass.
  57                           * @param baseClass A SCMOClass.
  58                           */
  59 thilo.boehm 1.1.2.32     SCMOInstance(SCMOClass& baseClass);
  60                      
  61                      
  62                          /**
  63                           * Creating a SCMOInstance using a CIMClass
  64                           * using an optional name space name,
  65                           * @param baseClass A SCMOClass.
  66                           * @param nameSpaceName An optional name space name.
  67                           */
  68                          SCMOInstance(CIMClass& theCIMClass, const char* nameSpaceName=0);
  69 thilo.boehm 1.1.2.1  
  70                          /**
  71                           * Copy constructor for the SCMO instance, used to implement refcounting.
  72                           * @param theSCMOClass The instance for which to create a copy
  73                           * @return
  74                           */
  75                          SCMOInstance(const SCMOInstance& theSCMOInstance )
  76                          {
  77                              inst.hdr = theSCMOInstance.inst.hdr;
  78                              Ref();
  79                          }
  80                      
  81                          /**
  82 thilo.boehm 1.1.2.35      * Constructs a SCMOInstance from a memory object of type SCMBInstance_Main.
  83                           * It incremets the referece counter of the memory object.
  84                           * @param hdr A memory object of type SCMBInstance_Main.
  85                           **/
  86                          SCMOInstance(SCMBInstance_Main* hdr)
  87                          {
  88                              inst.hdr = hdr;
  89                              Ref();
  90                          }
  91                      
  92                      
  93                          /**
  94 thilo.boehm 1.1.2.33      * Assignment operator for the SCMO instance,
  95 thilo.boehm 1.1.2.39      * @param theSCMOInstance The right hand value
  96 thilo.boehm 1.1.2.33      **/
  97                          SCMOInstance& operator=(const SCMOInstance& theSCMOInstance)
  98                          {
  99                              if (inst.hdr != theSCMOInstance.inst.hdr)
 100                              {
 101                                  Unref();
 102                                  inst.hdr = theSCMOInstance.inst.hdr;
 103                                  Ref();
 104                              }
 105                              return *this;
 106                          }
 107                      
 108                          /**
 109 thilo.boehm 1.1.2.1       * Destructor is decrementing the refcount. If refcount is zero, the
 110                           * singele chunk memory object is deallocated.
 111                           */
 112                          ~SCMOInstance()
 113                          {
 114                              Unref();
 115                          }
 116                      
 117                          /**
 118                           * Builds a SCMOInstance based on this SCMOClass.
 119                           * The method arguments determine whether qualifiers are included,
 120                           * the class origin attributes are included,
 121                           * and which properties are included in the new instance.
 122                           * @param baseClass The SCMOClass of this instance.
 123                           * @param includeQualifiers A Boolean indicating whether qualifiers in
 124                           * the class definition (and its properties) are to be added to the
 125                           * instance.  The TOINSTANCE flavor is ignored.
 126                           * @param includeClassOrigin A Boolean indicating whether ClassOrigin
 127                           * attributes are to be added to the instance.
 128                           * @param propertyList Is an NULL terminated array of char* to property
 129                           * names defining the properties that are included in the created instance.
 130 thilo.boehm 1.1.2.1       * If the propertyList is NULL, all properties are included to the instance.
 131                           * If the propertyList is empty, no properties are added.
 132                           *
 133                           * Note that this function does NOT generate an error if a property name
 134                           * is supplied that is NOT in the class;
 135                           * it simply does not add that property to the instance.
 136                           *
 137                           */
 138                          SCMOInstance(
 139 thilo.boehm 1.1.2.32         SCMOClass& baseClass,
 140 thilo.boehm 1.1.2.1          Boolean includeQualifiers,
 141                              Boolean includeClassOrigin,
 142                              const char** propertyList);
 143                      
 144                          /**
 145                           * Builds a SCMOInstance from the given SCMOClass and copies all
 146                           * CIMInstance data into the new SCMOInstance.
 147                           * @param baseClass The SCMOClass of this instance.
 148                           * @param cimInstance A CIMInstace of the same class.
 149 thilo.boehm 1.1.2.32      * @exception Exception if class name does not match.
 150 thilo.boehm 1.1.2.4       * @exception Exception if a property is not part of class definition.
 151                           * @exception Exception if a property does not match the class definition.
 152 thilo.boehm 1.1.2.1       */
 153 thilo.boehm 1.1.2.32     SCMOInstance(SCMOClass& baseClass, const CIMInstance& cimInstance);
 154 thilo.boehm 1.1.2.1  
 155                          /**
 156 thilo.boehm 1.1.2.4       * Builds a SCMOInstance from the given SCMOClass and copies all
 157                           * CIMObjectPath data into the new SCMOInstance.
 158                           * @param baseClass The SCMOClass of this instance.
 159                           * @param cimInstance A CIMObjectpath of the same class.
 160 thilo.boehm 1.1.2.32      * @exception Exception if class name does not match.
 161                           */
 162                          SCMOInstance(SCMOClass& baseClass, const CIMObjectPath& cimObj);
 163                      
 164                          /**
 165                           * Builds a SCMOInstance from the given CIMInstance copying all data.
 166                           * The SCMOClass is retrieved from SCMOClassCache using
 167                           * the class and name space of the CIMInstance.
 168                           * If the SCMOClass was not found, an empty SCMOInstance will be returned
 169                           * and the resulting SCMOInstance is compromized.
 170                           * If the CIMInstance does not contain a name space, the optional fall back
 171                           * name space is used.
 172                           * @param cimInstance A CIMInstace with class name and name space.
 173                           * @param altNameSpace An alternative name space name.
 174                           * @exception Exception if a property is not part of class definition.
 175                           * @exception Exception if a property does not match the class definition.
 176 thilo.boehm 1.1.2.4       */
 177 thilo.boehm 1.1.2.32     SCMOInstance(
 178                              const CIMInstance& cimInstance,
 179                              const char* altNameSpace=0,
 180                              Uint64 altNSLen=0);
 181                      
 182                          /**
 183                           * Builds a SCMOInstance from the given CIMObjectPath copying all data.
 184                           * The SCMOClass is retrieved from SCMOClassCache using
 185                           * the class and name space of the CIMObjectPath.
 186                           * If the SCMOClass was not found, an empty SCMOInstance will be returned
 187                           * and the resulting SCMOInstance is compromized.
 188                           * If the CIMObjectPath does not contain a name space,
 189                           * the optional fall back name space is used.
 190                           * @param cimObj A CIMObjectpath with name space and name
 191                           * @param altNameSpace An alternative name space name.
 192                           * @
 193                           */
 194                          SCMOInstance(
 195                              const CIMObjectPath& cimObj,
 196                              const char* altNameSpace=0,
 197                              Uint64 altNSLen=0);
 198 thilo.boehm 1.1.2.32 
 199                          /**
 200                           * Builds a SCMOInstance from the given CIMObject copying all data.
 201                           * The SCMOClass is retrieved from SCMOClassCache using
 202                           * the class and name space of the CIMObject.
 203                           * If the SCMOClass was not found, an empty SCMOInstance will be returned
 204                           * and the resulting SCMOInstance is compromized.
 205                           * If the CIMInstance does not contain a name space, the optional fall back
 206                           * name space is used.
 207                           * @param cimInstance A CIMInstace with class name and name space.
 208                           * @param altNameSpace An alternative name space name.
 209                           * @exception Exception if a property is not part of class definition.
 210                           * @exception Exception if a property does not match the class definition.
 211                           */
 212                          SCMOInstance(
 213                              const CIMObject& cimObject,
 214                              const char* altNameSpace=0,
 215                              Uint64 altNSLen=0);
 216 thilo.boehm 1.1.2.4  
 217                          /**
 218 thilo.boehm 1.1.2.1       * Converts the SCMOInstance into a CIMInstance.
 219                           * It is a deep copy of the SCMOInstance into the CIMInstance.
 220                           * @param cimInstance An empty CIMInstance.
 221                           */
 222 thilo.boehm 1.1.2.6      SCMO_RC getCIMInstance(CIMInstance& cimInstance) const;
 223 thilo.boehm 1.1.2.1  
 224                          /**
 225                           * Makes a deep copy of the instance.
 226                           * This creates a new copy of the instance.
 227 thilo.boehm 1.1.2.5       * @param objectPathOnly If set to true, only the object path relevant parts
 228                           *     host name and key bindings are part of the cloned instance.
 229 thilo.boehm 1.1.2.1       * @return A new copy of the SCMOInstance object.
 230                           */
 231 thilo.boehm 1.1.2.5      SCMOInstance clone(Boolean objectPathOnly = false) const;
 232 thilo.boehm 1.1.2.1  
 233                          /**
 234 r.kieninger 1.1.2.9       * Retrieves the objectpath part of the SCMOInstance as an instance
 235                           * of class CIMObjectPath.                .
 236                           * @param cimObj Reference to an instantiated CIMObjectPath to be
 237                           *     populated with the data from the SCMOInstance.
 238                           * @return void
 239                           */
 240                          void getCIMObjectPath(CIMObjectPath& cimObj) const;
 241                      
 242                          /**
 243 thilo.boehm 1.1.2.1       * Returns the number of properties of the instance.
 244                           * @param Number of properties
 245                           */
 246                          Uint32 getPropertyCount() const;
 247                      
 248                          /**
 249                           * Gets the property name, type, and value addressed by a positional index.
 250                           * The property name and value has to be copied by the caller !
 251                           * @param pos The positional index of the property
 252                           * @param pname Returns the property name as '\0' terminated string.
 253                           *              Has to be copied by caller.
 254                           *              It is set to NULL if rc != SCMO_OK.
 255                           * @param pvalue Returns a pointer to the value of property.
 256 thilo.boehm 1.1.2.39      *               The value is stored in a SCMBUnion
 257 thilo.boehm 1.1.2.13      *                and has to be copied by the caller !
 258 thilo.boehm 1.1.2.1       *               It returns NULL if rc != SCMO_OK.
 259 thilo.boehm 1.1.2.24      *
 260 thilo.boehm 1.1.2.1       *               If the value is an array, the
 261                           *               value array is stored in continuous memory.
 262 thilo.boehm 1.1.2.13      *               e.g. (SCMBUnion*)value[0 to size-1]
 263 thilo.boehm 1.1.2.24      *
 264                           *               If the value is type of CIMTYPE_STRING,
 265                           *               the string is referenced by the structure
 266                           *               SCMBUnion.extString:
 267                           *                       pchar contains the absolut pointer to the string
 268                           *                       length contains the size of the string
 269 thilo.boehm 1.1.2.13      *                              without trailing '\0'.
 270                           *               Only for strings the caller has to free pvalue !
 271 thilo.boehm 1.1.2.1       * @param type Returns the CIMType of the property
 272                           *             It is invalid if rc == SCMO_INDEX_OUT_OF_BOUND.
 273                           * @param isArray Returns if the value is an array.
 274                           *             It is invalid if rc == SCMO_INDEX_OUT_OF_BOUND.
 275                           * @param size Returns the size of the array.
 276                           *             If it is not an array, 0 is returned.
 277                           *             It is invalid if rc == SCMO_INDEX_OUT_OF_BOUND.
 278                           *
 279                           * @return     SCMO_OK
 280                           *             SCMO_NULL_VALUE : The value is a null value.
 281                           *             SCMO_INDEX_OUT_OF_BOUND : Given index not found
 282                           *
 283                           */
 284                          SCMO_RC getPropertyAt(
 285                              Uint32 pos,
 286                              const char** pname,
 287                              CIMType& type,
 288 thilo.boehm 1.1.2.13         const SCMBUnion** pvalue,
 289 thilo.boehm 1.1.2.1          Boolean& isArray,
 290                              Uint32& size ) const;
 291                      
 292 r.kieninger 1.1.2.41     void getSCMBValuePropertyAt(
 293                              Uint32 pos,
 294                              SCMBValue** value,
 295                              const char ** valueBase,
 296                              SCMBClassProperty ** propDef,
 297                              const char ** classBase) const;
 298                      
 299 thilo.boehm 1.1.2.1      /**
 300                           * Gets the type and value of the named property.
 301                           * The value has to be copied by the caller !
 302                           * @param name The property name
 303                           * @param pvalue Returns a pointer to the value of property.
 304 thilo.boehm 1.1.2.39      *               The value is stored in a SCMBUnion
 305 thilo.boehm 1.1.2.13      *                and has to be copied by the caller !
 306 thilo.boehm 1.1.2.1       *               It returns NULL if rc != SCMO_OK.
 307 thilo.boehm 1.1.2.24      *
 308 thilo.boehm 1.1.2.1       *               If the value is an array, the
 309                           *               value array is stored in continuous memory.
 310 thilo.boehm 1.1.2.13      *               e.g. (SCMBUnion*)value[0 to size-1]
 311 thilo.boehm 1.1.2.24      *
 312                           *               If the value is type of CIMTYPE_STRING,
 313                           *               the string is referenced by the structure
 314                           *               SCMBUnion.extString:
 315                           *                       pchar contains the absolut pointer to the string
 316                           *                       length contains the size of the string
 317 thilo.boehm 1.1.2.13      *                              without trailing '\0'.
 318                           *               Only for strings the caller has to free pvalue !
 319 thilo.boehm 1.1.2.1       * @param type Returns the CIMType of the property
 320                           *             It is invalid if rc == SCMO_NOT_FOUND.
 321                           * @param isArray Returns if the value is an array.
 322                           *             It is invalid if rc == SCMO_NOT_FOUND.
 323                           * @param size Returns the size of the array.
 324                           *             If it is not an array, 0 is returned.
 325                           *             It is invalid if rc == SCMO_NOT_FOUND.
 326                           *
 327                           * @return     SCMO_OK
 328                           *             SCMO_NULL_VALUE : The value is a null value.
 329                           *             SCMO_NOT_FOUND : Given property name not found.
 330                           */
 331                          SCMO_RC getProperty(
 332                              const char* name,
 333                              CIMType& type,
 334 thilo.boehm 1.1.2.13         const SCMBUnion** pvalue,
 335 thilo.boehm 1.1.2.1          Boolean& isArray,
 336                              Uint32& size ) const;
 337                      
 338                          /**
 339                           * Set/replace a property in the instance.
 340                           * If the class origin is specified, it is honored at identifying
 341                           * the property within the instance.
 342                           * Note: Only properties which are already part of the instance/class can
 343                           * be set/replaced.
 344                           * @param name The name of the property to be set.
 345                           * @param type The CIMType of the property
 346 thilo.boehm 1.1.2.13      * @param value A pointer to the value to be set at the named property.
 347                           *              The value has to be in a SCMBUnion.
 348                           *              The value is copied into the instance
 349                           *              If the value == NULL, a null value is assumed.
 350 thilo.boehm 1.1.2.24      *              If the value is an array, the value array has to be
 351 thilo.boehm 1.1.2.13      *              stored in continuous memory.
 352                           *              e.g. (SCMBUnion*)value[0 to size-1]
 353 thilo.boehm 1.1.2.24      *
 354                           *              To store an array of size 0, The value pointer has to
 355 thilo.boehm 1.1.2.13      *              not NULL ( value != NULL ) but the size has to be 0
 356                           *              (size == 0).
 357 thilo.boehm 1.1.2.24      *
 358                           *              If the value is type of CIMTYPE_STRING,
 359                           *              the string is referenced by the structure
 360                           *              SCMBUnion.extString:
 361                           *                       pchar contains the absolut pointer to the string
 362                           *                       length contains the size of the string
 363 thilo.boehm 1.1.2.13      *                              without trailing '\0'.
 364 thilo.boehm 1.1.2.1       * @param isArray Indicate that the value is an array. Default false.
 365                           * @param size Returns the size of the array. If not an array this
 366                           *         this parameter is ignorer. Default 0.
 367                           * @param origin The class originality of the property.
 368                           *               If NULL, then it is ignorred. Default NULL.
 369                           * @return     SCMO_OK
 370                           *             SCMO_NOT_SAME_ORIGIN : The property name was found, but
 371                           *                                    the origin was not the same.
 372                           *             SCMO_NOT_FOUND : Given property name not found.
 373                           *             SCMO_WRONG_TYPE : Named property has the wrong type.
 374                           *             SCMO_NOT_AN_ARRAY : Named property is not an array.
 375                           *             SCMO_IS_AN_ARRAY  : Named property is an array.
 376                           */
 377                          SCMO_RC setPropertyWithOrigin(
 378                              const char* name,
 379                              CIMType type,
 380 thilo.boehm 1.1.2.14         const SCMBUnion* value,
 381 thilo.boehm 1.1.2.1          Boolean isArray=false,
 382                              Uint32 size = 0,
 383                              const char* origin = NULL);
 384                      
 385                          /**
 386 thilo.boehm 1.1.2.3       * Rebuild of the key bindings from the property values
 387 thilo.boehm 1.1.2.1       * if no or incomplete key properties are set on the instance.
 388 thilo.boehm 1.1.2.3       * @exception NoSuchProperty
 389 thilo.boehm 1.1.2.1       */
 390 thilo.boehm 1.1.2.2      void buildKeyBindingsFromProperties();
 391 thilo.boehm 1.1.2.1  
 392                          /**
 393                           * Set/replace a property filter on an instance.
 394                           * The filter is a white list of property names.
 395                           * A property part of the list can be accessed by name or index and
 396                           * is eligible to be returned to requester.
 397                           * Key properties can not be filtered. They are always a part of the
 398                           * instance. If a key property is not part of the property list,
 399                           * it will not be filtered out.
 400                           * @param propertyList Is an NULL terminated array of char* to
 401                           * property names
 402                           */
 403                          void setPropertyFilter(const char **propertyList);
 404                      
 405                          /**
 406                           * Gets the hash index for the named property. Filtering is ignored.
 407                           * @param theName The property name
 408                           * @param pos Returns the hash index.
 409                           * @return     SCMO_OK
 410                           *             SCMO_INVALID_PARAMETER: name was a NULL pointer.
 411                           *             SCMO_NOT_FOUND : Given property name not found.
 412 thilo.boehm 1.1.2.1       */
 413                          SCMO_RC getPropertyNodeIndex(const char* name, Uint32& pos) const;
 414                      
 415                          /**
 416                           * Set/replace a property in the instance at node index.
 417 thilo.boehm 1.1.2.4       * Note: If node is filtered, the property is not set but the return value
 418 thilo.boehm 1.1.2.1       * is still SCMO_OK.
 419                           * @param index The node index.
 420                           * @param type The CIMType of the property
 421 thilo.boehm 1.1.2.13      * @param pInVal A pointer to the value to be set at the named property.
 422                           *               The value has to be in a SCMBUnion.
 423                           *               The value is copied into the instance
 424                           *               If the value == NULL, a null value is assumed.
 425 thilo.boehm 1.1.2.24      *               If the value is an array, the value array has to be
 426 thilo.boehm 1.1.2.13      *               stored in continuous memory.
 427                           *               e.g. (SCMBUnion*)value[0 to size-1]
 428 thilo.boehm 1.1.2.24      *
 429                           *              To store an array of size 0, The value pointer has to
 430 thilo.boehm 1.1.2.13      *               not NULL ( value != NULL ) but the size has to be 0
 431                           *                (size == 0).
 432 thilo.boehm 1.1.2.24      *
 433                           *               If the value is type of CIMTYPE_STRING,
 434                           *               the string is referenced by the structure
 435                           *               SCMBUnion.extString:
 436                           *                        pchar contains the absolut pointer to the string
 437                           *                       length contains the size of the string
 438 thilo.boehm 1.1.2.13      *                                without trailing '\0'.
 439 thilo.boehm 1.1.2.1       * @param isArray Indicate that the value is an array. Default false.
 440                           * @param size The size of the array. If not an array this
 441                           *         this parameter is ignorer. Default 0.
 442                           * @return     SCMO_OK
 443                           *             SCMO_INDEX_OUT_OF_BOUND : Given index not found
 444                           *             SCMO_WRONG_TYPE : The property at given node index
 445                           *                               has the wrong type.
 446                           *             SCMO_NOT_AN_ARRAY : The property at given node index
 447                           *                                 is not an array.
 448                           *             SCMO_IS_AN_ARRAY  : The property at given node index
 449                           *                                 is an array.
 450                           */
 451                          SCMO_RC setPropertyWithNodeIndex(
 452                              Uint32 node,
 453                              CIMType type,
 454 thilo.boehm 1.1.2.14         const SCMBUnion* pInVal,
 455 thilo.boehm 1.1.2.1          Boolean isArray=false,
 456                              Uint32 size = 0);
 457                      
 458                          /**
 459 r.kieninger 1.1.2.10      * Set/replace the named key binding using binary data
 460                           * @param name The key binding name.
 461                           * @param type The type as CIMType.
 462 thilo.boehm 1.1.2.12      * @param keyvalue A pointer to the binary key value.
 463 r.kieninger 1.1.2.10      *         The value is copied into the instance
 464                           *         If the value == NULL, a null value is assumed.
 465 thilo.boehm 1.1.2.13      * @param keyvalue A pointer to the value to be set at the key binding,
 466                           *               The keyvalue has to be in a SCMBUnion.
 467                           *               The keyvalue is copied into the instance.
 468                           *               If the keyvalue == NULL, a null value is assumed.
 469 thilo.boehm 1.1.2.24      *
 470                           *               If the keyvalue is type of CIMTYPE_STRING,
 471                           *               the string is referenced by the structure
 472                           *               SCMBUnion.extString:
 473                           *                        pchar contains the absolut pointer to the string
 474                           *                       length contains the size of the string
 475 thilo.boehm 1.1.2.13      *                                without trailing '\0'.
 476 r.kieninger 1.1.2.10      * @return     SCMO_OK
 477                           *             SCMO_INVALID_PARAMETER : Given name or pvalue
 478                           *                                      is a NULL pointer.
 479                           *             SCMO_TYPE_MISSMATCH : Given type does not
 480                           *                                   match to key binding type
 481                           *             SCMO_NOT_FOUND : Given property name not found.
 482                           */
 483                          SCMO_RC setKeyBinding(
 484                              const char* name,
 485                              CIMType type,
 486 thilo.boehm 1.1.2.14         const SCMBUnion* keyvalue);
 487 r.kieninger 1.1.2.10 
 488                          /**
 489                           * Set/replace the key binding at node
 490 thilo.boehm 1.1.2.7       * @param node The node index of the key.
 491 r.kieninger 1.1.2.10      * @param type The type as CIMType.
 492 thilo.boehm 1.1.2.13      * @param keyvalue A pointer to the value to be set at the key binding,
 493                           *               The keyvalue has to be in a SCMBUnion.
 494                           *               The keyvalue is copied into the instance.
 495                           *               If the keyvalue == NULL, a null value is assumed.
 496 thilo.boehm 1.1.2.24      *
 497                           *               If the keyvalue is type of CIMTYPE_STRING,
 498                           *               the string is referenced by the structure
 499                           *               SCMBUnion.extString:
 500                           *                        pchar contains the absolut pointer to the string
 501                           *                       length contains the size of the string
 502 thilo.boehm 1.1.2.13      *                                without trailing '\0'.
 503 r.kieninger 1.1.2.10      * @return     SCMO_OK
 504                           *             SCMO_INVALID_PARAMETER : Given pvalue is a NULL pointer.
 505                           *             SCMO_TYPE_MISSMATCH : Given type does not
 506                           *                                   match to key binding type
 507                           *             SCMO_INDEX_OUT_OF_BOUND : Given index is our of range.
 508                           */
 509                          SCMO_RC setKeyBindingAt(
 510                              Uint32 node,
 511                              CIMType type,
 512 thilo.boehm 1.1.2.14         const SCMBUnion* keyvalue);
 513 r.kieninger 1.1.2.10 
 514                          /**
 515 thilo.boehm 1.1.2.31      * Clears all key bindings in an instance.
 516                           * Warning: External references are freed but only the internal
 517                           * control structures are resetted. No memory is freed and at setting
 518                           * new key bindings the instance will grow in memory usage.
 519                           **/
 520                          void clearKeyBindings();
 521                      
 522                          /**
 523 thilo.boehm 1.1.2.1       * Gets the key binding count.
 524                           * @return the number of key bindings set.
 525                           */
 526 marek       1.1.2.11     Uint32 getKeyBindingCount() const;
 527 thilo.boehm 1.1.2.1  
 528                          /**
 529                           * Get the indexed key binding.
 530                           * @parm idx The key bining index
 531                           * @parm pname Returns the name.
 532                           *             Has to be copied by caller.
 533                           *             It is invalid if rc == SCMO_INDEX_OUT_OF_BOUND.
 534 thilo.boehm 1.1.2.12      * @param type Returns the type as CIMType.
 535 thilo.boehm 1.1.2.1       *             It is invalid if rc == SCMO_INDEX_OUT_OF_BOUND.
 536 thilo.boehm 1.1.2.12      * @param keyvalue A pointer to the binary key value.
 537 thilo.boehm 1.1.2.1       *             Has to be copied by caller.
 538                           *             It is only valid if rc == SCMO_OK.
 539                           * @return     SCMO_OK
 540                           *             SCMO_NULL_VALUE : The key binding is not set.
 541                           *             SCMO_INDEX_OUT_OF_BOUND : Given index not found
 542                           *
 543                           */
 544                          SCMO_RC getKeyBindingAt(
 545                              Uint32 idx,
 546                              const char** pname,
 547 thilo.boehm 1.1.2.12         CIMType& type,
 548 thilo.boehm 1.1.2.13         const SCMBUnion** keyvalue) const;
 549 thilo.boehm 1.1.2.1  
 550 r.kieninger 1.1.2.41     SCMO_RC getKeyBindingAtUnresolved(
 551                              Uint32 node,
 552                              const char** pname,
 553                              Uint32 & pnameLen,
 554                              CIMType& type,
 555                              const SCMBUnion** pdata,
 556                              const char** valueBase) const;
 557                      
 558 thilo.boehm 1.1.2.1      /**
 559                           * Get the named key binding.
 560                           * @parm name The name of the key binding.
 561 thilo.boehm 1.1.2.12      * @param type Returns the type as CIMType.
 562 thilo.boehm 1.1.2.1       *             It is invalid if rc == SCMO_INDEX_OUT_OF_BOUND.
 563 thilo.boehm 1.1.2.13      * @param keyvalue Returns a pointer to the value of keybinding.
 564 thilo.boehm 1.1.2.39      *               The value is stored in a SCMBUnion
 565 thilo.boehm 1.1.2.13      *                and has to be copied by the caller !
 566                           *               It returns NULL if rc != SCMO_OK.
 567 thilo.boehm 1.1.2.24      *
 568                           *               If the value is type of CIMTYPE_STRING,
 569                           *               the string is referenced by the structure
 570                           *               SCMBUnion.extString:
 571                           *                       pchar contains the absolut pointer to the string
 572                           *                       length contains the size of the string
 573 thilo.boehm 1.1.2.13      *                              without trailing '\0'.
 574                           *               Only for strings the caller has to free pvalue !
 575 thilo.boehm 1.1.2.12      * @param keyvalue A pointer to the binary key value.
 576 thilo.boehm 1.1.2.1       *             Has to be copied by caller.
 577                           *             It is only valid if rc == SCMO_OK.
 578                           * @return     SCMO_OK
 579                           *             SCMO_NULL_VALUE : The key binding is not set.
 580                           *             SCMO_NOT_FOUND : Given property name not found.
 581                           */
 582                          SCMO_RC getKeyBinding(
 583                              const char* name,
 584 thilo.boehm 1.1.2.12         CIMType& ptype,
 585 thilo.boehm 1.1.2.13         const SCMBUnion** keyvalue) const;
 586 thilo.boehm 1.1.2.1  
 587                          /**
 588 thilo.boehm 1.1.2.24      * Determines whether the c++ object has been initialized.
 589                           * @return True if the c++ object has not been initialized, false otherwise.
 590 thilo.boehm 1.1.2.1       */
 591 thilo.boehm 1.1.2.17     Boolean isUninitialized( ) const {return (0 == inst.base); };
 592 thilo.boehm 1.1.2.1  
 593                          /**
 594 thilo.boehm 1.1.2.32      * Determines if the SCMOInstance does not contain any property information.
 595                           * Maybe only the class name and/or name space are available.
 596                           * @return True if the SCMOInstacne is empty, false otherwise.
 597                           */
 598                          Boolean isEmpty( ) const {return (inst.hdr->theClass->isEmpty()); };
 599                      
 600                          /**
 601 thilo.boehm 1.1.2.24      * Determines whether the instance is used as a class container.
 602                           * @return True if the instance is used as a class container only.
 603                           */
 604 thilo.boehm 1.1.2.25     Boolean getIsClassOnly( ) const
 605 thilo.boehm 1.1.2.24     {
 606                              return inst.hdr->flags.isClassOnly;
 607                          }
 608                      
 609                          /**
 610 thilo.boehm 1.1.2.25      * To mark if this instance is a class only container.
 611 thilo.boehm 1.1.2.24      */
 612 thilo.boehm 1.1.2.25     void setIsClassOnly( Boolean b )
 613 thilo.boehm 1.1.2.24     {
 614 thilo.boehm 1.1.2.25         inst.hdr->flags.isClassOnly = b;
 615 thilo.boehm 1.1.2.24     }
 616                      
 617                          /**
 618 thilo.boehm 1.1.2.1       * Determies if two objects are referencing to the same instance
 619                           * @return True if the objects are referencing to the some instance.
 620                           */
 621                          Boolean isSame(SCMOInstance& theInstance) const;
 622                      
 623                          /**
 624 thilo.boehm 1.1.2.21      * Sets the provided host name at the instance.
 625                           * @param hostName The host name as UTF8.
 626                           */
 627                          void setHostName(const char* hostName);
 628                      
 629                          /**
 630 thilo.boehm 1.1.2.26      * Sets the provided host name unchecked at the instance.
 631                           * @param hostName The host name as UTF8.
 632                           * @param len The strlen of the host name.
 633                           */
 634 thilo.boehm 1.1.2.32     void setHostName_l(const char* hostName, Uint64 len);
 635 thilo.boehm 1.1.2.26 
 636                          /**
 637 thilo.boehm 1.1.2.1       * Get the host name of the instance. The caller has to make a copy !
 638                           * @return The host name as UTF8.
 639                           */
 640                          const char* getHostName() const;
 641                      
 642                          /**
 643 thilo.boehm 1.1.2.21      * Get the host name of the instance.
 644 thilo.boehm 1.1.2.27      * @param Return strlen of result string.
 645 thilo.boehm 1.1.2.21      * @return The class name as UTF8.
 646 thilo.boehm 1.1.2.1       */
 647 thilo.boehm 1.1.2.21     const char* getHostName_l(Uint64 & length) const;
 648                      
 649 thilo.boehm 1.1.2.24     /**
 650 thilo.boehm 1.1.2.21      * Sets the provided class name at the instance. By caling this function
 651 thilo.boehm 1.1.2.24      * the instance is in an inconsitacne state and is maked as isCompromised.
 652 thilo.boehm 1.1.2.21      * @param className The class name as UTF8.
 653                           */
 654                          void setClassName(const char* className);
 655 thilo.boehm 1.1.2.1  
 656                          /**
 657 marek       1.1.2.30      * Sets the provided class name at the instance. By caling this function
 658                           * the instance is in an inconsitacne state and is maked as isCompromised.
 659                           * @param className The class name as UTF8.
 660                           * @param len The strlen of the name space.
 661                           */
 662                          void setClassName_l(const char* className, Uint64 len);
 663                      
 664                          /**
 665 marek       1.1.2.11      * Get the class name of the instance. The caller has to make a copy !
 666 thilo.boehm 1.1.2.1       * @return The class name as UTF8.
 667                           */
 668                          const char* getClassName() const;
 669                      
 670                          /**
 671 marek       1.1.2.11      * Get the class name of the instance. The caller has to make a copy !
 672 thilo.boehm 1.1.2.32      * @param lenght Return strlen of result string.
 673 thilo.boehm 1.1.2.21      * @return The class name as UTF8.
 674 marek       1.1.2.11      */
 675                          const char* getClassName_l(Uint64 & length) const;
 676                      
 677 thilo.boehm 1.1.2.24     /**
 678                           * Sets the provided name space name at the instance.
 679                           * By caling this function the instance is in an inconsitacne state and
 680                           * is maked as isCompromised.
 681 thilo.boehm 1.1.2.21      * @param nameSpaceName The name space name as UTF8.
 682                           */
 683                          void setNameSpace(const char* nameSpace);
 684                      
 685 marek       1.1.2.11     /**
 686 thilo.boehm 1.1.2.26      * Sets the provided name space name unchecked at the instance.
 687                           * By caling this function the instance is in an inconsitacne state and
 688                           * is maked as isCompromised.
 689                           * @param nameSpaceName The name space name as UTF8.
 690                           * @param len The strlen of the name space.
 691                           */
 692 thilo.boehm 1.1.2.32     void setNameSpace_l(const char* nameSpace, Uint64 len);
 693 thilo.boehm 1.1.2.26 
 694                          /**
 695 thilo.boehm 1.1.2.1       * Get the name space of the instance. The caller has to make a copy !
 696                           * @return The name space as UTF8.
 697                           */
 698                          const char* getNameSpace() const;
 699                      
 700                          /**
 701 thilo.boehm 1.1.2.21      * Get the class name of the instance. The caller has to make a copy !
 702 thilo.boehm 1.1.2.27      * @param Return strlen of result string.
 703 thilo.boehm 1.1.2.21      * @return The class name as UTF8.
 704                           */
 705                          const char* getNameSpace_l(Uint64 & length) const;
 706                      
 707 thilo.boehm 1.1.2.24     /**
 708 thilo.boehm 1.1.2.21      * Is the name space or class name of the instance the origianl values
 709                           * set by the used SCMOClass.
 710                           * The class name and/or name space may differ with the associated class.
 711 thilo.boehm 1.1.2.24      * @return true if name space or class name was set manually by
 712 thilo.boehm 1.1.2.21      *          setNameSpace() or setClassName()
 713                           */
 714 thilo.boehm 1.1.2.22     Boolean isCompromised() const
 715 thilo.boehm 1.1.2.21     {
 716                              return inst.hdr->flags.isCompromised;
 717 thilo.boehm 1.1.2.22     };
 718 thilo.boehm 1.1.2.21 
 719 thilo.boehm 1.1.2.23 
 720 thilo.boehm 1.1.2.24     /**
 721 thilo.boehm 1.1.2.23      * Mark the instance as a non validated instance.
 722                           */
 723 thilo.boehm 1.1.2.24     void markAsCompromised()
 724 thilo.boehm 1.1.2.23     {
 725                              inst.hdr->flags.isCompromised = true;
 726                          };
 727                      
 728 thilo.boehm 1.1.2.21     /**
 729 thilo.boehm 1.1.2.1       *  To indicate the export processing ( eg. XMLWriter )
 730                           *  to include qualifiers for this instance.
 731                           */
 732                          void includeQualifiers()
 733                          {
 734                              inst.hdr->flags.includeQualifiers = true;
 735                          };
 736                      
 737                          /**
 738                           *  To indicate the export processing ( eg. XMLWriter )
 739                           *  to NOT to include (exclude) qualifiers for this instance.
 740                           */
 741                          void excludeQualifiers()
 742                          {
 743                              inst.hdr->flags.includeQualifiers = false;
 744                          }
 745                      
 746                          /**
 747                           *  To indicate the export processing ( eg. XMLWriter )
 748                           *  to include class origins for this instance.
 749                           */
 750 thilo.boehm 1.1.2.1      void includeClassOrigins()
 751                          {
 752                              inst.hdr->flags.includeClassOrigin = true;
 753                          };
 754                      
 755                          /**
 756                           *  To indicate the export processing ( eg. XMLWriter )
 757                           *  to NOT to include (exclude) class origins for this instance.
 758                           */
 759                          void excludeClassOrigins()
 760                          {
 761                              inst.hdr->flags.includeClassOrigin = false;
 762                          }
 763                      
 764 thilo.boehm 1.1.2.36 
 765                          /**
 766                           * Returns the number of external references hosted by the instance.
 767                           **/
 768 r.kieninger 1.1.2.38     Uint32 numberExtRef() const
 769 thilo.boehm 1.1.2.36     {
 770                              return inst.mem->numberExtRef;
 771                          }
 772                      
 773                          /**
 774                           * Gets the pointer of an external reference of the instance.
 775                           * Warning: The pointer is purely returned. No management is done.
 776                           * @parm idx The index of the external reference.
 777                           **/
 778 r.kieninger 1.1.2.38     SCMOInstance* getExtRef(Uint32 idx) const;
 779 thilo.boehm 1.1.2.36 
 780                          /**
 781                           * Sets a pointer of an external reference of the instance.
 782                           * Warning: The pointer is purely returned. No management is done.
 783                           * @parm idx The index of the external reference.
 784                           * @parm ptr The pointer to an SCMOInstance
 785                           **/
 786                          void putExtRef(Uint32 idx,SCMOInstance* ptr);
 787                      
 788 thilo.boehm 1.1.2.1  private:
 789                      
 790                          void Ref()
 791                          {
 792                              inst.hdr->refCount++;
 793                              // printf("\ninst.hdr->refCount=%u\n",inst.hdr->refCount.get());
 794                          };
 795                      
 796 thilo.boehm 1.1.2.17     void Unref()
 797                          {
 798                              if (inst.hdr->refCount.decAndTestIfZero())
 799                              {
 800                                  // printf("\ninst.hdr->refCount=%u\n",inst.hdr->refCount.get());
 801                                  // All external references has to be destroyed.
 802                                  _destroyExternalReferences();
 803                                  // The class has also be dereferenced.
 804                                  delete inst.hdr->theClass;
 805                                  free(inst.base);
 806                                  inst.base=NULL;
 807                              }
 808                              else
 809                              {
 810                                  // printf("\ninst.hdr->refCount=%u\n",inst.hdr->refCount.get());
 811                              }
 812                      
 813                          };
 814                      
 815 thilo.boehm 1.1.2.16 
 816 thilo.boehm 1.1.2.37     void _copyOnWrite()
 817                          {
 818                              if ( 1 < inst.hdr->refCount.get() )
 819                              {
 820 marek       1.1.2.40             SCMBInstance_Main * oldRef = inst.hdr;
 821 thilo.boehm 1.1.2.42             // fprintf(stderr,"!! Copy on Write (%d) !!\n",
 822                                  //        inst.hdr->refCount.get() );
 823 thilo.boehm 1.1.2.37             _clone();
 824 marek       1.1.2.40             if (oldRef->refCount.decAndTestIfZero())
 825                                  {
 826                                      // All external references has to be destroyed.
 827                                      _destroyExternalReferencesInternal((SCMBMgmt_Header*)oldRef);
 828                                      // The class has also be dereferenced.
 829                                      delete oldRef->theClass;
 830                                      free((void*)oldRef);
 831                                      oldRef=0;
 832                                  }
 833 thilo.boehm 1.1.2.37         }
 834                          };
 835                      
 836                          void _clone();
 837                      
 838 thilo.boehm 1.1.2.16     void _destroyExternalReferences();
 839 thilo.boehm 1.1.2.1  
 840 thilo.boehm 1.1.2.31     void _destroyExternalKeyBindings();
 841                      
 842 thilo.boehm 1.1.2.20     void _copyExternalReferences();
 843                      
 844 thilo.boehm 1.1.2.34     void _setExtRefIndex(Uint64 idx);
 845                      
 846 thilo.boehm 1.1.2.15     void _initSCMOInstance(SCMOClass* pClass);
 847 thilo.boehm 1.1.2.1  
 848 thilo.boehm 1.1.2.15     void _setCIMInstance(const CIMInstance& cimInstance);
 849 thilo.boehm 1.1.2.1  
 850 marek       1.1.2.28     void _getPropertyAt(
 851                              Uint32 pos,
 852                              SCMBValue** value,
 853                              const char ** valueBase,
 854                              SCMBClassProperty ** propDef) const;
 855                      
 856 thilo.boehm 1.1.2.1      SCMO_RC _getPropertyAtNodeIndex(
 857 thilo.boehm 1.1.2.15         Uint32 pos,
 858                              const char** pname,
 859                              CIMType& type,
 860                              const SCMBUnion** pvalue,
 861                              Boolean& isArray,
 862                              Uint32& size ) const;
 863 thilo.boehm 1.1.2.1  
 864                          void _setPropertyAtNodeIndex(
 865                              Uint32 pos,
 866                              CIMType type,
 867 thilo.boehm 1.1.2.14         const SCMBUnion* pInVal,
 868 thilo.boehm 1.1.2.1          Boolean isArray,
 869                              Uint32 size);
 870                      
 871 thilo.boehm 1.1.2.21     void _setCIMValueAtNodeIndex(
 872 thilo.boehm 1.1.2.24         Uint32 node,
 873 thilo.boehm 1.1.2.21         CIMValueRep* valRep,
 874                              CIMType realType);
 875 thilo.boehm 1.1.2.4  
 876 thilo.boehm 1.1.2.16     static void _getCIMValueFromSCMBUnion(
 877 thilo.boehm 1.1.2.12         CIMValue& cimV,
 878                              const CIMType type,
 879                              const Boolean isNull,
 880                              const Boolean isArray,
 881                              const Uint32 arraySize,
 882                              const SCMBUnion& scmbUn,
 883 thilo.boehm 1.1.2.16         const char * base);
 884 thilo.boehm 1.1.2.12 
 885 thilo.boehm 1.1.2.16     static void _getCIMValueFromSCMBValue(
 886 thilo.boehm 1.1.2.6          CIMValue& cimV,
 887                              const SCMBValue& scmbV,
 888 thilo.boehm 1.1.2.16         const char * base);
 889 thilo.boehm 1.1.2.6  
 890 thilo.boehm 1.1.2.32     static SCMOClass _getSCMOClass(
 891                              const CIMObjectPath& theCIMObj,
 892                              const char* altNS,
 893                              Uint64 altNSlength);
 894                      
 895 thilo.boehm 1.1.2.6      CIMProperty _getCIMPropertyAtNodeIndex(Uint32 nodeIdx) const;
 896                      
 897 thilo.boehm 1.1.2.4      void _setCIMObjectPath(const CIMObjectPath& cimObj);
 898                      
 899 thilo.boehm 1.1.2.13     SCMBUnion* _resolveSCMBUnion(
 900 thilo.boehm 1.1.2.1          CIMType type,
 901                              Boolean isArray,
 902                              Uint32 size,
 903                              Uint64 start,
 904                              char* base) const;
 905                      
 906                          void _setSCMBUnion(
 907 thilo.boehm 1.1.2.14         const SCMBUnion* pInVal,
 908 thilo.boehm 1.1.2.1          CIMType type,
 909                              Boolean isArray,
 910                              Uint32 size,
 911 thilo.boehm 1.1.2.12         SCMBUnion & u);
 912 thilo.boehm 1.1.2.1  
 913 thilo.boehm 1.1.2.16     static void _setUnionValue(
 914 thilo.boehm 1.1.2.4          Uint64 start,
 915                              SCMBMgmt_Header** pmem,
 916                              CIMType type,
 917 thilo.boehm 1.1.2.21         Uint64 startNS,
 918                              Uint64 lenNS,
 919 thilo.boehm 1.1.2.4          Union& u);
 920                      
 921 thilo.boehm 1.1.2.12     static void _setUnionArrayValue(
 922 thilo.boehm 1.1.2.4          Uint64 start,
 923                              SCMBMgmt_Header** pmem,
 924                              CIMType type,
 925                              Uint32& n,
 926 thilo.boehm 1.1.2.21         Uint64 startNS,
 927                              Uint64 lenNS,
 928 thilo.boehm 1.1.2.4          Union& u);
 929                      
 930 thilo.boehm 1.1.2.34     static void _setExtRefIndex(SCMBUnion* pInst, SCMBMgmt_Header** pmem);
 931                      
 932 thilo.boehm 1.1.2.12     SCMO_RC _getKeyBindingDataAtNodeIndex(
 933 marek       1.1.2.11         Uint32 node,
 934                              const char** pname,
 935                              Uint32 & pnameLen,
 936 thilo.boehm 1.1.2.12         CIMType& type,
 937                              const SCMBUnion** pdata) const;
 938 marek       1.1.2.11 
 939 thilo.boehm 1.1.2.5      void _copyKeyBindings(SCMOInstance& targetInst) const;
 940                      
 941 thilo.boehm 1.1.2.1      Uint32 _initPropFilterWithKeys();
 942                      
 943                          void _setPropertyInPropertyFilter(Uint32 i);
 944                      
 945                          Boolean _isPropertyInFilter(Uint32 i) const;
 946                      
 947                          void _clearPropertyFilter();
 948                      
 949 thilo.boehm 1.1.2.3      void _setKeyBindingFromSCMBUnion(
 950 thilo.boehm 1.1.2.4          CIMType type,
 951 thilo.boehm 1.1.2.12         const SCMBUnion& u,
 952                              const char * uBase,
 953                              SCMBKeyBindingValue& keyData);
 954                      
 955 thilo.boehm 1.1.2.23     SCMO_RC _setKeyBindingFromString(
 956 thilo.boehm 1.1.2.24         const char* name,
 957                              CIMType type,
 958 thilo.boehm 1.1.2.23         String cimKeyBinding);
 959                      
 960                          SCMBUserKeyBindingElement* _getUserDefinedKeyBinding(
 961                              const char* name,
 962                              Uint32 nameLen,
 963                              CIMType type);
 964                      
 965                          void _setUserDefinedKeyBinding(
 966                              SCMBUserKeyBindingElement& theInsertElement,
 967                              char* elementBase);
 968                          /**
 969 thilo.boehm 1.1.2.24      * Set a SCMO user defined key binding using the class CIM type tolerating
 970                           * CIM key binding types converted to CIM types by fuction
 971                           *  _CIMTypeFromKeyBindingType().
 972                           *
 973 thilo.boehm 1.1.2.23      * @parm classType The type of the key binding in the class definition
 974                           * @parm setType The type of the key binding to be set.
 975                           * @param keyValue A pointer to the key binding to be set.
 976                           * @param kbValue Out parameter, the SCMO keybinding to be set.
 977 thilo.boehm 1.1.2.24      *
 978 thilo.boehm 1.1.2.23      **/
 979                          SCMO_RC _setKeyBindingTypeTolerate(
 980                              CIMType classType,
 981                              CIMType setType,
 982                              const SCMBUnion* keyValue,
 983                              SCMBKeyBindingValue& kbValue);
 984                      
 985                          CIMType _CIMTypeFromKeyBindingType(
 986 thilo.boehm 1.1.2.24         const char* key,
 987 thilo.boehm 1.1.2.23         CIMKeyBinding::Type t);
 988                      
 989                          SCMO_RC _getUserKeyBindingNodeIndex(Uint32& node, const char* name) const;
 990                      
 991                          SCMBUserKeyBindingElement* _getUserDefinedKeyBindingAt(Uint32 index) const;
 992 thilo.boehm 1.1.2.12 
 993 thilo.boehm 1.1.2.18     Boolean _setCimKeyBindingStringToSCMOKeyBindingValue(
 994 thilo.boehm 1.1.2.16         const String& kbs,
 995 thilo.boehm 1.1.2.12         CIMType type,
 996                              SCMBKeyBindingValue& scmoKBV
 997                              );
 998                      
 999 thilo.boehm 1.1.2.2  
1000 thilo.boehm 1.1.2.1      union{
1001                              // To access the instance main structure
1002                              SCMBInstance_Main *hdr;
1003                              // To access the memory management header
1004                              SCMBMgmt_Header     *mem;
1005                              // Generic access pointer
1006                              char *base;
1007                          }inst;
1008                      
1009                          friend class SCMOClass;
1010                          friend class SCMODump;
1011 thilo.boehm 1.1.2.20     friend class SCMOXmlWriter;
1012 r.kieninger 1.1.2.38     friend class SCMOStreamer;
1013 thilo.boehm 1.1.2.1  };
1014                      
1015 marek       1.1.2.29 inline void SCMOInstance::_getPropertyAt(
1016                          Uint32 pos,
1017                          SCMBValue** value,
1018                          const char ** valueBase,
1019                          SCMBClassProperty ** propDef) const
1020                      {
1021                          Uint32 node;
1022                          // is filtering on ?
1023                          if (inst.hdr->flags.isFiltered)
1024                          {
1025                              // Get absolut pointer to property filter index map of the instance
1026                              Uint32* propertyFilterIndexMap =
1027                              (Uint32*)&(inst.base[inst.hdr->propertyFilterIndexMap.start]);
1028                              // get the real node index of the property.
1029                              node = propertyFilterIndexMap[pos];
1030                          }
1031                          else
1032                          {
1033                              // the index is used as node index.
1034                              node = pos;
1035                          }
1036 marek       1.1.2.29 
1037                          SCMBValue* theInstPropNodeArray =
1038                              (SCMBValue*)&(inst.base[inst.hdr->propertyArray.start]);
1039                      
1040                          // create a pointer to property node array of the class.
1041                          Uint64 idx = inst.hdr->theClass->cls.hdr->propertySet.nodeArray.start;
1042                          SCMBClassPropertyNode* theClassPropNodeArray =
1043                              (SCMBClassPropertyNode*)&(inst.hdr->theClass->cls.base)[idx];
1044                      
1045                          // return the absolute pointer to the property definition
1046                          *propDef= &(theClassPropNodeArray[node].theProperty);
1047                      
1048                          // need check if property set or not, if not set use the default value
1049                          if (theInstPropNodeArray[node].flags.isSet)
1050                          {
1051                              // return the absolute pointer to the property value in the instance
1052                              *value = &(theInstPropNodeArray[node]);
1053                              *valueBase = inst.base;
1054                          }
1055                          else
1056                          {
1057 marek       1.1.2.29         // return the absolute pointer to
1058                              *value = &(theClassPropNodeArray[node].theProperty.defaultValue);
1059                              *valueBase = inst.hdr->theClass->cls.base;
1060                          }
1061                      }
1062 thilo.boehm 1.1.2.1  
1063 r.kieninger 1.1.2.41 inline void SCMOInstance::getSCMBValuePropertyAt(
1064                          Uint32 pos,
1065                          SCMBValue** value,
1066                          const char ** valueBase,
1067                          SCMBClassProperty ** propDef,
1068                          const char ** propDefBase) const
1069                      {
1070                          _getPropertyAt(pos,value,valueBase,propDef);
1071                      
1072                          *propDefBase = inst.hdr->theClass->cls.base;
1073                      }
1074                      
1075                      inline SCMO_RC SCMOInstance::getKeyBindingAtUnresolved(
1076                              Uint32 node,
1077                              const char** pname,
1078                              Uint32 & pnameLen,
1079                              CIMType& type,
1080                              const SCMBUnion** pdata,
1081                              const char** valueBase) const
1082                      {
1083                          SCMO_RC rc = _getKeyBindingDataAtNodeIndex(node,pname,pnameLen,type,pdata);
1084 r.kieninger 1.1.2.41     *valueBase = inst.base;
1085                          return rc;
1086                      }
1087                      
1088                      
1089                      
1090 thilo.boehm 1.1.2.19 #define PEGASUS_ARRAY_T SCMOInstance
1091                      # include <Pegasus/Common/ArrayInter.h>
1092                      #undef PEGASUS_ARRAY_T
1093                      
1094 thilo.boehm 1.1.2.1  PEGASUS_NAMESPACE_END
1095                      
1096                      
1097                      #endif

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2