[Mobies-commit] [commit] r3589 - in UDM/trunk/src: Udm UdmBase
ksmyth at redhat1.isis.vanderbilt.edu
ksmyth at redhat1.isis.vanderbilt.edu
Tue Dec 14 14:36:49 CST 2010
Author: ksmyth
Date: Tue Dec 14 14:36:48 2010
New Revision: 3589
Log:
Fix Udm-72: CommonAncestorClasses was wrong so udm.exe generated too many parent accessors. Generate a parent() method even if CommonAncestorClasses returns more than 1 ancestor
Modified:
UDM/trunk/src/Udm/ClassGen.cpp
UDM/trunk/src/UdmBase/UmlExt.cpp
Modified: UDM/trunk/src/Udm/ClassGen.cpp
==============================================================================
--- UDM/trunk/src/Udm/ClassGen.cpp Fri Dec 3 11:24:29 2010 (r3588)
+++ UDM/trunk/src/Udm/ClassGen.cpp Tue Dec 14 14:36:48 2010 (r3589)
@@ -868,26 +868,19 @@
if(!parent_defined)
{
set< ::Uml::Class> ans = Uml::CommonAncestorClasses(Uml::AncestorContainerClasses(c));
- if(ans.empty())
+ if (ans.size() == 1)
{
+ ::Uml::Class ans_class = (::Uml::Class)(*ans.begin());
+ // Udm::ParentAttr<T> parent() const { return Udm::ParentAttr<T>(impl, Udm::NULLPARENTROLE); }
+ meth_defs.push_back( boost::format("Udm::ParentAttr< %1%> parent() const { return Udm::ParentAttr< %1%>(impl, Udm::NULLPARENTROLE); }") % UmlClassCPPName(ans_class) );
+ } else {
// Udm::ParentAttr<Udm::Object> parent() const { return Udm::ParentAttr<Udm::Object>(impl, Udm::NULLPARENTROLE); }
meth_defs.push_back( boost::format("Udm::ParentAttr<Udm::Object> parent() const { return Udm::ParentAttr<Udm::Object>(impl, Udm::NULLPARENTROLE); }") );
- }
- else
- {
- if (ans.size() == 1)
- {
- ::Uml::Class ans_class = (::Uml::Class)(*ans.begin());
- // Udm::ParentAttr<T> parent() const { return Udm::ParentAttr<T>(impl, Udm::NULLPARENTROLE); }
- meth_defs.push_back( boost::format("Udm::ParentAttr< %1%> parent() const { return Udm::ParentAttr< %1%>(impl, Udm::NULLPARENTROLE); }") % UmlClassCPPName(ans_class) );
- }
- else
+
+ for(set< ::Uml::Class>::iterator ccc = ans.begin(); ccc != ans.end(); ccc++)
{
- for(set< ::Uml::Class>::iterator ccc = ans.begin(); ccc != ans.end(); ccc++)
- {
- // Udm::ParentAttr<T> T_parent() const { return Udm::ParentAttr<T>(impl, Udm::NULLPARENTROLE); }
- meth_defs.push_back( boost::format("Udm::ParentAttr< %1%> %2%_parent() const { return Udm::ParentAttr< %1%>(impl, Udm::NULLPARENTROLE); }") % UmlClassCPPName(*ccc) % (string) ccc->name() );
- }
+ // Udm::ParentAttr<T> T_parent() const { return Udm::ParentAttr<T>(impl, Udm::NULLPARENTROLE); }
+ meth_defs.push_back( boost::format("Udm::ParentAttr< %1%> %2%_parent() const { return Udm::ParentAttr< %1%>(impl, Udm::NULLPARENTROLE); }") % UmlClassCPPName(*ccc) % (string) ccc->name() );
}
}
}
Modified: UDM/trunk/src/UdmBase/UmlExt.cpp
==============================================================================
--- UDM/trunk/src/UdmBase/UmlExt.cpp Fri Dec 3 11:24:29 2010 (r3588)
+++ UDM/trunk/src/UdmBase/UmlExt.cpp Tue Dec 14 14:36:48 2010 (r3589)
@@ -215,23 +215,6 @@
if(cs.begin() != cs.end()) {
set<Class>::const_iterator ci = cs.begin();
ret = AncestorClasses(*ci);
-/*
-#ifdef ERASE_RETURNS_ITERATOR
- while(++ci != cs.end()) {
- for(set<Class>::iterator ri = ret.begin(); ri != ret.end();) {
- if(!::Uml::IsDerivedFrom(*ci, *ri)) ri = ret.erase(ri);
- else ++ri;
- }
- }
- for(set<Class>::iterator ri = ret.begin(); ri != ret.end();) {
- for(set<Class>::iterator ri2 = ret.begin(); ri2 != ret.end(); ri2++) {
- if(ri != ri2 && ::Uml::IsDerivedFrom(*ri, *ri2)) break;
- }
- if(ri2 == ret.end()) ri = ret.erase(ri);
- else ++ri;
- }
-#else
-*/
while(++ci != cs.end()) {
for(set<Class>::iterator ri = ret.begin(); ri != ret.end();) {
set<Class>::iterator riact = ri++;
@@ -243,13 +226,12 @@
for(set<Class>::iterator ri = ret.begin(); ri != ret.end();) {
set<Class>::iterator riact = ri++;
for(set<Class>::iterator ri2 = ret.begin(); ri2 != ret.end(); ri2++) {
- if(riact != ri2 && ::Uml::IsDerivedFrom(*riact, *ri2)) {
+ if(riact != ri2 && ::Uml::IsDerivedFrom(*ri2, *riact)) {
ret.erase(riact);
break;
}
}
}
-//#endif
}
return ret;
@@ -581,26 +563,21 @@
UDM_DLL Composition matchChildToParent(Class c, Class p)
{
- Composition comp;
- set<Class> pancs = AncestorClasses(p);
- set<Class> cancs = AncestorClasses(c);
- for(set<Class>::iterator j = cancs.begin(); j != cancs.end(); j++) {
- set<CompositionChildRole> cr = (*j).childRoles();
- for(set<CompositionChildRole>::iterator i = cr.begin(); i != cr.end(); i++) {
- if(pancs.find(theOther(*i).target()) != pancs.end()) {
- if(comp) {
- return NULL;
- }
- comp = (*i).parent();
- }
+ Composition comp;
+ set<Class> pancs = AncestorClasses(p);
+ set<Class> cancs = AncestorClasses(c);
+ for(set<Class>::iterator j = cancs.begin(); j != cancs.end(); j++) {
+ set<CompositionChildRole> cr = (*j).childRoles();
+ for(set<CompositionChildRole>::iterator i = cr.begin(); i != cr.end(); i++) {
+ if(pancs.find(theOther(*i).target()) != pancs.end()) {
+ if(comp) {
+ return NULL;
}
- }
-#ifdef DEBUG
- if(!comp) {
- return NULL;
- }
-#endif
- return comp;
+ comp = (*i).parent();
+ }
+ }
+ }
+ return comp;
}
UDM_DLL bool IsAssocClass(const Class &cl)
More information about the Mobies-commit
mailing list