[Mobies-commit] [commit] r4313 - in GReAT/trunk: Etc Tools/MetaGME2UMX Tools/MetaGME2UMX/MetaGME2UMX Interpreters

ksmyth at redhat3.isis.vanderbilt.edu ksmyth at redhat3.isis.vanderbilt.edu
Wed Aug 27 12:41:25 CDT 2014


Author: ksmyth
Date: Wed Aug 27 12:41:25 2014
New Revision: 4313

Log:
Optimize MetaGME2Uml perf: use nested transactions, memoize

Modified:
   GReAT/trunk/Etc/GReATVersion.h
   GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UML.h
   GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UML_2.cpp
   GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UMX Interpreters/MetaGME2UML_interpreterVS2010.vcxproj
   GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UMX Interpreters/RawComponent.cpp
   GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UMX Interpreters/UdmApp.cpp

Modified: GReAT/trunk/Etc/GReATVersion.h
==============================================================================
--- GReAT/trunk/Etc/GReATVersion.h	Tue Jul 22 10:27:43 2014	(r4312)
+++ GReAT/trunk/Etc/GReATVersion.h	Wed Aug 27 12:41:25 2014	(r4313)
@@ -1,5 +1,5 @@
 #ifndef GREAT_VERSION
 #define GREAT_VERSION "1.7.7"
-#define GREAT_VERSION_RC_STR "1, 7, 7, 0"
-#define GREAT_VERSION_RC 1,7,7,0
+#define GREAT_VERSION_RC_STR "1, 7, 7, 10"
+#define GREAT_VERSION_RC 1,7,7,10
 #endif // GREAT_VERSION

Modified: GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UML.h
==============================================================================
--- GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UML.h	Tue Jul 22 10:27:43 2014	(r4312)
+++ GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UML.h	Wed Aug 27 12:41:25 2014	(r4313)
@@ -97,6 +97,11 @@
 	std::map< MetaGME::ParadigmSheet, UmlGME::ClassDiagram> mapMetaGME2UmlGME_Paradigm;
 
 	std::map< UmlGME::ClassBase, std::pair< UmlGME::Class, UmlGME::Class> > mapUmlClass2ImplInheritBases;
+
+	std::map<MetaGME::BaseFCO, std::set<MetaGME::BaseFCO>> m_SelfAndSupertypeMemo;
+	std::set<MetaGME::BaseFCO> GetSelfAndSupertypes(const MetaGME::BaseFCO& fco);
+	std::set<MetaGME::BaseFCO> GetContainersAndTheirSubtypes(const MetaGME::BaseFCO& fco);
+	friend struct CanBeContainedInSameContainer;
 	map_CIP2CB implMap, intfMap, reguMap;
 	map_CIP2CIP equivMap;
 	

Modified: GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UML_2.cpp
==============================================================================
--- GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UML_2.cpp	Tue Jul 22 10:27:43 2014	(r4312)
+++ GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UML_2.cpp	Wed Aug 27 12:41:25 2014	(r4313)
@@ -1191,8 +1191,14 @@
 }
 
 
-std::set<MetaGME::BaseFCO> GetSelfAndSupertypes(const MetaGME::BaseFCO& fco)
+std::set<MetaGME::BaseFCO> MetaGME2UML::GetSelfAndSupertypes(const MetaGME::BaseFCO& fco)
 {
+	auto memo = m_SelfAndSupertypeMemo.find(fco);
+	if (memo != m_SelfAndSupertypeMemo.end())
+	{
+		return memo->second;
+	}
+
 	std::set<MetaGME::BaseFCO> basefcos_processed;
 	std::deque<MetaGME::BaseFCO> basefcos_to_process;
 	basefcos_to_process.push_back(fco);
@@ -1216,6 +1222,7 @@
 		trans(binhs_, superfcos, std::mem_fun_ref(&MetaGME::BaseInheritance::bsrc_end));
 		std::copy(superfcos.begin(), superfcos.end(), std::back_inserter(basefcos_to_process));
 	}
+	m_SelfAndSupertypeMemo.emplace(std::pair<MetaGME::BaseFCO, std::set<MetaGME::BaseFCO> >(fco, basefcos_processed));
 	return basefcos_processed;
 }
 
@@ -1228,7 +1235,7 @@
 	}
 };
 
-std::set<MetaGME::BaseFCO> GetContainersAndTheirSubtypes(const MetaGME::BaseFCO& fco) {
+std::set<MetaGME::BaseFCO> MetaGME2UML::GetContainersAndTheirSubtypes(const MetaGME::BaseFCO& fco) {
 	std::set<std::set<MetaGME::Containment>> superContainments;
 	trans(GetSelfAndSupertypes(fco), superContainments, GetAllConnectionsFunctor(std::mem_fun_ref(&MetaGME::BaseFCO::dstContainment)));
 	std::set<MetaGME::Containment> containments = flatten_set(superContainments);
@@ -1241,11 +1248,12 @@
 
 struct CanBeContainedInSameContainer : public std::unary_function<const MetaGME::BaseFCO, bool> {
 	const MetaGME::BaseFCO& fco1;
-	CanBeContainedInSameContainer(const MetaGME::BaseFCO& fco1) : fco1(fco1) { }
+	MetaGME2UML& metaGME2UML;
+	CanBeContainedInSameContainer(const MetaGME::BaseFCO& fco1, MetaGME2UML& metaGME2UML) : fco1(fco1), metaGME2UML(metaGME2UML) { }
 	
 	bool operator ()(const MetaGME::BaseFCO& fco2) const {
-		std::set<MetaGME::BaseFCO> fco1_containers = GetContainersAndTheirSubtypes(fco1);
-		std::set<MetaGME::BaseFCO> fco2_containers = GetContainersAndTheirSubtypes(fco2);
+		std::set<MetaGME::BaseFCO> fco1_containers = metaGME2UML.GetContainersAndTheirSubtypes(fco1);
+		std::set<MetaGME::BaseFCO> fco2_containers = metaGME2UML.GetContainersAndTheirSubtypes(fco2);
 
 		std::set<MetaGME::BaseFCO> common_container_subtypes;
 		std::set_intersection(fco1_containers.begin(), fco1_containers.end(),
@@ -1260,7 +1268,9 @@
 	std::set<MetaGME::BaseFCO> subtypes;
 	std::set<MetaGME::BaseFCO> subtypes_ = GetSelfAndSubtypes(connend);
 	std::set<std::set<MetaGME::BaseFCO>> subtypesSupers_;
-	trans(subtypes_, subtypesSupers_, GetSelfAndSupertypes);
+
+	auto self = this;
+	trans(subtypes_, subtypesSupers_, [&self](const MetaGME::BaseFCO& fco) -> std::set<MetaGME::BaseFCO> { return self->GetSelfAndSupertypes(fco); });
 	std::set<MetaGME::BaseFCO> subtypesSupers = flatten_set(subtypesSupers_);
 	std::copy(subtypesSupers.begin(), subtypesSupers.end(), set_inserter(subtypes_));
 	// connections cannot be ports
@@ -1307,7 +1317,8 @@
 	std::copy(port_containers.begin(), port_containers.end(), set_inserter(port_container_refs_base));
 
 	std::set<std::set<MetaGME::BaseFCO> > port_container_supertypes_;
-	trans(port_container_refs_base, port_container_supertypes_, GetSelfAndSupertypes);
+	auto self = this;
+	trans(port_container_refs_base, port_container_supertypes_, [&self](const MetaGME::BaseModel& fco) -> std::set<MetaGME::BaseFCO> { return self->GetSelfAndSupertypes(fco); });
 	std::set<MetaGME::BaseFCO> port_container_supertypes = flatten_set(port_container_supertypes_);
 #ifdef _DEBUG
 	std::vector<std::string> port_container_supertypes_str;
@@ -1330,7 +1341,7 @@
 	for (std::set<MetaGME::BaseFCO>::iterator baserefport_containerIt = baserefport_containers_.begin(); baserefport_containerIt != baserefport_containers_.end();)
 	{
 		std::set<MetaGME::BaseFCO> subtypes = GetSelfAndSubtypes(*baserefport_containerIt);
-		if (std::any_of(subtypes.begin(), subtypes.end(), CanBeContainedInSameContainer(connection)))
+		if (std::any_of(subtypes.begin(), subtypes.end(), CanBeContainedInSameContainer(connection, *this)))
 			baserefport_containerIt++;
 		else
 			baserefport_containers_.erase(baserefport_containerIt++);

Modified: GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UMX Interpreters/MetaGME2UML_interpreterVS2010.vcxproj
==============================================================================
--- GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UMX Interpreters/MetaGME2UML_interpreterVS2010.vcxproj	Tue Jul 22 10:27:43 2014	(r4312)
+++ GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UMX Interpreters/MetaGME2UML_interpreterVS2010.vcxproj	Wed Aug 27 12:41:25 2014	(r4313)
@@ -384,8 +384,8 @@
     </Midl>
     <ClCompile>
       <AdditionalOptions>/Zm200  %(AdditionalOptions)</AdditionalOptions>
-      <Optimization>MinSpace</Optimization>
-      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+      <Optimization>MaxSpeed</Optimization>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
       <AdditionalIncludeDirectories>$(GREAT_PATH)\Libraries\MetaGMEAPI\;$(GREAT_PATH)\Libraries\UmlGMEAPI\;..\;.\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>NDEBUG;WIN32;_WINDOWS;_USRDLL;GME_INTERPRETER_USED;_CRT_SECURE_NO_WARNINGS;UML_CLASS_DIAGRAM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
@@ -483,7 +483,7 @@
     <ClCompile>
       <AdditionalOptions>/Zm200  %(AdditionalOptions)</AdditionalOptions>
       <Optimization>MinSpace</Optimization>
-      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
       <AdditionalIncludeDirectories>$(GREAT_PATH)\Libraries\MetaGMEAPI\;$(GREAT_PATH)\Libraries\UmlGMEAPI\;..\;.\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>NDEBUG;WIN32;_WINDOWS;_USRDLL;GME_INTERPRETER_USED;_CRT_SECURE_NO_WARNINGS;UML_CLASS_DIAGRAM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <StringPooling>true</StringPooling>
@@ -566,73 +566,17 @@
   <ItemGroup>
     <ClCompile Include="$(GME_ROOT)\Sdk\Bon\Common\ComHelp.cpp" />
     <ClCompile Include="$(GME_ROOT)\Sdk\Bon\Common\ComponentDll.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='DebugVS9|Win32'">Disabled</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='DebugVS9|x64'">Disabled</Optimization>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='DebugVS9|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='DebugVS9|x64'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MinSpace</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='ReleaseVS9|Win32'">MinSpace</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='ReleaseVS9|x64'">MinSpace</Optimization>
     </ClCompile>
     <ClCompile Include="$(GME_ROOT)\SDK\BON\Common\ComponentObj.cpp" />
     <ClCompile Include="$(GME_ROOT)\SDK\BON\Common\Console.cpp" />
     <ClCompile Include="$(GME_ROOT)\Sdk\Bon\Common\Exceptions.cpp" />
     <ClCompile Include="..\MetaGME2UML.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='DebugVS9|Win32'">Disabled</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='DebugVS9|x64'">Disabled</Optimization>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='DebugVS9|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='DebugVS9|x64'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MinSpace</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='ReleaseVS9|Win32'">MinSpace</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='ReleaseVS9|x64'">MinSpace</Optimization>
     </ClCompile>
     <ClCompile Include="..\MetaGME2UML_2.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='DebugVS9|Win32'">Disabled</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='DebugVS9|x64'">Disabled</Optimization>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='DebugVS9|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='DebugVS9|x64'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MinSpace</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='ReleaseVS9|Win32'">MinSpace</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='ReleaseVS9|x64'">MinSpace</Optimization>
     </ClCompile>
     <ClCompile Include="RawComponent.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='DebugVS9|Win32'">Disabled</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='DebugVS9|x64'">Disabled</Optimization>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='DebugVS9|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='DebugVS9|x64'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MinSpace</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='ReleaseVS9|Win32'">MinSpace</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='ReleaseVS9|x64'">MinSpace</Optimization>
     </ClCompile>
     <ClCompile Include="StdAfx.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='DebugVS9|Win32'">Disabled</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='DebugVS9|x64'">Disabled</Optimization>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='DebugVS9|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='DebugVS9|x64'">EnableFastChecks</BasicRuntimeChecks>
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='DebugVS9|Win32'">Create</PrecompiledHeader>
@@ -641,10 +585,6 @@
       <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">stdafx.h</PrecompiledHeaderFile>
       <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='DebugVS9|Win32'">stdafx.h</PrecompiledHeaderFile>
       <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='DebugVS9|x64'">stdafx.h</PrecompiledHeaderFile>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MinSpace</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='ReleaseVS9|Win32'">MinSpace</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='ReleaseVS9|x64'">MinSpace</Optimization>
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='ReleaseVS9|Win32'">Create</PrecompiledHeader>
@@ -655,18 +595,6 @@
       <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='ReleaseVS9|x64'">stdafx.h</PrecompiledHeaderFile>
     </ClCompile>
     <ClCompile Include="UdmApp.cpp">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='DebugVS9|Win32'">Disabled</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='DebugVS9|x64'">Disabled</Optimization>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='DebugVS9|Win32'">EnableFastChecks</BasicRuntimeChecks>
-      <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='DebugVS9|x64'">EnableFastChecks</BasicRuntimeChecks>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MinSpace</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MinSpace</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='ReleaseVS9|Win32'">MinSpace</Optimization>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='ReleaseVS9|x64'">MinSpace</Optimization>
     </ClCompile>
   </ItemGroup>
   <ItemGroup>

Modified: GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UMX Interpreters/RawComponent.cpp
==============================================================================
--- GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UMX Interpreters/RawComponent.cpp	Tue Jul 22 10:27:43 2014	(r4312)
+++ GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UMX Interpreters/RawComponent.cpp	Wed Aug 27 12:41:25 2014	(r4313)
@@ -84,56 +84,17 @@
 		}
 
 		// Setting up Udm	
-#ifdef _DYNAMIC_META
-	#ifdef _DYNAMIC_META_DOM
-			// Loading the meta for the project
-			UdmDom::DomDataNetwork  ddnMeta(Uml::diagram);	
-			Uml::Diagram theUmlDiagram;
-
-			// Opening the XML meta of the project
-			ddnMeta.OpenExisting(config.metaPath,"UML.XSD", Udm::CHANGES_LOST_DEFAULT);
-			
-			// Casting the DataNetwork to diagram
-			theUmlDiagram = Uml::Diagram::Cast(ddnMeta.GetRootObject());
-			
-			// Creating the UDM diagram
-			Udm::UdmDiagram udmDataDiagram;
-			udmDataDiagram.dgr = &theUmlDiagram;
-			udmDataDiagram.init = dummy;
-		
-	#elif defined _DYNAMIC_META_STATIC
-			// Loading the meta for the project
-			UdmStatic::StaticDataNetwork  dnsMeta(Uml::diagram);	
-			Uml::Diagram theUmlDiagram;
-
-			// Opening the static meta of the project
-			dnsMeta.OpenExisting(config.metaPath, "", Udm::CHANGES_LOST_DEFAULT);
-			
-			// Casting the DataNetwork to diagram
-			theUmlDiagram = Uml::Diagram::Cast(dnsMeta.GetRootObject());
-			
-			// Creating the UDM diagram
-			Udm::UdmDiagram udmDataDiagram;
-			udmDataDiagram.dgr = &theUmlDiagram;
-			udmDataDiagram.init = dummy;
-
-	#else
-			ASSERT((0,"Nor _DYNAMIC_META_DOM either _DYNAMIC_META_STATIC defined for dynamic loading"));
-	#endif
-			// Loading the project
-			UdmGme::GmeDataNetwork dngBackend(udmDataDiagram);		
-		
-#else
 		using namespace META_NAMESPACE;
 		
 		// Loading the project			
 		UdmGme::GmeDataNetwork dngBackend(META_NAMESPACE::diagram);				
 					
-#endif
 		try
 		{
+			COMTHROW(ccpProject->BeginTransactionInNewTerr(TRANSACTION_NON_NESTED, &terr));
+			try {
 			// Opening backend
-			dngBackend.OpenExisting(ccpProject, Udm::CHANGES_LOST_DEFAULT);
+			dngBackend.OpenExisting(ccpProject, Udm::CHANGES_LOST_DEFAULT, true);
 			
 
 			CComPtr<IMgaFCO> ccpFocus(currentobj);
@@ -145,93 +106,28 @@
 
 			std::set<Udm::Object> selectedObjects;
 
-			CComPtr<IMgaFCOs> ccpSelObject(selectedobjs);
-
-			MGACOLL_ITERATE(IMgaFCO,ccpSelObject){		 
-				Udm::Object currObj;
-				if(MGACOLL_ITER)
-				{
-					currObj=dngBackend.Gme2Udm(MGACOLL_ITER);
-				}
-			 selectedObjects.insert(currObj);
-			}MGACOLL_ITERATE_END;
-
-#ifdef _ACCESS_MEMORY
-			// Creating Cache
-	#ifdef _DYNAMIC_META
-			UdmStatic::StaticDataNetwork dnsCacheBackend(udmDataDiagram);
-	#else
-			UdmStatic::StaticDataNetwork dnsCacheBackend(META_NAMESPACE::diagram);
-	#endif
-			
-			const Uml::Class & safeType = Uml::SafeTypeContainer::GetSafeType(dngBackend.GetRootObject().type());
-
-			dnsCacheBackend.CreateNew("","",safeType, Udm::CHANGES_LOST_DEFAULT); 
-			
-			Udm::Object nullObject(&Udm::__null);
-			UdmUtil::copy_assoc_map copyAssocMap;
-			copyAssocMap[currentObject]=nullObject; // currentObject may be null object
-		
-			for(set<Udm::Object>::iterator p_CurrSelObject=selectedObjects.begin();
-				p_CurrSelObject!=selectedObjects.end();p_CurrSelObject++)
-			{
-					pair<Udm::Object const, Udm::Object> item(*p_CurrSelObject, nullObject);
-
-					pair<UdmUtil::copy_assoc_map::iterator, bool> insRes = copyAssocMap.insert(item);
+			if (selectedobjs) {
+				CComPtr<IMgaFCOs> ccpSelObject(selectedobjs);
 
-					if (!insRes.second)
+				MGACOLL_ITERATE(IMgaFCO,ccpSelObject){		 
+					Udm::Object currObj;
+					if(MGACOLL_ITER)
 					{
-						ASSERT(NULL);
+						currObj=dngBackend.Gme2Udm(MGACOLL_ITER);
 					}
-
-			}
-
-			// Copying from GME to memory
-			UdmUtil::CopyObjectHierarchy(
-				dngBackend.GetRootObject().__impl(),
-				dnsCacheBackend.GetRootObject().__impl(),
-				&dnsCacheBackend,
-				copyAssocMap);
-		
-			// Searching for focus object
-			Udm::Object currentObjectCache;
-			UdmUtil::copy_assoc_map::iterator currObject = copyAssocMap.find(currentObject);
-			if (currObject != copyAssocMap.end()) // It is in the map
-			{
-				currentObjectCache=currObject->second;
+				 selectedObjects.insert(currObj);
+				}MGACOLL_ITERATE_END;
 			}
 
-
-			// Searching for selected objects
-			set<Udm::Object> selectedObjectsCache;
-
-			for( p_CurrSelObject=selectedObjects.begin();
-				p_CurrSelObject!=selectedObjects.end();p_CurrSelObject++)
-			{
-				Udm::Object object;
-				UdmUtil::copy_assoc_map::iterator currSelObjectIt = copyAssocMap.find(*p_CurrSelObject);
-				if (currSelObjectIt != copyAssocMap.end()) // It is in the map
-				{
-					object=currSelObjectIt->second;
-					selectedObjectsCache.insert(object);
-				}	
-			}
-	
-
-			// Closing GME backend
-			dngBackend.CloseNoUpdate();
-
-			// Calling the main entry point
-			CUdmApp::UdmMain(&dnsCacheBackend,currentObjectCache,selectedObjectsCache,param);
-			// Close cache backend
-			dnsCacheBackend.CloseNoUpdate();
-
-#else
 			// Calling the main entry point
 			CUdmApp::UdmMain(&dngBackend,currentObject,selectedObjects,param);
 			// Closing backend
 			dngBackend.CloseWithUpdate();
-#endif
+			} catch (...) {
+				ccpProject->AbortTransaction();
+				throw;
+			}
+			COMTHROW(ccpProject->CommitTransaction());
 
 		}
 		catch(udm_exception &exc) 
@@ -245,7 +141,7 @@
 			if (interactive)
 				AfxMessageBox(exc.what());
 			GMEConsole::Console::Error::WriteLine(exc.what());
-			return S_FALSE;
+			return E_FAIL;
 		}
 	}
 	catch(udm_exception &exc) 
@@ -253,7 +149,7 @@
 		if (interactive)
 			AfxMessageBox(exc.what());
 		GMEConsole::Console::Error::WriteLine(exc.what());
-		return S_FALSE;
+		return E_FAIL;
 	}			 
 	catch(...) 
 	{

Modified: GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UMX Interpreters/UdmApp.cpp
==============================================================================
--- GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UMX Interpreters/UdmApp.cpp	Tue Jul 22 10:27:43 2014	(r4312)
+++ GReAT/trunk/Tools/MetaGME2UMX/MetaGME2UMX Interpreters/UdmApp.cpp	Wed Aug 27 12:41:25 2014	(r4313)
@@ -137,11 +137,25 @@
 			
 		//AfxMessageBox(filename);
 		Udm::Object rf;
+		CComPtr<IMgaProject> mgaProject;
 
 #ifdef UML_CLASS_DIAGRAM
 
 		Udm::SmartDataNetwork umlGme(UmlGME::diagram);
-		umlGme.CreateNew((string)filename,"Uml", UmlGME::RootFolder::meta, Udm::CHANGES_LOST_DEFAULT);
+		if (filename.Right(4) == ".mga") {
+			mgaProject.CoCreateInstance(L"Mga.MgaProject", NULL, CLSCTX_INPROC);
+			COMTHROW(mgaProject->Create(_bstr_t(CString(_T("MGA=")) + filename), _bstr_t(L"Uml")));
+			CComPtr<IMgaTerritory> terr;
+			COMTHROW(mgaProject->BeginTransactionInNewTerr(TRANSACTION_NON_NESTED, &terr));
+			umlGme.OpenExisting_([&](const Udm::UdmDiagram &metaroot, Udm::UdmProject* pr) -> Udm::DataNetwork* {
+				std::auto_ptr<UdmGme::GmeDataNetwork> dn1(new UdmGme::GmeDataNetwork(metaroot, pr));
+				dn1->OpenExisting(mgaProject, Udm::CHANGES_LOST_DEFAULT, true);
+				return dn1.release();
+			});
+		} else {
+			umlGme.CreateNew((string)filename,"Uml", UmlGME::RootFolder::meta, Udm::CHANGES_LOST_DEFAULT);
+		}
+		try {
 		UmlGME::RootFolder urf = UmlGME::RootFolder::Cast(umlGme.GetRootObject());
 		urf.name() = rname;
 		UmlGME::Package pac = UmlGME::Package::Create(urf);
@@ -176,7 +190,7 @@
 		UmlGME::Package pac = UmlGME::Package::Create(trf);
 		pac.name() = "New"+rname+_itoa(pac.uniqueId(),id,10);
 		rf = pac;
-
+		try {
 #endif
 		{
 		MetaGME2UML transformer(*p_backend, umlGme, rf, param);
@@ -187,6 +201,20 @@
 
 
 		umlGme.CloseWithUpdate();
+		} catch (...) {
+			if (mgaProject)
+			{
+				mgaProject->AbortTransaction();
+				mgaProject->Close(VARIANT_TRUE);
+			}
+			throw;
+		}
+		if (mgaProject)
+		{
+			COMTHROW(mgaProject->CommitTransaction());
+			COMTHROW(mgaProject->Save(L"", VARIANT_TRUE));
+			COMTHROW(mgaProject->Close(VARIANT_TRUE));
+		}
 		
 		CString fn;
 		if(param != GME_SILENT_MODE)


More information about the Mobies-commit mailing list