[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