(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.32 and 1.4

version 1.1.2.32, 2009/11/03 13:11:51 version 1.4, 2011/01/25 11:24:25
Line 79 
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 150 
Line 177 
     SCMOInstance(     SCMOInstance(
         const CIMInstance& cimInstance,         const CIMInstance& cimInstance,
         const char* altNameSpace=0,         const char* altNameSpace=0,
         Uint64 altNSLen=0);          Uint32 altNSLen=0);
  
     /**     /**
      * Builds a SCMOInstance from the given CIMObjectPath copying all data.      * Builds a SCMOInstance from the given CIMObjectPath copying all data.
Line 167 
Line 194 
     SCMOInstance(     SCMOInstance(
         const CIMObjectPath& cimObj,         const CIMObjectPath& cimObj,
         const char* altNameSpace=0,         const char* altNameSpace=0,
         Uint64 altNSLen=0);          Uint32 altNSLen=0);
  
     /**     /**
      * Builds a SCMOInstance from the given CIMObject copying all data.      * Builds a SCMOInstance from the given CIMObject copying all data.
Line 185 
Line 212 
     SCMOInstance(     SCMOInstance(
         const CIMObject& cimObject,         const CIMObject& cimObject,
         const char* altNameSpace=0,         const char* altNameSpace=0,
         Uint64 altNSLen=0);          Uint32 altNSLen=0);
  
     /**     /**
      * Converts the SCMOInstance into a CIMInstance.      * Converts the SCMOInstance into a CIMInstance.
Line 226 
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 262 
Line 289 
         Boolean& isArray,         Boolean& isArray,
         Uint32& size ) const;         Uint32& size ) const;
  
       void getSCMBValuePropertyAt(
           Uint32 pos,
           SCMBValue** value,
           const char ** valueBase,
           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 355 
Line 389 
      */      */
     void buildKeyBindingsFromProperties();     void buildKeyBindingsFromProperties();
  
     /**      //This function is not implemented and now Property filtering is done by
      * Set/replace a property filter on an instance.      //the CIMOM infrastructure
      * The filter is a white list of property names.  
      * A property part of the list can be accessed by name or index and  
      * is eligible to be returned to requester.  
      * Key properties can not be filtered. They are always a part of the  
      * instance. If a key property is not part of the property list,  
      * it will not be filtered out.  
      * @param propertyList Is an NULL terminated array of char* to  
      * property names  
      */  
     void setPropertyFilter(const char **propertyList);     void setPropertyFilter(const char **propertyList);
  
     /**     /**
Line 513 
Line 538 
         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 553 
Line 586 
      * Maybe only the class name and/or name space are available.      * Maybe only the class name and/or name space are available.
      * @return True if the SCMOInstacne is empty, false otherwise.      * @return True if the SCMOInstacne is empty, false otherwise.
      */      */
     Boolean isEmpty( ) const {return (inst.hdr->theClass->isEmpty()); };      Boolean isEmpty( ) const {return (inst.hdr->theClass.ptr->isEmpty()); };
  
     /**     /**
      * Determines whether the instance is used as a class container.      * Determines whether the instance is used as a class container.
Line 589 
Line 622 
      * @param hostName The host name as UTF8.      * @param hostName The host name as UTF8.
      * @param len The strlen of the host name.      * @param len The strlen of the host name.
      */      */
     void setHostName_l(const char* hostName, Uint64 len);      void setHostName_l(const char* hostName, Uint32 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 !
Line 602 
Line 635 
      * @param Return strlen 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(Uint32 & length) const;
  
     /**     /**
      * Sets the provided class name at the instance. By caling this function      * Sets the provided class name at the instance. By caling this function
Line 617 
Line 650 
      * @param className The class name as UTF8.      * @param className The class name as UTF8.
      * @param len The strlen of the name space.      * @param len The strlen of the name space.
      */      */
     void setClassName_l(const char* className, Uint64 len);      void setClassName_l(const char* className, Uint32 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 !
Line 630 
Line 663 
      * @param lenght Return strlen 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(Uint32 & length) const;
  
     /**     /**
      * Sets the provided name space name at the instance.      * Sets the provided name space name at the instance.
Line 647 
Line 680 
      * @param nameSpaceName The name space name as UTF8.      * @param nameSpaceName The name space name as UTF8.
      * @param len The strlen of the name space.      * @param len The strlen of the name space.
      */      */
     void setNameSpace_l(const char* nameSpace, Uint64 len);      void setNameSpace_l(const char* nameSpace, Uint32 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 !
Line 660 
Line 693 
      * @param Return strlen 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(Uint32 & length) const;
  
     /**     /**
      * Is the name space or class name of the instance the origianl values      * Is the name space or class name of the instance the origianl values
Line 719 
Line 752 
         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()
     {     {
         inst.hdr->refCount++;         inst.hdr->refCount++;
         // printf("\ninst.hdr->refCount=%u\n",inst.hdr->refCount.get());  
     };     };
  
     void Unref()     void Unref()
     {     {
         if (inst.hdr->refCount.decAndTestIfZero())         if (inst.hdr->refCount.decAndTestIfZero())
         {         {
             // printf("\ninst.hdr->refCount=%u\n",inst.hdr->refCount.get());  
             // All external references has to be destroyed.             // All external references has to be destroyed.
             _destroyExternalReferences();             _destroyExternalReferences();
             // The class has also be dereferenced.             // The class has also be dereferenced.
             delete inst.hdr->theClass;              delete inst.hdr->theClass.ptr;
             free(inst.base);             free(inst.base);
             inst.base=NULL;             inst.base=NULL;
         }         }
         else  
       };
   
   
       void _copyOnWrite()
         {         {
             // printf("\ninst.hdr->refCount=%u\n",inst.hdr->refCount.get());          if ( 1 < inst.hdr->refCount.get() )
         }          {
               SCMBInstance_Main * oldRef = inst.hdr;
               SCMBMgmt_Header* oldMgmt = inst.mem;
  
               _clone();
               if (oldRef->refCount.decAndTestIfZero())
               {
                   // All external references has to be destroyed.
                   _destroyExternalReferencesInternal(oldMgmt);
                   // The class has also be dereferenced.
                   delete oldRef->theClass.ptr;
                   free((void*)oldRef);
                   oldRef=0;
               }
           }
     };     };
  
       void _clone();
  
     void _destroyExternalReferences();     void _destroyExternalReferences();
  
Line 753 
Line 826 
  
     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);
Line 800 
Line 875 
     static SCMOClass _getSCMOClass(     static SCMOClass _getSCMOClass(
         const CIMObjectPath& theCIMObj,         const CIMObjectPath& theCIMObj,
         const char* altNS,         const char* altNS,
         Uint64 altNSlength);          Uint32 altNSlength);
  
     CIMProperty _getCIMPropertyAtNodeIndex(Uint32 nodeIdx) const;     CIMProperty _getCIMPropertyAtNodeIndex(Uint32 nodeIdx) const;
  
Line 825 
Line 900 
         SCMBMgmt_Header** pmem,         SCMBMgmt_Header** pmem,
         CIMType type,         CIMType type,
         Uint64 startNS,         Uint64 startNS,
         Uint64 lenNS,          Uint32 lenNS,
         Union& u);         Union& u);
  
     static void _setUnionArrayValue(     static void _setUnionArrayValue(
Line 834 
Line 909 
         CIMType type,         CIMType type,
         Uint32& n,         Uint32& n,
         Uint64 startNS,         Uint64 startNS,
         Uint64 lenNS,          Uint32 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 917 
Line 994 
     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( inline void SCMOInstance::_getPropertyAt(
Line 925 
Line 1003 
     const char ** valueBase,     const char ** valueBase,
     SCMBClassProperty ** propDef) const     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* theInstPropNodeArray =
         (SCMBValue*)&(inst.base[inst.hdr->propertyArray.start]);         (SCMBValue*)&(inst.base[inst.hdr->propertyArray.start]);
  
     // create a pointer to property node array of the class.     // create a pointer to property node array of the class.
     Uint64 idx = inst.hdr->theClass->cls.hdr->propertySet.nodeArray.start;      Uint64 idx = inst.hdr->theClass.ptr->cls.hdr->propertySet.nodeArray.start;
     SCMBClassPropertyNode* theClassPropNodeArray =     SCMBClassPropertyNode* theClassPropNodeArray =
         (SCMBClassPropertyNode*)&(inst.hdr->theClass->cls.base)[idx];          (SCMBClassPropertyNode*)&(inst.hdr->theClass.ptr->cls.base)[idx];
  
     // return the absolute pointer to the property definition     // return the absolute pointer to the property definition
     *propDef= &(theClassPropNodeArray[node].theProperty);      *propDef= &(theClassPropNodeArray[pos].theProperty);
  
     // need check if property set or not, if not set use the default value     // need check if property set or not, if not set use the default value
     if (theInstPropNodeArray[node].flags.isSet)      if (theInstPropNodeArray[pos].flags.isSet)
     {     {
         // return the absolute pointer to the property value in the instance         // return the absolute pointer to the property value in the instance
         *value = &(theInstPropNodeArray[node]);          *value = &(theInstPropNodeArray[pos]);
         *valueBase = inst.base;         *valueBase = inst.base;
     }     }
     else     else
     {     {
         // return the absolute pointer to         // return the absolute pointer to
         *value = &(theClassPropNodeArray[node].theProperty.defaultValue);          *value = &(theClassPropNodeArray[pos].theProperty.defaultValue);
         *valueBase = inst.hdr->theClass->cls.base;          *valueBase = inst.hdr->theClass.ptr->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.ptr->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);
       // Adjust size to string length
       if (pnameLen)
       {
           pnameLen--;
       }
       *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>
 #undef PEGASUS_ARRAY_T #undef PEGASUS_ARRAY_T


Legend:
Removed from v.1.1.2.32  
changed lines
  Added in v.1.4

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2