[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