Return to Closure.cpp CVS log | Up to [Pegasus] / pegasus / src / Pegasus / Compiler |
File: [Pegasus] / pegasus / src / Pegasus / Compiler / Closure.cpp
(download)
Revision: 1.5, Tue Dec 2 09:01:19 2008 UTC (15 years, 7 months ago) by martin Branch: MAIN CVS Tags: TASK_PEP317_1JUNE_2013, TASK-TASK_PEP362_RestfulService_branch-root, TASK-TASK_PEP362_RestfulService_branch-merged_out_from_trunk, TASK-TASK_PEP362_RestfulService_branch-merged_in_to_trunk, TASK-TASK_PEP362_RestfulService_branch-merged_in_from_branch, TASK-TASK_PEP362_RestfulService_branch-branch, TASK-PEP362_RestfulService-root, TASK-PEP362_RestfulService-merged_out_to_branch, TASK-PEP362_RestfulService-merged_out_from_trunk, TASK-PEP362_RestfulService-merged_in_to_trunk, TASK-PEP362_RestfulService-merged_in_from_branch, TASK-PEP362_RestfulService-branch, TASK-PEP348_SCMO-root, TASK-PEP348_SCMO-merged_out_to_branch, TASK-PEP348_SCMO-merged_out_from_trunk, TASK-PEP348_SCMO-merged_in_to_trunk, TASK-PEP348_SCMO-merged_in_from_branch, TASK-PEP348_SCMO-branch, TASK-PEP317_pullop-root, RELEASE_2_9_2-RC2, RELEASE_2_9_2-RC1, RELEASE_2_9_2, RELEASE_2_9_1-RC1, RELEASE_2_9_1, RELEASE_2_9_0-RC1, RELEASE_2_9_0-FC, RELEASE_2_9_0, RELEASE_2_9-root, RELEASE_2_9-branch, RELEASE_2_13_0-RC2, RELEASE_2_13_0-RC1, RELEASE_2_13_0-FC, RELEASE_2_13_0, RELEASE_2_13-root, RELEASE_2_13-branch, RELEASE_2_12_1-RC1, RELEASE_2_12_1, RELEASE_2_12_0-RC1, RELEASE_2_12_0-FC, RELEASE_2_12_0, RELEASE_2_12-root, RELEASE_2_12-branch, RELEASE_2_11_2-RC1, RELEASE_2_11_2, RELEASE_2_11_1-RC1, RELEASE_2_11_1, RELEASE_2_11_0-RC1, RELEASE_2_11_0-FC, RELEASE_2_11_0, RELEASE_2_11-root, RELEASE_2_11-branch, RELEASE_2_10_1-RC1, RELEASE_2_10_1, RELEASE_2_10_0-RC2, RELEASE_2_10_0-RC1, RELEASE_2_10_0, RELEASE_2_10-root, RELEASE_2_10-branch, PREAUG25UPDATE, POSTAUG25UPDATE, HPUX_TEST, CIMRS_WORK_20130824, BeforeUpdateToHeadOct82011 Branch point for: TASK-PEP317_pullop-branch Changes since 1.4: +6 -6 lines BUG#: 8123 TITLE: Update copyright/license text DESCRIPTION: Fixing trailing spaces in copyright/license text |
//%LICENSE//////////////////////////////////////////////////////////////// // // Licensed to The Open Group (TOG) under one or more contributor license // agreements. Refer to the OpenPegasusNOTICE.txt file distributed with // this work for additional information regarding copyright ownership. // Each contributor licenses this file to you under the OpenPegasus Open // Source License; you may not use this file except in compliance with the // License. // // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the // Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included // in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // ////////////////////////////////////////////////////////////////////////// // //%///////////////////////////////////////////////////////////////////////////// #include "Closure.h" #include <Pegasus/Common/Pair.h> PEGASUS_NAMESPACE_BEGIN // ATTN-MEB: handle ModelCorrespondence() qualifier. static Uint32 _findClass(const Array<CIMClass>& classes, const CIMName& cn) { for (Uint32 i = 0; i < classes.size(); i++) { if (classes[i].getClassName() == cn) return i; } // Not found! return PEG_NOT_FOUND; } static Uint32 _findClass(const Array<CIMName>& classNames, const CIMName& cn) { for (Uint32 i = 0; i < classNames.size(); i++) { if (classNames[i] == cn) return i; } // Not found! return PEG_NOT_FOUND; } static bool _isAssociation(const CIMClass& cc) { Uint32 pos = cc.findQualifier("Association"); if (pos == PEG_NOT_FOUND) return false; CIMConstQualifier cq = cc.getQualifier(pos); if (cq.getType() != CIMTYPE_BOOLEAN || cq.isArray()) return false; return true; } template<class CONTAINER> static int _getEmbeddedClassName(const CONTAINER& c, String& ecn) { ecn.clear(); Uint32 pos = c.findQualifier(PEGASUS_QUALIFIERNAME_EMBEDDEDINSTANCE); if (pos == PEG_NOT_FOUND) return 0; CIMConstQualifier cq = c.getQualifier(pos); if (cq.getType() != CIMTYPE_STRING || cq.isArray()) return -1; cq.getValue().get(ecn); return 0; } static bool _isA( const Array<CIMClass>& classes, const CIMName& superClassName, const CIMName& className) { // If same class, return true now: if (superClassName == className) return true; // Find the class: Uint32 pos = _findClass(classes, className); if (pos == PEG_NOT_FOUND) return false; const CIMClass& cc = classes[pos]; // Get superclass: const CIMName& scn = cc.getSuperClassName(); if (scn.isNull()) return false; return _isA(classes, superClassName, scn); } int Closure( const CIMName& className, const Array<CIMClass>& classes, Array<CIMName>& closure) { // Avoid if class already in closure: if (_findClass(closure, className) != PEG_NOT_FOUND) return 0; // Add class to closure: closure.append(className); // Find the class: Uint32 pos = _findClass(classes, className); if (pos == PEG_NOT_FOUND) return -1; const CIMClass& cc = classes[pos]; // Add superclass to closure: const CIMName& scn = cc.getSuperClassName(); if (!scn.isNull()) { if (Closure(scn, classes, closure) != 0) return -1; } // References and EmbeddedInstances. for (Uint32 i = 0; i < cc.getPropertyCount(); i++) { const CIMConstProperty& cp = cc.getProperty(i); if (cp.getType() == CIMTYPE_REFERENCE) { const CIMName& rcn = cp.getReferenceClassName(); if (Closure(rcn, classes, closure) != 0) return -1; } else if (cp.getType() == CIMTYPE_STRING) { String ecn; if (_getEmbeddedClassName(cp, ecn) != 0) return -1; if (ecn.size() && Closure(ecn, classes, closure) != 0) return -1; } } // Methods and EmbeddedInstances: for (Uint32 i = 0; i < cc.getMethodCount(); i++) { const CIMConstMethod& cm = cc.getMethod(i); if (cm.getType() == CIMTYPE_STRING) { String ecn; if (_getEmbeddedClassName(cm, ecn) != 0) return -1; if (ecn.size() && Closure(ecn, classes, closure) != 0) return -1; } // Parameters and EmbeddedInstances: for (Uint32 j = 0; j < cm.getParameterCount(); j++) { const CIMConstParameter& cp = cm.getParameter(j); if (cp.getType() == CIMTYPE_REFERENCE) { const CIMName& rcn = cp.getReferenceClassName(); if (Closure(rcn, classes, closure) != 0) return -1; } else if (cp.getType() == CIMTYPE_STRING) { String ecn; if (_getEmbeddedClassName(cp, ecn) != 0) return -1; if (ecn.size() && Closure(ecn, classes, closure) != 0) return -1; } } } // Experimental only! #if 0 // Include closure of all assosicate classes that refer to the source // class. for (Uint32 i = 0; i < classes.size(); i++) { const CIMClass& tcc = classes[i]; if (!_isAssociation(tcc)) continue; const CIMName& tcn = tcc.getClassName(); if (_findClass(closure, tcn) != PEG_NOT_FOUND) continue; for (Uint32 j = 0; j < tcc.getPropertyCount(); j++) { const CIMConstProperty& cp = tcc.getProperty(j); if (cp.getType() == CIMTYPE_REFERENCE) { const CIMName& rcn = cp.getReferenceClassName(); if (_isA(classes, rcn, cc.getClassName())) { if (Closure(tcc.getClassName(), classes, closure) != 0) return -1; } } } } #endif return 0; } PEGASUS_NAMESPACE_END
No CVS admin address has been configured |
Powered by ViewCVS 0.9.2 |