[Mobies-commit] [commit] r3958 - in UDM/trunk: include src/UdmBase src/UdmDom
endre at redhat1.isis.vanderbilt.edu
endre at redhat1.isis.vanderbilt.edu
Mon Nov 21 03:55:33 CST 2011
Author: endre
Date: Mon Nov 21 03:55:33 2011
New Revision: 3958
Log:
Move some method definitions from headers into sources.
Modified:
UDM/trunk/include/UdmBase.h
UDM/trunk/include/UdmDom.h
UDM/trunk/src/UdmBase/UdmBase.cpp
UDM/trunk/src/UdmDom/UdmDom.cpp
Modified: UDM/trunk/include/UdmBase.h
==============================================================================
--- UDM/trunk/include/UdmBase.h Mon Nov 21 03:53:29 2011 (r3957)
+++ UDM/trunk/include/UdmBase.h Mon Nov 21 03:55:33 2011 (r3958)
@@ -2699,44 +2699,11 @@
#ifdef UDM_RVALUE
Object(Object&& a) : impl(a.impl) { UDM_ASSERT(impl != NULL); a.impl = NULL; }
#endif
- ~Object()
- {
-#ifdef UDM_RVALUE
- if (impl)
-#endif
- {
- UDM_ASSERT(impl != NULL);
- impl->release();
-#ifdef _DEBUG
- impl = NULL;
-#endif
- }
- }
-
- const Object &operator =(const Object &a)
- {
-
- UDM_ASSERT(a.impl != NULL);
- ObjectImpl *t = a.impl->clone();
-
- UDM_ASSERT(impl != NULL);
- impl->release();
-
- impl = t;
- return a;
- }
+ ~Object();
+ const Object &operator =(const Object &a);
#ifdef UDM_RVALUE
- Object& operator=(Object&& a)
- {
- if (this != &a) {
- if (impl != NULL)
- impl->release();
- impl = a.impl;
- a.impl = NULL;
- }
- return *this;
- }
+ Object& operator=(Object&& a);
#endif
static Object Cast(const Object &a, const ::Uml::Class &meta) { return __Cast(a, meta); }
@@ -2809,70 +2776,12 @@
a.bs_Classes().bs_end
a.bs_Classes().as_end
*/
- set<Object> getAssociation(const ::Uml::AssociationRole &meta, int mode = TARGETFROMPEER) const
- {
- set<Object> ret;
-
- vector<ObjectImpl*> a = impl->getAssociation(meta, mode);
- vector<ObjectImpl*>::const_iterator i = a.begin();
- while( i != a.end() )
- {
- ret.insert(*i);
- ++i;
- }
+ set<Object> getAssociation(const ::Uml::AssociationRole &meta, int mode = TARGETFROMPEER) const;
+ void setAssociation(const ::Uml::AssociationRole &meta, const set<Object> &a, int mode = TARGETFROMPEER);
- return ret;
- }
-
-
-
- void setAssociation(const ::Uml::AssociationRole &meta, const set<Object> &a, int mode = TARGETFROMPEER)
- {
- vector<ObjectImpl*> b;
-
- set<Object>::const_iterator i = a.begin();
- while( i != a.end() )
- {
- b.push_back((*i).impl);
- ++i;
- }
-
- impl->setAssociation(meta, b, mode);
- }
-
- void connectTo(const ::Uml::AssociationRole &meta, const Object &target, const vector<Object> &refs = vector<Object>())
- {
- vector<ObjectImpl*> refs_impl;
-
- vector<Object>::const_iterator i = refs.begin();
- while ( i != refs.end() )
- {
- refs_impl.push_back((*i).impl);
- ++i;
- }
-
- impl->connectTo(meta, target.impl, refs_impl);
- }
-
- void disconnectFrom(const ::Uml::AssociationRole &meta, const Object &peer)
- {
- impl->disconnectFrom(meta, peer.impl);
- }
-
- vector<Object> getConnectingChain(const ::Uml::AssociationRole &meta, const Object &peer) const
- {
- vector<Object> ret;
-
- vector<ObjectImpl*> a = impl->getConnectingChain(meta, peer.impl);
- vector<ObjectImpl*>::const_iterator i = a.begin();
- while( i != a.end() )
- {
- ret.push_back(*i);
- ++i;
- }
-
- return ret;
- }
+ void connectTo(const ::Uml::AssociationRole &meta, const Object &target, const vector<Object> &refs = vector<Object>());
+ void disconnectFrom(const ::Uml::AssociationRole &meta, const Object &peer);
+ vector<Object> getConnectingChain(const ::Uml::AssociationRole &meta, const Object &peer) const;
// --- type
@@ -3305,168 +3214,53 @@
public:
//made public for CORBA to reach the inside Static DN
- DataNetwork *testdn() const
- {
- if(dn) return dn;
- throw udm_exception("Missing data network");
- }
+ DataNetwork *testdn() const;
- SmartDataNetwork(const UdmDiagram &metainfo, UdmProject * pr = NULL) :
- DataNetwork(metainfo, pr)
- {
- dn = NULL;
- str_based = false;
- }
+ SmartDataNetwork(const UdmDiagram &metainfo, UdmProject * pr = NULL);
- ~SmartDataNetwork()
- {
- delete dn;
- }
+ ~SmartDataNetwork();
- SmartDataNetwork & operator=(SmartDataNetwork &a)
- {
- if (dn && a.dn)
- {
- *dn = *(a.dn);
- }
- else
- {
- throw udm_exception("Either the source or the destination SmartDataNetwork does not exist.");
- }
- return *this;
- };
-
- SmartDataNetwork & operator=(DataNetwork &a)
- {
- if (dn )
- {
- *dn = a;
- }
- else
- {
- throw udm_exception("The destination SmartDataNetwork does not exist.");
- }
- return *this;
- };
+ SmartDataNetwork & operator=(SmartDataNetwork &a);
+ SmartDataNetwork & operator=(DataNetwork &a);
virtual void CreateNew(const string &systemname,
- const string &metalocator, const ::Uml::Class &rootclass,
- enum BackendSemantics sem = CHANGES_PERSIST_ALWAYS) {
- if(dn) throw udm_exception("DataNetwork is already open");
- std::auto_ptr<DataNetwork> dn1(CreateBackend(systemname, metaroot, pr));
- if(!dn1.get()) throw udm_exception("Cannot deduce Udm backend type from " + systemname + "\n"
- "Available backends: " + DumpBackendNames().c_str());
- dn1->CreateNew(systemname, metalocator, rootclass, sem);
- dn = dn1.release();
- }
+ const string &metalocator, const ::Uml::Class &rootclass,
+ enum BackendSemantics sem = CHANGES_PERSIST_ALWAYS);
virtual void OpenExisting(const string &systemname,
- const string &metalocator = "",
- enum BackendSemantics sem = CHANGES_PERSIST_ALWAYS) {
- if(dn) throw udm_exception("DataNetwork is already open");
- std::auto_ptr<DataNetwork> dn1(CreateBackend(systemname, metaroot,pr));
- if(!dn1.get()) throw udm_exception("Cannot deduce Udm backend type from " + systemname + "\n"
- "Available backends: " + DumpBackendNames().c_str());
- dn1->OpenExisting(systemname, metalocator, sem);
- dn = dn1.release();
- }
- virtual void CloseWithUpdate()
- {
- testdn()->CloseWithUpdate();
-
- if (str_based)
- {
- str = dn->Str();
- str_based = false;
- }
- delete dn;
- dn = NULL;
- }
-
- virtual void CloseNoUpdate()
- {
- testdn()->CloseNoUpdate();
-
- if (str_based)
- {
- str = dn->Str();
- str_based = false;
- }
-
- delete dn;
- dn = NULL;
- }
- virtual void SaveAs(string systemname) { testdn()->SaveAs(systemname); }
- virtual void CloseAs(string systemname)
- {
- testdn()->CloseAs(systemname);
- if (str_based)
- {
- str = dn->Str();
- str_based = false;
- }
-
- delete dn;
- dn = NULL;
- }
-
- bool isOpen() { return dn ? dn->isOpen() : false; }
-// transaction control
- virtual void CommitEditSequence() { testdn()->CommitEditSequence(); }
- virtual void AbortEditSequence() { testdn()->AbortEditSequence(); }
-
-// basic access
- Object GetRootObject() const { return testdn()->GetRootObject(); }
- virtual Object ObjectById(Object::uniqueId_type t) {
- return testdn()->ObjectById(t);
- }
- const ::Uml::Diagram &GetRootMeta() const {
- return testdn()->GetRootMeta();
- }
- virtual bool IsTypeSafe() { return testdn()->IsTypeSafe();};
-
- virtual UdmProject* GetProject()
- {
- return testdn()->GetProject();
- };
-
- virtual void setStaticUdmProject(StaticUdmProject* _pr)
- {
- testdn()->setStaticUdmProject(_pr);
- };
-
- virtual void resetStaticUdmProject()
- {
- testdn()->resetStaticUdmProject();
- };
-
+ const string &metalocator = "",
+ enum BackendSemantics sem = CHANGES_PERSIST_ALWAYS);
+ virtual void CloseWithUpdate();
+ virtual void CloseNoUpdate();
+ virtual void SaveAs(string systemname);
+ virtual void CloseAs(string systemname);
+
+ bool isOpen();
+
+ // transaction control
+ virtual void CommitEditSequence();
+ virtual void AbortEditSequence();
+
+ // basic access
+ Object GetRootObject() const;
+ virtual Object ObjectById(Object::uniqueId_type t);
+
+ const ::Uml::Diagram &GetRootMeta() const;
+
+ virtual bool IsTypeSafe();
+
+ virtual UdmProject* GetProject();
+ virtual void setStaticUdmProject(StaticUdmProject* _pr);
+ virtual void resetStaticUdmProject();
//string support
virtual void CreateNewToString(const string &metalocator, const ::Uml::Class &rootclass,
- enum Udm::BackendSemantics sem = Udm::CHANGES_PERSIST_ALWAYS)
- {
- if(dn) throw udm_exception("DataNetwork is already open");
- std::auto_ptr<DataNetwork> dn1(CreateBackend("string_dom.xml", metaroot, pr));//the name can be anything, which ends in .xml. String backend is supported only by DOM
- if(dn1.get() == NULL) throw udm_exception(string("Cannot deduce Udm backend type .xml from available backends: ") + DumpBackendNames().c_str());
-
- dn1->CreateNewToString(metalocator, rootclass,sem);
- dn = dn1.release();
- str_based = true;
- };
+ enum Udm::BackendSemantics sem = Udm::CHANGES_PERSIST_ALWAYS);
virtual void OpenExistingFromString(string &str,
- const string &metalocator,
- enum Udm::BackendSemantics sem = Udm::CHANGES_PERSIST_ALWAYS)
- {
- if(dn) throw udm_exception("DataNetwork is already open");
- std::auto_ptr<DataNetwork> dn1(CreateBackend("string_dom.xml", metaroot, pr));//the name can be anything, which ends in .xml. String backend is supported only by DOM
- if(dn1.get() == NULL) throw udm_exception(string("Cannot deduce Udm backend type .xml from available backends: ") + DumpBackendNames().c_str());
-
- dn1->OpenExistingFromString(str,metalocator,sem);
- dn = dn1.release();
- str_based = true;
- };
- virtual const string & Str(){return str;};
- virtual set<Object> GetAllInstancesOf(const ::Uml::Class& meta){return testdn()->GetAllInstancesOf(meta);};
+ const string &metalocator,
+ enum Udm::BackendSemantics sem = Udm::CHANGES_PERSIST_ALWAYS);
+ virtual const string & Str();
+ virtual set<Object> GetAllInstancesOf(const ::Uml::Class& meta);
};
Modified: UDM/trunk/include/UdmDom.h
==============================================================================
--- UDM/trunk/include/UdmDom.h Mon Nov 21 03:53:29 2011 (r3957)
+++ UDM/trunk/include/UdmDom.h Mon Nov 21 03:55:33 2011 (r3958)
@@ -128,14 +128,14 @@
// multiple roles in its container simultaneously (but always at least one)
// otherwise, a new role assignment removes prior role
static bool MultiRolesEnabled() { return multiroles; }
- static bool EnableMultiRoles(bool p) { multiroles = p; return p;}
+ static bool EnableMultiRoles(bool p) { multiroles = p; return p; }
UDM_DLL Object ObjectById(Object::uniqueId_type id);
- static Udm::DataNetwork *factory(const Udm::UdmDiagram &meta, Udm::UdmProject* project = NULL)
+ static Udm::DataNetwork *factory(const Udm::UdmDiagram &meta, Udm::UdmProject* project = NULL)
{
return new DomDataNetwork(meta, project);
- }
+ }
static const string FindFile(const string file_name);
@@ -154,33 +154,13 @@
struct str_xsd_storage
{
-
typedef map<const string, const string> str_str_map;
static UDM_DLL str_str_map static_xsd_container;
- static void StoreXsd(const string key, const string & xsd_str)
- {
- str_str_map::value_type item(key, xsd_str);
- pair<str_str_map::const_iterator, bool> ins_res = static_xsd_container.insert(item);
- if (!ins_res.second && (xsd_str!=ins_res.first->second)) // only if it differs from the stored one Kalmar
- throw udm_exception(string("An XSD by that name is already stored with a different content: ") + key);
-
-
- };
-
- static void RemoveXsd(const string key)
- {
-
- static_xsd_container.erase(key);
-
- }
- static void ClearXsdStorage()
- {
-
- static_xsd_container.clear();
-
- }
+ static void StoreXsd(const string &key, const string &xsd_str);
+ static void RemoveXsd(const string &key);
+ static void ClearXsdStorage();
};
Modified: UDM/trunk/src/UdmBase/UdmBase.cpp
==============================================================================
--- UDM/trunk/src/UdmBase/UdmBase.cpp Mon Nov 21 03:53:29 2011 (r3957)
+++ UDM/trunk/src/UdmBase/UdmBase.cpp Mon Nov 21 03:55:33 2011 (r3958)
@@ -119,7 +119,46 @@
const ::Uml::CompositionChildRole NULLCHILDROLE;
const ::Uml::CompositionParentRole NULLPARENTROLE;
-
+
+ UDM_DLL Object::~Object()
+ {
+#ifdef UDM_RVALUE
+ if (impl)
+#endif
+ {
+ UDM_ASSERT(impl != NULL);
+ impl->release();
+#ifdef _DEBUG
+ impl = NULL;
+#endif
+ }
+ }
+
+ UDM_DLL const Object & Object::operator =(const Object &a)
+ {
+ UDM_ASSERT(a.impl != NULL);
+ ObjectImpl *t = a.impl->clone();
+
+ UDM_ASSERT(impl != NULL);
+ impl->release();
+
+ impl = t;
+ return a;
+ }
+
+#ifdef UDM_RVALUE
+ UDM_DLL Object& Object::operator=(Object&& a)
+ {
+ if (this != &a) {
+ if (impl != NULL)
+ impl->release();
+ impl = a.impl;
+ a.impl = NULL;
+ }
+ return *this;
+ }
+#endif
+
UDM_DLL ObjectImpl *Object::__Cast(const Object &a, const ::Uml::Class &meta)
{
if(a && !Uml::IsDerivedFrom(a.type(), meta) )
@@ -160,6 +199,69 @@
return parent.impl->createChild(role, Uml::SafeTypeContainer::GetSafeType(meta));
}
+ UDM_DLL set<Object> Object::getAssociation(const ::Uml::AssociationRole &meta, int mode) const
+ {
+ set<Object> ret;
+
+ vector<ObjectImpl*> a = impl->getAssociation(meta, mode);
+ vector<ObjectImpl*>::const_iterator i = a.begin();
+ while( i != a.end() )
+ {
+ ret.insert(*i);
+ ++i;
+ }
+
+ return ret;
+ }
+
+ UDM_DLL void Object::setAssociation(const ::Uml::AssociationRole &meta, const set<Object> &a, int mode)
+ {
+ vector<ObjectImpl*> b;
+
+ set<Object>::const_iterator i = a.begin();
+ while( i != a.end() )
+ {
+ b.push_back((*i).impl);
+ ++i;
+ }
+
+ impl->setAssociation(meta, b, mode);
+ }
+
+ UDM_DLL void Object::connectTo(const ::Uml::AssociationRole &meta, const Object &target, const vector<Object> &refs)
+ {
+ vector<ObjectImpl*> refs_impl;
+
+ vector<Object>::const_iterator i = refs.begin();
+ while ( i != refs.end() )
+ {
+ refs_impl.push_back((*i).impl);
+ ++i;
+ }
+
+ impl->connectTo(meta, target.impl, refs_impl);
+ }
+
+ UDM_DLL void Object::disconnectFrom(const ::Uml::AssociationRole &meta, const Object &peer)
+ {
+ impl->disconnectFrom(meta, peer.impl);
+ }
+
+ UDM_DLL vector<Object> Object::getConnectingChain(const ::Uml::AssociationRole &meta, const Object &peer) const
+ {
+ vector<Object> ret;
+
+ vector<ObjectImpl*> a = impl->getConnectingChain(meta, peer.impl);
+ vector<ObjectImpl*>::const_iterator i = a.begin();
+ while( i != a.end() )
+ {
+ ret.push_back(*i);
+ ++i;
+ }
+
+ return ret;
+ }
+
UDM_DLL Object Object::archetype() const
{
return impl->getArchetype();
@@ -1910,6 +2012,170 @@
}
+ DataNetwork* SmartDataNetwork::testdn() const
+ {
+ if(dn) return dn;
+ throw udm_exception("Missing data network");
+ }
+
+ SmartDataNetwork::SmartDataNetwork(const UdmDiagram &metainfo, UdmProject * pr) :
+ DataNetwork(metainfo, pr)
+ {
+ dn = NULL;
+ str_based = false;
+ }
+
+ SmartDataNetwork::~SmartDataNetwork()
+ {
+ delete dn;
+ }
+
+ SmartDataNetwork & SmartDataNetwork::operator=(SmartDataNetwork &a)
+ {
+ if (dn && a.dn)
+ *dn = *(a.dn);
+ else
+ throw udm_exception("Either the source or the destination SmartDataNetwork does not exist.");
+ return *this;
+ }
+
+ SmartDataNetwork & SmartDataNetwork::operator=(DataNetwork &a)
+ {
+ if (dn)
+ *dn = a;
+ else
+ throw udm_exception("The destination SmartDataNetwork does not exist.");
+ return *this;
+ };
+
+ void SmartDataNetwork::CreateNew(const string &systemname,
+ const string &metalocator, const ::Uml::Class &rootclass,
+ enum BackendSemantics sem)
+ {
+ if (dn)
+ throw udm_exception("DataNetwork is already open");
+
+ std::auto_ptr<DataNetwork> dn1(CreateBackend(systemname, metaroot, pr));
+ if (!dn1.get())
+ throw udm_exception("Cannot deduce Udm backend type from " + systemname + "\n"
+ "Available backends: " + DumpBackendNames().c_str());
+ dn1->CreateNew(systemname, metalocator, rootclass, sem);
+ dn = dn1.release();
+ }
+
+ void SmartDataNetwork::OpenExisting(const string &systemname,
+ const string &metalocator,
+ enum BackendSemantics sem) {
+ if (dn)
+ throw udm_exception("DataNetwork is already open");
+
+ std::auto_ptr<DataNetwork> dn1(CreateBackend(systemname, metaroot,pr));
+ if (!dn1.get())
+ throw udm_exception("Cannot deduce Udm backend type from " + systemname + "\n"
+ "Available backends: " + DumpBackendNames().c_str());
+ dn1->OpenExisting(systemname, metalocator, sem);
+ dn = dn1.release();
+ }
+
+ void SmartDataNetwork::CloseWithUpdate()
+ {
+ testdn()->CloseWithUpdate();
+
+ if (str_based)
+ {
+ str = dn->Str();
+ str_based = false;
+ }
+
+ delete dn;
+ dn = NULL;
+ }
+
+ void SmartDataNetwork::CloseNoUpdate()
+ {
+ testdn()->CloseNoUpdate();
+
+ if (str_based)
+ {
+ str = dn->Str();
+ str_based = false;
+ }
+
+ delete dn;
+ dn = NULL;
+ }
+
+ void SmartDataNetwork::SaveAs(string systemname)
+ {
+ testdn()->SaveAs(systemname);
+ }
+
+ void SmartDataNetwork::CloseAs(string systemname)
+ {
+ testdn()->CloseAs(systemname);
+
+ if (str_based)
+ {
+ str = dn->Str();
+ str_based = false;
+ }
+
+ delete dn;
+ dn = NULL;
+ }
+
+ bool SmartDataNetwork::isOpen() { return dn ? dn->isOpen() : false; }
+
+ void SmartDataNetwork::CommitEditSequence() { testdn()->CommitEditSequence(); }
+ void SmartDataNetwork::AbortEditSequence() { testdn()->AbortEditSequence(); }
+
+ Object SmartDataNetwork::GetRootObject() const { return testdn()->GetRootObject(); }
+ Object SmartDataNetwork::ObjectById(Object::uniqueId_type t) { return testdn()->ObjectById(t); }
+
+ const ::Uml::Diagram& SmartDataNetwork::GetRootMeta() const { return testdn()->GetRootMeta(); }
+ bool SmartDataNetwork::IsTypeSafe() { return testdn()->IsTypeSafe(); }
+
+ UdmProject* SmartDataNetwork::GetProject() { return testdn()->GetProject(); }
+ void SmartDataNetwork::setStaticUdmProject(StaticUdmProject* _pr) { testdn()->setStaticUdmProject(_pr); }
+ void SmartDataNetwork::resetStaticUdmProject() { testdn()->resetStaticUdmProject(); }
+
+ void SmartDataNetwork::CreateNewToString(const string &metalocator, const ::Uml::Class &rootclass,
+ enum Udm::BackendSemantics sem)
+ {
+ if (dn)
+ throw udm_exception("DataNetwork is already open");
+
+ //the name can be anything, which ends in .xml. String backend is supported only by DOM
+ std::auto_ptr<DataNetwork> dn1(CreateBackend("string_dom.xml", metaroot, pr));
+ if (dn1.get() == NULL)
+ throw udm_exception(string("Cannot deduce Udm backend type .xml from available backends: ") + DumpBackendNames().c_str());
+
+ dn1->CreateNewToString(metalocator, rootclass, sem);
+ dn = dn1.release();
+ str_based = true;
+ }
+
+ void SmartDataNetwork::OpenExistingFromString(string &str,
+ const string &metalocator,
+ enum Udm::BackendSemantics sem)
+ {
+ if (dn)
+ throw udm_exception("DataNetwork is already open");
+
+ //the name can be anything, which ends in .xml. String backend is supported only by DOM
+ std::auto_ptr<DataNetwork> dn1(CreateBackend("string_dom.xml", metaroot, pr));
+ if (dn1.get() == NULL)
+ throw udm_exception(string("Cannot deduce Udm backend type .xml from available backends: ") + DumpBackendNames().c_str());
+
+ dn1->OpenExistingFromString(str,metalocator,sem);
+ dn = dn1.release();
+ str_based = true;
+ }
+
+ const string & SmartDataNetwork::Str() {return str; }
+ set<Object> SmartDataNetwork::GetAllInstancesOf(const ::Uml::Class& meta) { return testdn()->GetAllInstancesOf(meta); }
+
+
//the map for static metadepository
map<string, const UdmDiagram*>* MetaDepository::meta_dep = NULL;
Modified: UDM/trunk/src/UdmDom/UdmDom.cpp
==============================================================================
--- UDM/trunk/src/UdmDom/UdmDom.cpp Mon Nov 21 03:53:29 2011 (r3957)
+++ UDM/trunk/src/UdmDom/UdmDom.cpp Mon Nov 21 03:55:33 2011 (r3958)
@@ -4363,5 +4363,22 @@
};
+ void str_xsd_storage::StoreXsd(const string &key, const string &xsd_str)
+ {
+ str_str_map::value_type item(key, xsd_str);
+ pair<str_str_map::const_iterator, bool> ins_res = static_xsd_container.insert(item);
+ if (!ins_res.second && (xsd_str!=ins_res.first->second)) // only if it differs from the stored one Kalmar
+ throw udm_exception(string("An XSD by that name is already stored with a different content: ") + key);
+ }
+
+ void str_xsd_storage::RemoveXsd(const string &key)
+ {
+ static_xsd_container.erase(key);
+ }
+
+ void str_xsd_storage::ClearXsdStorage()
+ {
+ static_xsd_container.clear();
+ }
}
More information about the Mobies-commit
mailing list