📄 cimclassrep.cpp
字号:
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 + -