⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cimclassrep.cpp

📁 Pegasus is an open-source implementationof the DMTF CIM and WBEM standards. It is designed to be por
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        for (Uint32 i = 0, n = _methods.size(); i < n; i++)        {            CIMMethod& method = _methods[i];            Uint32 index = superClass.findMethod(method.getName());            if (index == PEG_NOT_FOUND)            {                Resolver::resolveMethod(method, context, nameSpace);            }            else            {                CIMConstMethod superClassMethod = superClass.getMethod(index);                Resolver::resolveMethod(                    method, context, nameSpace, superClassMethod);            }        }        //----------------------------------------------------------------------        // Now prepend all methods inherited from the super-class (that        // are not overriden by this sub-class).        //----------------------------------------------------------------------        for (Uint32 i = 0, m = 0, n = superClass.getMethodCount(); i < n; i++)        {            CIMConstMethod superClassMethod = superClass.getMethod(i);            // Find the method in *this* class; if not found, then clone and            // insert it (setting the propagated flag). Otherwise, change            // the class-origin and propagated flag accordingly.            Uint32 index = PEG_NOT_FOUND;            /**********************     KS move to simpler version            for (Uint32 j = m, n = _methods.size(); j < n; j++)            {                if (_methods[j].getName() == superClassMethod.getName())                {                    index = j;                    break;                }            }            // If method exists in super class but not in this one, then            // clone and insert it. Otherwise, the method's class origin            // has already been set above.            if (index == PEG_NOT_FOUND)            {                CIMMethod method = superClassMethod.clone();                method.setPropagated(true);                _methods.insert(m++, method);            }            */            if ((index = findMethod(superClassMethod.getName())) ==                PEG_NOT_FOUND)            {                CIMMethod method = superClassMethod.clone();                method.setPropagated(true);                _methods.insert(m++, method);            }        }        //----------------------------------------------------------------------        // Validate the qualifiers of this class:        //----------------------------------------------------------------------        _qualifiers.resolve(            context,            nameSpace,            isAssociation() ? CIMScope::ASSOCIATION : CIMScope::CLASS,            false,            superClass._rep->_qualifiers,            true);    }    else     // No SuperClass exsts    {        //----------------------------------------------------------------------        // Resolve each property:        //----------------------------------------------------------------------        for (Uint32 i = 0, n = _properties.size(); i < n; i++)        {             Resolver::resolveProperty(                 _properties[i], context, nameSpace, false, true);             _properties[i].setClassOrigin(getClassName());             _properties[i].setPropagated(false);        }        //----------------------------------------------------------------------        // Resolve each method:        //----------------------------------------------------------------------        for (Uint32 i = 0, n = _methods.size(); i < n; i++)        {            Resolver::resolveMethod (_methods[i], context, nameSpace);        }        //----------------------------------------------------------------------        // Resolve the qualifiers:        //----------------------------------------------------------------------        CIMQualifierList dummy;        _qualifiers.resolve(            context,            nameSpace,            isAssociation() ? CIMScope::ASSOCIATION : CIMScope::CLASS,            false,            dummy,            true);    }    // _resolved = true;}CIMInstance CIMClassRep::buildInstance(Boolean includeQualifiers,    Boolean includeClassOrigin,    const CIMPropertyList& propertyList) const{    // Create the new instance representation    CIMInstanceRep* newInstanceRep = new CIMInstanceRep(        CIMObjectPath(String::EMPTY,                      CIMNamespaceName(),                      _reference.getClassName()));    // Copy qualifiers if required    if (includeQualifiers)    {        for (Uint32 i = 0 ; i < getQualifierCount() ; i++)        {            newInstanceRep->_qualifiers.add(getQualifier(i).clone());        }    }    newInstanceRep->_properties.reserveCapacity(_properties.size());    // Copy Properties    for (Uint32 i = 0 ; i < _properties.size() ; i++)    {        CIMConstProperty cp = getProperty(i);        CIMName name = cp.getName();        Array<CIMName> pl = propertyList.getPropertyNameArray();        if (propertyList.isNull() || Contains(pl, name))        {            CIMProperty p;            if (includeQualifiers)            {                p = getProperty(i).clone();            }            else            {                p = CIMProperty(cp.getName(),                                cp.getValue(),                                cp.getArraySize(),                                cp.getReferenceClassName(),                                cp.getClassOrigin());            }            // Delete class origin attribute if required            if (!includeClassOrigin)            {                p.setClassOrigin(CIMName());            }            newInstanceRep->_properties.append(p);        }    }    // Create new CIMInstance from CIMInstanceRep    CIMInstance newInstance(newInstanceRep);    return newInstance;}void CIMClassRep::toXml(Buffer& out) const{    // Class opening element:    out << STRLIT("<CLASS ");    out << STRLIT(" NAME=\"") << _reference.getClassName() << STRLIT("\" ");    if (!_superClassName.isNull())        out << STRLIT(" SUPERCLASS=\"") << _superClassName << STRLIT("\" ");    out << STRLIT(">\n");    // Append Class Qualifiers:    _qualifiers.toXml(out);    // Append Property definitions:    for (Uint32 i = 0, n = _properties.size(); i < n; i++)        XmlWriter::appendPropertyElement(out, _properties[i]);    // Append Method definitions:    for (Uint32 i = 0, n = _methods.size(); i < n; i++)        XmlWriter::appendMethodElement(out, _methods[i]);    // Class closing element:    out << STRLIT("</CLASS>\n");}/** toMof prepares an 8-bit string with the MOF for the class.    The BNF for this is:    <pre>    classDeclaration    =    [ qualifierList ]                             CLASS className [ alias ] [ superClass ]                             "{" *classFeature "}" ";"    superClass          =    :" className    classFeature        =    propertyDeclaration | methodDeclaration*/void CIMClassRep::toMof(Buffer& out) const{    // Get and format the class qualifiers    out << STRLIT("\n//    Class ") << _reference.getClassName();    if (_qualifiers.getCount())        out.append('\n');    out.append('\n');    _qualifiers.toMof(out);    // Separate qualifiers from Class Name    out.append('\n');    // output class statement    out << STRLIT("class ") << _reference.getClassName();    if (!_superClassName.isNull())        out << STRLIT(" : ") << _superClassName;    out << STRLIT("\n{");    // format the Properties:    for (Uint32 i = 0, n = _properties.size(); i < n; i++)    {        // Generate MOF if this property not propagated        // Note that the test is required only because        // there is an error in getclass that does not        // test the localOnly flag        // The inital "false" indicates to format as property declaration.        if (!_properties[i].getPropagated())            MofWriter::appendPropertyElement(true, out, _properties[i]);    }    // Format the Methods:  for non-propagated methods    for (Uint32 i = 0, n = _methods.size(); i < n; i++)    {        if (!_methods[i].getPropagated())            MofWriter::appendMethodElement(out, _methods[i]);    }    // Class closing element:    out << STRLIT("\n};\n");}CIMClassRep::CIMClassRep(){}CIMClassRep::CIMClassRep(const CIMClassRep& x) :    CIMObjectRep(x),    _superClassName(x._superClassName){    _methods.reserveCapacity(x._methods.size());    for (Uint32 i = 0, n = x._methods.size(); i < n; i++)        _methods.append(x._methods[i].clone());}Boolean CIMClassRep::identical(const CIMObjectRep* x) const{    if (!CIMObjectRep::identical(x))        return false;    const CIMClassRep* tmprep = dynamic_cast<const CIMClassRep*>(x);    if (!tmprep)        return false;    if (!_superClassName.equal (tmprep->_superClassName))        return false;    //    // Check methods:    //    {        const Array<CIMMethod>& tmp1 = _methods;        const Array<CIMMethod>& tmp2 = tmprep->_methods;        if (tmp1.size() != tmp2.size())            return false;        for (Uint32 i = 0, n = tmp1.size(); i < n; i++)        {            if (!tmp1[i].identical(tmp2[i]))                return false;            if (!tmp1[i].getClassOrigin().equal (tmp2[i].getClassOrigin()))                return false;            if (tmp1[i].getPropagated() != tmp2[i].getPropagated())                return false;        }    }    if (_resolved != tmprep->_resolved)        return false;    return true;}void CIMClassRep::getKeyNames(Array<CIMName>& keyNames) const{    keyNames.clear();    for (Uint32 i = 0, n = getPropertyCount(); i < n; i++)    {        CIMConstProperty property = getProperty(i);        Uint32 index;        if ((index = property.findQualifier(            CIMNameUnchecked("key"))) != PEG_NOT_FOUND)        {            CIMValue value;            value = property.getQualifier (index).getValue ();            if (!value.isNull ())            {                Boolean isKey;                value.get (isKey);                if (isKey)                    keyNames.append(property.getName());            }        }    }}Boolean CIMClassRep::hasKeys() const{    for (Uint32 i = 0, n = getPropertyCount(); i < n; i++)    {        CIMConstProperty property = getProperty(i);        Uint32 index;        if ((index = property.findQualifier(            CIMNameUnchecked("key"))) != PEG_NOT_FOUND)        {            CIMValue value;            value = property.getQualifier (index).getValue ();            if (!value.isNull ())            {                Boolean isKey;                value.get (isKey);                if (isKey)                    return true;            }        }    }    return false;}PEGASUS_NAMESPACE_END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -