[Mobies-commit] [commit] r4202 - in UDM/trunk/src: UdmBase UdmGme

ksmyth at redhat3.isis.vanderbilt.edu ksmyth at redhat3.isis.vanderbilt.edu
Tue Nov 12 15:58:00 CST 2013


Author: ksmyth
Date: Tue Nov 12 15:58:00 2013
New Revision: 4202

Log:
Some perf optimization

Modified:
   UDM/trunk/src/UdmBase/UmlExt.cpp
   UDM/trunk/src/UdmGme/CommonHeaders.h
   UDM/trunk/src/UdmGme/UdmGme.cpp

Modified: UDM/trunk/src/UdmBase/UmlExt.cpp
==============================================================================
--- UDM/trunk/src/UdmBase/UmlExt.cpp	Tue Nov 12 15:57:43 2013	(r4201)
+++ UDM/trunk/src/UdmBase/UmlExt.cpp	Tue Nov 12 15:58:00 2013	(r4202)
@@ -176,21 +176,25 @@
 			return NULL;
 	}
 
-
-	UDM_DLL set<Class> AncestorClasses(const Class &c)
+	void AncestorClasses(const Class &c, set<Class>& ret)
 	{
-		set<Class> ret;
 		ret.insert(c);
 
 		set<Class> baseTypes = c.baseTypes();
 		set<Class>::iterator i = baseTypes.begin();
 		while( i != baseTypes.end() )
 		{
-			set<Class> a = AncestorClasses(*i);
-			ret.insert(a.begin(), a.end());
+			AncestorClasses(*i, ret);
 
 			++i;
 		}
+	}
+
+	UDM_DLL set<Class> AncestorClasses(const Class &c)
+	{
+		set<Class> ret;
+
+		AncestorClasses(c, ret);
 		
 		return ret;
 	}

Modified: UDM/trunk/src/UdmGme/CommonHeaders.h
==============================================================================
--- UDM/trunk/src/UdmGme/CommonHeaders.h	Tue Nov 12 15:57:43 2013	(r4201)
+++ UDM/trunk/src/UdmGme/CommonHeaders.h	Tue Nov 12 15:58:00 2013	(r4202)
@@ -32,13 +32,13 @@
 #ifdef _DEBUG
 // If IntelliSense reports "Cannot open source file", compile then reopen the project
 // KMS: VS intellisense has a hard time loading from typelib GUID. This fixes it:
-#include "K:\git\UDM\Build\Win32\v100\Debug\obj\src\UdmGme\Core.tlh"
-#include "K:\git\UDM\Build\Win32\v100\Debug\obj\src\UdmGme\Mga.tlh"
-#include "K:\git\UDM\Build\Win32\v100\Debug\obj\src\UdmGme\Meta.tlh"
+#include "..\..\Build\Win32\v100\Debug\obj\src\UdmGme\Core.tlh"
+#include "..\..\Build\Win32\v100\Debug\obj\src\UdmGme\Mga.tlh"
+#include "..\..\Build\Win32\v100\Debug\obj\src\UdmGme\Meta.tlh"
 #else
-#include "K:\git\UDM\Build\Win32\v100\Release\obj\src\UdmGme\Core.tlh"
-#include "K:\git\UDM\Build\Win32\v100\Release\obj\src\UdmGme\Mga.tlh"
-#include "K:\git\UDM\Build\Win32\v100\Release\obj\src\UdmGme\Meta.tlh"
+#include "..\..\Build\Win32\v100\Release\obj\src\UdmGme\Core.tlh"
+#include "..\..\Build\Win32\v100\Release\obj\src\UdmGme\Mga.tlh"
+#include "..\..\Build\Win32\v100\Release\obj\src\UdmGme\Meta.tlh"
 #endif
 #endif
 

Modified: UDM/trunk/src/UdmGme/UdmGme.cpp
==============================================================================
--- UDM/trunk/src/UdmGme/UdmGme.cpp	Tue Nov 12 15:57:43 2013	(r4201)
+++ UDM/trunk/src/UdmGme/UdmGme.cpp	Tue Nov 12 15:58:00 2013	(r4202)
@@ -587,7 +587,7 @@
 	IMgaFCOsPtr RpHelperFindPeerFCOsFromRegistry(const IMgaFCOPtr &self, const string &role_name, bool only_ifNavigable, const GmeDataNetwork *dn)
 	{
 		IMgaFCOsPtr ret;
-		ret.CreateInstance("Mga.MgaFCOs");
+		ret.CreateInstance(__uuidof(MgaFCOs));
 
 		SmartBSTR co_ids = self->RegistryValue[role_name.c_str()];
 		if (!(!co_ids))
@@ -611,14 +611,11 @@
 		return ret;
 	}
 
-	IMgaFCOsPtr RpHelperFindPeerFCOsFromModel(const IMgaFCOPtr &self,
+	void RpHelperFindPeerFCOsFromModel(const IMgaFCOPtr &self,
 		const string &role_name, bool role_isNavigable,
 		const string &other_role_name, bool other_role_isNavigable,
-		const GmeDataNetwork *dn, bool only_ifNavigable)
+		const GmeDataNetwork *dn, bool only_ifNavigable, IMgaFCOsPtr& ret, IMgaReferencePtr& reference)
 	{
-		IMgaFCOsPtr ret;
-		ret.CreateInstance("Mga.MgaFCOs");
-
 		if (self->GetObjType() == OBJTYPE_CONNECTION)
 		{
 			// we are the connection, find the reference (the first reference from
@@ -627,13 +624,13 @@
 			IMgaSimpleConnectionPtr conn(self);
 			IMgaFCOsPtr references;
 
-			SmartBSTR src_role_name = conn->RegistryValue["sRefParent"];
+			SmartBSTR src_role_name = conn->RegistryValue[L"sRefParent"];
 			HRESULT (__stdcall IMgaSimpleConnection::*fn)(IMgaFCOs**);
 			if (!src_role_name) {
-				SmartBSTR dst_role_name = conn->RegistryValue["dRefParent"];
+				SmartBSTR dst_role_name = conn->RegistryValue[L"dRefParent"];
 				if (!dst_role_name)
 				{
-					return ret;
+					return;
 				}
 				fn = role_name.compare(dst_role_name) == 0 ? &IMgaSimpleConnection::get_DstReferences : &IMgaSimpleConnection::get_SrcReferences;
 			} else {
@@ -656,7 +653,8 @@
 				IMgaFCOPtr fco = references->GetItem(1);
 
 				if (!only_ifNavigable || (only_ifNavigable && role_isNavigable))
-					COMTHROW(ret->Append(fco));
+					if (reference == NULL || reference->GetIsEqual(fco))
+						COMTHROW(ret->Append(fco));
 			}
 		}
 		else if (self->GetObjType() == OBJTYPE_REFERENCE)
@@ -669,19 +667,21 @@
 			MGACOLL_ITERATE(IMgaConnPoint, cp)
 			{
 				IMgaSimpleConnectionPtr conn = MGACOLL_ITER->Owner;
-				IMgaFCOsPtr references = RpHelperFindPeerFCOsFromModel(conn, other_role_name, other_role_isNavigable, role_name, role_isNavigable, dn, true);
-				MGACOLL_ITERATE(IMgaFCO, references)
-				{
-					if (reference->GetIsEqual(MGACOLL_ITER) == VARIANT_TRUE)
-					{
-						if (!only_ifNavigable || (only_ifNavigable && role_isNavigable))
-							COMTHROW(ret->Append(conn));
-					};
-				}
-				MGACOLL_ITERATE_END;
+				RpHelperFindPeerFCOsFromModel(conn, other_role_name, other_role_isNavigable, role_name, role_isNavigable, dn, true, ret, reference);
 			}
 			MGACOLL_ITERATE_END;
 		}
+	}
+
+	IMgaFCOsPtr RpHelperFindPeerFCOsFromModel(const IMgaFCOPtr &self,
+		const string &role_name, bool role_isNavigable,
+		const string &other_role_name, bool other_role_isNavigable,
+		const GmeDataNetwork *dn, bool only_ifNavigable)
+	{
+		IMgaFCOsPtr ret;
+		ret.CreateInstance(__uuidof(MgaFCOs));
+
+		RpHelperFindPeerFCOsFromModel(self, role_name, role_isNavigable, other_role_name, other_role_isNavigable, dn, only_ifNavigable, ret, IMgaReferencePtr());
 
 		return ret;
 	}
@@ -794,7 +794,7 @@
 
 				IMgaFCOPtr final_referred(referred);//final referred
 			
-				references.CreateInstance("Mga.MgaFCOs");
+				references.CreateInstance(__uuidof(MgaFCOs));
 							
 				COMTHROW(references->Append(cp_ref_child));
 
@@ -854,7 +854,7 @@
 		if (connection_parent != NULL && peer_parent != NULL)
 		{
 			IMgaFCOsPtr references;
-			references.CreateInstance("Mga.MgaFCOs");
+			references.CreateInstance(__uuidof(MgaFCOs));
 
 			MGACOLL_ITERATE(IMgaFCO, start_refs)
 			{
@@ -1432,7 +1432,7 @@
 		IMgaSimpleConnectionPtr conn(conn_go->self);
 
 		IMgaFCOsPtr pref_refs;
-		pref_refs.CreateInstance("Mga.MgaFCOs");
+		pref_refs.CreateInstance(__uuidof(MgaFCOs));
 		for (vector<Udm::ObjectImpl*>::const_iterator i = refs.begin(); i != refs.end(); i++)
 			COMTHROW(pref_refs->Append(static_cast<GmeObject *>(*i)->self));
 
@@ -1475,13 +1475,13 @@
 	IMgaFCOsPtr RefsChain(const IMgaSimpleConnectionPtr &conn, const string &role_name)
 	{
 		IMgaFCOsPtr ret;
-		ret.CreateInstance("Mga.MgaFCOs");
+		ret.CreateInstance(__uuidof(MgaFCOs));
 
 		IMgaFCOsPtr references;
 
-		SmartBSTR src_role_name = conn->RegistryValue["sRefParent"];
+		SmartBSTR src_role_name = conn->RegistryValue[L"sRefParent"];
 		if (!src_role_name) {
-			SmartBSTR dst_role_name = conn->RegistryValue["dRefParent"];
+			SmartBSTR dst_role_name = conn->RegistryValue[L"dRefParent"];
 			try {
 				references = role_name.compare(dst_role_name) == 0 ? conn->GetDstReferences() : conn->GetSrcReferences();
 			} catch (udm_exception&) {}
@@ -1908,7 +1908,7 @@
 		int cnt = 0;
 		IMgaMetaRolesPtr roles;
 		IMgaFCOsPtr fcos;
-		fcos.CreateInstance("Mga.MgaFCOs");
+		fcos.CreateInstance(__uuidof(MgaFCOs));
 		roles.CreateInstance("Mga.MgaMetaRoles");
 		for(vector<ObjectImpl *>::const_iterator i = aa.begin(); i != aa.end(); i++) 
 		{
@@ -2143,7 +2143,7 @@
 		IMgaFCOsPtr fcos;
 		IMgaMetaRolesPtr roles;
 
-		fcos.CreateInstance("Mga.MgaFCOs");
+		fcos.CreateInstance(__uuidof(MgaFCOs));
 		roles.CreateInstance("Mga.MgaMetaRoles");
 		COMTHROW(fcos->Append(self));
 		COMTHROW(roles->Append(rr));


More information about the Mobies-commit mailing list