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

Diff for /pegasus/src/Pegasus/Common/SCMOInstance.h between version 1.1.2.24 and 1.1.2.41

version 1.1.2.24, 2009/10/15 12:14:16 version 1.1.2.41, 2009/11/30 17:00:38
Line 43 
Line 43 
  
 #define PEGASUS_SCMB_INSTANCE_MAGIC 0xD00D1234 #define PEGASUS_SCMB_INSTANCE_MAGIC 0xD00D1234
  
 class SCMOClass;  
   
 class PEGASUS_COMMON_LINKAGE SCMOInstance class PEGASUS_COMMON_LINKAGE SCMOInstance
 { {
 public: public:
Line 58 
Line 56 
      * Creating a SCMOInstance using a SCMOClass.      * Creating a SCMOInstance using a SCMOClass.
      * @param baseClass A SCMOClass.      * @param baseClass A SCMOClass.
      */      */
     SCMOInstance(SCMOClass baseClass);      SCMOInstance(SCMOClass& baseClass);
   
   
       /**
        * Creating a SCMOInstance using a CIMClass
        * using an optional name space name,
        * @param baseClass A SCMOClass.
        * @param nameSpaceName An optional name space name.
        */
       SCMOInstance(CIMClass& theCIMClass, const char* nameSpaceName=0);
  
     /**     /**
      * Copy constructor for the SCMO instance, used to implement refcounting.      * Copy constructor for the SCMO instance, used to implement refcounting.
Line 72 
Line 79 
     }     }
  
     /**     /**
        * Constructs a SCMOInstance from a memory object of type SCMBInstance_Main.
        * It incremets the referece counter of the memory object.
        * @param hdr A memory object of type SCMBInstance_Main.
        **/
       SCMOInstance(SCMBInstance_Main* hdr)
       {
           inst.hdr = hdr;
           Ref();
       }
   
   
       /**
        * Assignment operator for the SCMO instance,
        * @param theSCMOInstance The right hand value
        **/
       SCMOInstance& operator=(const SCMOInstance& theSCMOInstance)
       {
           if (inst.hdr != theSCMOInstance.inst.hdr)
           {
               Unref();
               inst.hdr = theSCMOInstance.inst.hdr;
               Ref();
           }
           return *this;
       }
   
       /**
      * Destructor is decrementing the refcount. If refcount is zero, the      * Destructor is decrementing the refcount. If refcount is zero, the
      * singele chunk memory object is deallocated.      * singele chunk memory object is deallocated.
      */      */
Line 102 
Line 136 
      *      *
      */      */
     SCMOInstance(     SCMOInstance(
         SCMOClass baseClass,          SCMOClass& baseClass,
         Boolean includeQualifiers,         Boolean includeQualifiers,
         Boolean includeClassOrigin,         Boolean includeClassOrigin,
         const char** propertyList);         const char** propertyList);
Line 112 
Line 146 
      * CIMInstance data into the new SCMOInstance.      * CIMInstance data into the new SCMOInstance.
      * @param baseClass The SCMOClass of this instance.      * @param baseClass The SCMOClass of this instance.
      * @param cimInstance A CIMInstace of the same class.      * @param cimInstance A CIMInstace of the same class.
      * @exception Exception if class name and name space does not match.       * @exception Exception if class name does not match.
      * @exception  
      *     Exception if CIMInstance has more key bindings then the SCMOClass.  
      * @exception  
      *     Exception if a key binding is not found as a key property  
      *     of the SCMOClass.  
      * @exception Exception if a key binding does not match  
      *     the class definition.  
      * @exception Exception if a property is not part of class definition.      * @exception Exception if a property is not part of class definition.
      * @exception Exception if a property does not match the class definition.      * @exception Exception if a property does not match the class definition.
      */      */
     SCMOInstance(SCMOClass baseClass, const CIMInstance& cimInstance);      SCMOInstance(SCMOClass& baseClass, const CIMInstance& cimInstance);
  
     /**     /**
      * Builds a SCMOInstance from the given SCMOClass and copies all      * Builds a SCMOInstance from the given SCMOClass and copies all
      * CIMObjectPath data into the new SCMOInstance.      * CIMObjectPath data into the new SCMOInstance.
      * @param baseClass The SCMOClass of this instance.      * @param baseClass The SCMOClass of this instance.
      * @param cimInstance A CIMObjectpath of the same class.      * @param cimInstance A CIMObjectpath of the same class.
      * @exception Exception if class name and name space does not match.       * @exception Exception if class name does not match.
      * @exception       */
      *     Exception if CIMInstance has more key bindings then the SCMOClass.      SCMOInstance(SCMOClass& baseClass, const CIMObjectPath& cimObj);
      * @exception  
      *     Exception if a key binding is not found as a key property      /**
      *     of the SCMOClass.       * Builds a SCMOInstance from the given CIMInstance copying all data.
      * @exception Exception if a key binding does not match       * The SCMOClass is retrieved from SCMOClassCache using
      *     the class definition.       * the class and name space of the CIMInstance.
        * If the SCMOClass was not found, an empty SCMOInstance will be returned
        * and the resulting SCMOInstance is compromized.
        * If the CIMInstance does not contain a name space, the optional fall back
        * name space is used.
        * @param cimInstance A CIMInstace with class name and name space.
        * @param altNameSpace An alternative name space name.
        * @exception Exception if a property is not part of class definition.
        * @exception Exception if a property does not match the class definition.
      */      */
     SCMOInstance(SCMOClass baseClass, const CIMObjectPath& cimObj);      SCMOInstance(
           const CIMInstance& cimInstance,
           const char* altNameSpace=0,
           Uint64 altNSLen=0);
   
       /**
        * Builds a SCMOInstance from the given CIMObjectPath copying all data.
        * The SCMOClass is retrieved from SCMOClassCache using
        * the class and name space of the CIMObjectPath.
        * If the SCMOClass was not found, an empty SCMOInstance will be returned
        * and the resulting SCMOInstance is compromized.
        * If the CIMObjectPath does not contain a name space,
        * the optional fall back name space is used.
        * @param cimObj A CIMObjectpath with name space and name
        * @param altNameSpace An alternative name space name.
        * @
        */
       SCMOInstance(
           const CIMObjectPath& cimObj,
           const char* altNameSpace=0,
           Uint64 altNSLen=0);
   
       /**
        * Builds a SCMOInstance from the given CIMObject copying all data.
        * The SCMOClass is retrieved from SCMOClassCache using
        * the class and name space of the CIMObject.
        * If the SCMOClass was not found, an empty SCMOInstance will be returned
        * and the resulting SCMOInstance is compromized.
        * If the CIMInstance does not contain a name space, the optional fall back
        * name space is used.
        * @param cimInstance A CIMInstace with class name and name space.
        * @param altNameSpace An alternative name space name.
        * @exception Exception if a property is not part of class definition.
        * @exception Exception if a property does not match the class definition.
        */
       SCMOInstance(
           const CIMObject& cimObject,
           const char* altNameSpace=0,
           Uint64 altNSLen=0);
  
     /**     /**
      * Converts the SCMOInstance into a CIMInstance.      * Converts the SCMOInstance into a CIMInstance.
Line 180 
Line 253 
      *              Has to be copied by caller.      *              Has to be copied by caller.
      *              It is set to NULL if rc != SCMO_OK.      *              It is set to NULL if rc != SCMO_OK.
      * @param pvalue Returns a pointer to the value of property.      * @param pvalue Returns a pointer to the value of property.
      *               The value is strored in a SCMBUnion       *               The value is stored in a SCMBUnion
      *                and has to be copied by the caller !      *                and has to be copied by the caller !
      *               It returns NULL if rc != SCMO_OK.      *               It returns NULL if rc != SCMO_OK.
      *      *
Line 216 
Line 289 
         Boolean& isArray,         Boolean& isArray,
         Uint32& size ) const;         Uint32& size ) const;
  
     /**      void getSCMBValuePropertyAt(
      * Gets the property name, type, and value addressed by a positional index.  
      * The property name and value has to be copied by the caller !  
      * @param pos The positional index of the property  
      * @param pname Returns the property name as '\0' terminated string.  
      *              Has to be copied by caller.  
      *              It is set to NULL if rc != SCMO_OK.  
      * @param value Returns an absolute pointer to the value of property.  
      *                  Sub-pointers are NOT resolved!  
      *               The value has to be copied by the caller !  
      *               It returns NULL if rc != SCMO_OK.  
      * @param valueBase Returns an absolute pointer to the base of value,  
      *                  because subsequent pointers in the value are NOT  
      *                  resolved.  
      * @param propDef Returns an absolute pointer to the property definition  
      *                  Sub-pointers are NOT resolved!  
      *             It is invalid if rc == SCMO_INDEX_OUT_OF_BOUND.  
      *  
      * @return     SCMO_OK  
      *             SCMO_NULL_VALUE : The value is a null value.  
      *             SCMO_INDEX_OUT_OF_BOUND : Given index not found  
      *  
      */  
     SCMO_RC getPropertyAt(  
         Uint32 pos,         Uint32 pos,
         SCMBValue** value,         SCMBValue** value,
         const char ** valueBase,         const char ** valueBase,
         SCMBClassProperty ** propDef) const;          SCMBClassProperty ** propDef,
           const char ** classBase) const;
  
     /**     /**
      * Gets the type and value of the named property.      * Gets the type and value of the named property.
      * The value has to be copied by the caller !      * The value has to be copied by the caller !
      * @param name The property name      * @param name The property name
      * @param pvalue Returns a pointer to the value of property.      * @param pvalue Returns a pointer to the value of property.
      *               The value is strored in a SCMBUnion       *               The value is stored in a SCMBUnion
      *                and has to be copied by the caller !      *                and has to be copied by the caller !
      *               It returns NULL if rc != SCMO_OK.      *               It returns NULL if rc != SCMO_OK.
      *      *
Line 461 
Line 512 
         const SCMBUnion* keyvalue);         const SCMBUnion* keyvalue);
  
     /**     /**
        * Clears all key bindings in an instance.
        * Warning: External references are freed but only the internal
        * control structures are resetted. No memory is freed and at setting
        * new key bindings the instance will grow in memory usage.
        **/
       void clearKeyBindings();
   
       /**
      * Gets the key binding count.      * Gets the key binding count.
      * @return the number of key bindings set.      * @return the number of key bindings set.
      */      */
Line 488 
Line 547 
         CIMType& type,         CIMType& type,
         const SCMBUnion** keyvalue) const;         const SCMBUnion** keyvalue) const;
  
       SCMO_RC getKeyBindingAtUnresolved(
           Uint32 node,
           const char** pname,
           Uint32 & pnameLen,
           CIMType& type,
           const SCMBUnion** pdata,
           const char** valueBase) const;
   
     /**     /**
      * Get the named key binding.      * Get the named key binding.
      * @parm name The name of the key binding.      * @parm name The name of the key binding.
      * @param type Returns the type as CIMType.      * @param type Returns the type as CIMType.
      *             It is invalid if rc == SCMO_INDEX_OUT_OF_BOUND.      *             It is invalid if rc == SCMO_INDEX_OUT_OF_BOUND.
      * @param keyvalue Returns a pointer to the value of keybinding.      * @param keyvalue Returns a pointer to the value of keybinding.
      *               The value is strored in a SCMBUnion       *               The value is stored in a SCMBUnion
      *                and has to be copied by the caller !      *                and has to be copied by the caller !
      *               It returns NULL if rc != SCMO_OK.      *               It returns NULL if rc != SCMO_OK.
      *      *
Line 524 
Line 591 
     Boolean isUninitialized( ) const {return (0 == inst.base); };     Boolean isUninitialized( ) const {return (0 == inst.base); };
  
     /**     /**
      * Determines whether the instance is used as a class container.       * Determines if the SCMOInstance does not contain any property information.
      * @return True if the instance is used as a class container only.       * Maybe only the class name and/or name space are available.
        * @return True if the SCMOInstacne is empty, false otherwise.
      */      */
     Boolean isClassOnly( ) const      Boolean isEmpty( ) const {return (inst.hdr->theClass->isEmpty()); };
     {  
         return inst.hdr->flags.isClassOnly;  
     }  
  
     /**     /**
      * Mark this instance to be a class only container.       * Determines whether the instance is used as a class container.
        * @return True if the instance is used as a class container only.
      */      */
     void setClassOnly( )      Boolean getIsClassOnly( ) const
     {     {
         inst.hdr->flags.isClassOnly = true;          return inst.hdr->flags.isClassOnly;
     }     }
  
     /**     /**
      * Mark this instance is a real instance.       * To mark if this instance is a class only container.
      */      */
     void clearClassOnly( )      void setIsClassOnly( Boolean b )
     {     {
         inst.hdr->flags.isClassOnly = false;          inst.hdr->flags.isClassOnly = b;
     }     }
  
     /**     /**
Line 561 
Line 627 
     void setHostName(const char* hostName);     void setHostName(const char* hostName);
  
     /**     /**
        * Sets the provided host name unchecked at the instance.
        * @param hostName The host name as UTF8.
        * @param len The strlen of the host name.
        */
       void setHostName_l(const char* hostName, Uint64 len);
   
       /**
      * Get the host name of the instance. The caller has to make a copy !      * Get the host name of the instance. The caller has to make a copy !
      * @return The host name as UTF8.      * @return The host name as UTF8.
      */      */
Line 568 
Line 641 
  
     /**     /**
      * Get the host name of the instance.      * Get the host name of the instance.
      * @param Return length of result string.       * @param Return strlen of result string.
      * @return The class name as UTF8.      * @return The class name as UTF8.
      */      */
     const char* getHostName_l(Uint64 & length) const;     const char* getHostName_l(Uint64 & length) const;
Line 581 
Line 654 
     void setClassName(const char* className);     void setClassName(const char* className);
  
     /**     /**
        * Sets the provided class name at the instance. By caling this function
        * the instance is in an inconsitacne state and is maked as isCompromised.
        * @param className The class name as UTF8.
        * @param len The strlen of the name space.
        */
       void setClassName_l(const char* className, Uint64 len);
   
       /**
      * Get the class name of the instance. The caller has to make a copy !      * Get the class name of the instance. The caller has to make a copy !
      * @return The class name as UTF8.      * @return The class name as UTF8.
      */      */
Line 588 
Line 669 
  
     /**     /**
      * Get the class name of the instance. The caller has to make a copy !      * Get the class name of the instance. The caller has to make a copy !
      * @param Return length of result string.       * @param lenght Return strlen of result string.
      * @return The class name as UTF8.      * @return The class name as UTF8.
      */      */
     const char* getClassName_l(Uint64 & length) const;     const char* getClassName_l(Uint64 & length) const;
Line 602 
Line 683 
     void setNameSpace(const char* nameSpace);     void setNameSpace(const char* nameSpace);
  
     /**     /**
        * Sets the provided name space name unchecked at the instance.
        * By caling this function the instance is in an inconsitacne state and
        * is maked as isCompromised.
        * @param nameSpaceName The name space name as UTF8.
        * @param len The strlen of the name space.
        */
       void setNameSpace_l(const char* nameSpace, Uint64 len);
   
       /**
      * Get the name space of the instance. The caller has to make a copy !      * Get the name space of the instance. The caller has to make a copy !
      * @return The name space as UTF8.      * @return The name space as UTF8.
      */      */
Line 609 
Line 699 
  
     /**     /**
      * Get the class name of the instance. The caller has to make a copy !      * Get the class name of the instance. The caller has to make a copy !
      * @param Return length of result string.       * @param Return strlen of result string.
      * @return The class name as UTF8.      * @return The class name as UTF8.
      */      */
     const char* getNameSpace_l(Uint64 & length) const;     const char* getNameSpace_l(Uint64 & length) const;
Line 671 
Line 761 
         inst.hdr->flags.includeClassOrigin = false;         inst.hdr->flags.includeClassOrigin = false;
     }     }
  
   
       /**
        * Returns the number of external references hosted by the instance.
        **/
       Uint32 numberExtRef() const
       {
           return inst.mem->numberExtRef;
       }
   
       /**
        * Gets the pointer of an external reference of the instance.
        * Warning: The pointer is purely returned. No management is done.
        * @parm idx The index of the external reference.
        **/
       SCMOInstance* getExtRef(Uint32 idx) const;
   
       /**
        * Sets a pointer of an external reference of the instance.
        * Warning: The pointer is purely returned. No management is done.
        * @parm idx The index of the external reference.
        * @parm ptr The pointer to an SCMOInstance
        **/
       void putExtRef(Uint32 idx,SCMOInstance* ptr);
   
 private: private:
  
     void Ref()     void Ref()
Line 699 
Line 813 
     };     };
  
  
       void _copyOnWrite()
       {
           if ( 1 < inst.hdr->refCount.get() )
           {
               SCMBInstance_Main * oldRef = inst.hdr;
               fprintf(stderr,"!! Copy on Write (%d) !!\n",
                       inst.hdr->refCount.get() );
               _clone();
               if (oldRef->refCount.decAndTestIfZero())
               {
                   // printf("\ninst.hdr->refCount=%u\n",inst.hdr->refCount.get());
                   // All external references has to be destroyed.
                   _destroyExternalReferencesInternal((SCMBMgmt_Header*)oldRef);
                   // The class has also be dereferenced.
                   delete oldRef->theClass;
                   free((void*)oldRef);
                   oldRef=0;
               }
           }
       };
   
       void _clone();
   
     void _destroyExternalReferences();     void _destroyExternalReferences();
  
       void _destroyExternalKeyBindings();
   
     void _copyExternalReferences();     void _copyExternalReferences();
  
       void _setExtRefIndex(Uint64 idx);
   
     void _initSCMOInstance(SCMOClass* pClass);     void _initSCMOInstance(SCMOClass* pClass);
  
     void _setCIMInstance(const CIMInstance& cimInstance);     void _setCIMInstance(const CIMInstance& cimInstance);
  
       void _getPropertyAt(
           Uint32 pos,
           SCMBValue** value,
           const char ** valueBase,
           SCMBClassProperty ** propDef) const;
   
     SCMO_RC _getPropertyAtNodeIndex(     SCMO_RC _getPropertyAtNodeIndex(
         Uint32 pos,         Uint32 pos,
         const char** pname,         const char** pname,
Line 741 
Line 888 
         const SCMBValue& scmbV,         const SCMBValue& scmbV,
         const char * base);         const char * base);
  
       static SCMOClass _getSCMOClass(
           const CIMObjectPath& theCIMObj,
           const char* altNS,
           Uint64 altNSlength);
   
     CIMProperty _getCIMPropertyAtNodeIndex(Uint32 nodeIdx) const;     CIMProperty _getCIMPropertyAtNodeIndex(Uint32 nodeIdx) const;
  
     void _setCIMObjectPath(const CIMObjectPath& cimObj);     void _setCIMObjectPath(const CIMObjectPath& cimObj);
Line 776 
Line 928 
         Uint64 lenNS,         Uint64 lenNS,
         Union& u);         Union& u);
  
       static void _setExtRefIndex(SCMBUnion* pInst, SCMBMgmt_Header** pmem);
   
     SCMO_RC _getKeyBindingDataAtNodeIndex(     SCMO_RC _getKeyBindingDataAtNodeIndex(
         Uint32 node,         Uint32 node,
         const char** pname,         const char** pname,
Line 856 
Line 1010 
     friend class SCMOClass;     friend class SCMOClass;
     friend class SCMODump;     friend class SCMODump;
     friend class SCMOXmlWriter;     friend class SCMOXmlWriter;
       friend class SCMOStreamer;
 }; };
  
   inline void SCMOInstance::_getPropertyAt(
       Uint32 pos,
       SCMBValue** value,
       const char ** valueBase,
       SCMBClassProperty ** propDef) const
   {
       Uint32 node;
       // is filtering on ?
       if (inst.hdr->flags.isFiltered)
       {
           // Get absolut pointer to property filter index map of the instance
           Uint32* propertyFilterIndexMap =
           (Uint32*)&(inst.base[inst.hdr->propertyFilterIndexMap.start]);
           // get the real node index of the property.
           node = propertyFilterIndexMap[pos];
       }
       else
       {
           // the index is used as node index.
           node = pos;
       }
   
       SCMBValue* theInstPropNodeArray =
           (SCMBValue*)&(inst.base[inst.hdr->propertyArray.start]);
   
       // create a pointer to property node array of the class.
       Uint64 idx = inst.hdr->theClass->cls.hdr->propertySet.nodeArray.start;
       SCMBClassPropertyNode* theClassPropNodeArray =
           (SCMBClassPropertyNode*)&(inst.hdr->theClass->cls.base)[idx];
   
       // return the absolute pointer to the property definition
       *propDef= &(theClassPropNodeArray[node].theProperty);
   
       // need check if property set or not, if not set use the default value
       if (theInstPropNodeArray[node].flags.isSet)
       {
           // return the absolute pointer to the property value in the instance
           *value = &(theInstPropNodeArray[node]);
           *valueBase = inst.base;
       }
       else
       {
           // return the absolute pointer to
           *value = &(theClassPropNodeArray[node].theProperty.defaultValue);
           *valueBase = inst.hdr->theClass->cls.base;
       }
   }
   
   inline void SCMOInstance::getSCMBValuePropertyAt(
       Uint32 pos,
       SCMBValue** value,
       const char ** valueBase,
       SCMBClassProperty ** propDef,
       const char ** propDefBase) const
   {
       _getPropertyAt(pos,value,valueBase,propDef);
   
       *propDefBase = inst.hdr->theClass->cls.base;
   }
   
   inline SCMO_RC SCMOInstance::getKeyBindingAtUnresolved(
           Uint32 node,
           const char** pname,
           Uint32 & pnameLen,
           CIMType& type,
           const SCMBUnion** pdata,
           const char** valueBase) const
   {
       SCMO_RC rc = _getKeyBindingDataAtNodeIndex(node,pname,pnameLen,type,pdata);
       *valueBase = inst.base;
       return rc;
   }
   
   
  
 #define PEGASUS_ARRAY_T SCMOInstance #define PEGASUS_ARRAY_T SCMOInstance
 # include <Pegasus/Common/ArrayInter.h> # include <Pegasus/Common/ArrayInter.h>


Legend:
Removed from v.1.1.2.24  
changed lines
  Added in v.1.1.2.41

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2