[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