[Mobies-commit] [commit] r3959 - UDM/trunk/src/Udm

endre at redhat1.isis.vanderbilt.edu endre at redhat1.isis.vanderbilt.edu
Mon Nov 21 04:01:53 CST 2011


Author: endre
Date: Mon Nov 21 04:01:53 2011
New Revision: 3959

Log:
Make fully qualified other Udm, UdmStatic and UdmGme names in the genereated C++ code.

Modified:
   UDM/trunk/src/Udm/ClassGen.cpp
   UDM/trunk/src/Udm/DiagramGen.cpp
   UDM/trunk/src/Udm/Udm.h
   UDM/trunk/src/Udm/UdmCpp.cpp

Modified: UDM/trunk/src/Udm/ClassGen.cpp
==============================================================================
--- UDM/trunk/src/Udm/ClassGen.cpp	Mon Nov 21 03:55:33 2011	(r3958)
+++ UDM/trunk/src/Udm/ClassGen.cpp	Mon Nov 21 04:01:53 2011	(r3959)
@@ -119,53 +119,76 @@
 					% (string) c.stereotype()
 					);
 
-	// C() {}
-	ctor_defs.push_back( boost::format("%1%() {}") % cl_name );
-
-	// C(::Udm::ObjectImpl *impl) : init_list {}
-	ctor_defs.push_back( boost::format("%1%(::Udm::ObjectImpl *impl) : %2% {}") % cl_name % is.getInitializers(c, "impl") );
-
-	// C(const C &master) : init_list {}
-	ctor_defs.push_back( boost::format("%1%(const %1% &master) : %2% {}") % cl_name % is.getInitializers(c, "master") );
-
-	ctor_defs.push_back( boost::format("#ifdef UDM_RVALUE") );
-	// C(C &&master) : init_list {}
-	ctor_defs.push_back( boost::format("%1%(%1% &&master) : %2% {}") % cl_name % is.getInitializers(c, "master") );
-
-	// static C cast(Udm::Object &&a) { return __Cast(std::move(a), meta); }
-	meth_defs.push_back( boost::format("static %1% Cast(::Udm::Object &&a) { return __Cast(std::move(a), meta); }") % cl_name );
-
-	// C& operator=(C &&a) { Udm::Object::operator =(std::move(a)); return *this; }
-	meth_defs.push_back( boost::format("%1%& operator=(%1% &&a) { ::Udm::Object::operator =(std::move(a)); return *this; }") % cl_name );
-
-	meth_defs.push_back( boost::format("#endif") );
-
-	// static C Cast(const Udm::Object &a) { return __Cast(a, meta); }
-	meth_defs.push_back( boost::format("static %1% Cast(const ::Udm::Object &a) { return __Cast(a, meta); }") % cl_name );
-
-	// static C Create(const Udm::Object &parent, const ::Uml::CompositionChildRole &role = Udm::NULLCHILDROLE) { return __Create(meta, parent, role); }
-	meth_defs.push_back( boost::format("static %1% Create(const ::Udm::Object &parent, const ::Uml::CompositionChildRole &role = ::Udm::NULLCHILDROLE) { return __Create(meta, parent, role); }") % cl_name );
-
-	// C CreateInstance(const Udm::Object &parent, const ::Uml::CompositionChildRole &role = Udm::NULLCHILDROLE) { return __Create(meta, parent, role, impl); }
-	meth_defs.push_back( boost::format("%1% CreateInstance(const ::Udm::Object &parent, const ::Uml::CompositionChildRole &role = ::Udm::NULLCHILDROLE) { return __Create(meta, parent, role, impl); }") % cl_name );
-
-	// Udm::InstantiatedAttr<C> C::Instances() { return Udm::InstantiatedAttr<C>(impl); }
-	meth_defs.push_back( boost::format("::Udm::InstantiatedAttr< %1% > Instances() { return ::Udm::InstantiatedAttr<%1%>(impl); }") % cl_name );
-
-	// template <class Pred> Udm::InstantiatedAttr<C, Pred> Instances_sorted(const Pred &) { return Udm::InstantiatedAttr<C, Pred>(impl); }
-	meth_defs.push_back( boost::format("template <class Pred> ::Udm::InstantiatedAttr<%1%, Pred> Instances_sorted(const Pred &) { return ::Udm::InstantiatedAttr<%1%, Pred>(impl); }") % cl_name );
-
-	// C CreateDerived(const Udm::Object &parent, const ::Uml::CompositionChildRole &role = Udm::NULLCHILDROLE) { return __Create(meta, parent, role, impl, true); }
-	meth_defs.push_back( boost::format("%1% CreateDerived(const ::Udm::Object &parent, const ::Uml::CompositionChildRole &role = ::Udm::NULLCHILDROLE) { return __Create(meta, parent, role, impl, true); }") % cl_name );
-
-	// Udm::DerivedAttr<C> Derived() { return Udm::DerivedAttr<C>(impl); }
-	meth_defs.push_back( boost::format("::Udm::DerivedAttr< %1% > Derived() { return Udm::DerivedAttr<%1%>(impl); }") % cl_name );
-
-	// template <class Pred> Udm::DerivedAttr<C, Pred> Derived_sorted(const Pred &) { return Udm::DerivedAttr<C, Pred>(impl); }
-	meth_defs.push_back( boost::format("template <class Pred> ::Udm::DerivedAttr< %1%, Pred> Derived_sorted(const Pred &) { return ::Udm::DerivedAttr<%1%, Pred>(impl); }") % cl_name );
-
-	// Udm::ArchetypeAttr<C> Archetype() const { return Udm::ArchetypeAttr<C>(impl); }
-	meth_defs.push_back( boost::format("::Udm::ArchetypeAttr< %1% > Archetype() const { return ::Udm::ArchetypeAttr<%1%>(impl); }") % cl_name );
+	// C()
+	ctor_decls.push_back( boost::format("%1%()") % cl_name );
+	// C::C() {}
+	ctor_defs.push_back( boost::format("%1%::%1%() {}") % cl_name );
+
+	// C(::Udm::ObjectImpl *impl)
+	ctor_decls.push_back( boost::format("%1%(::Udm::ObjectImpl *impl)") % cl_name );
+	// C::C(::Udm::ObjectImpl *impl) : init_list {}
+	ctor_defs.push_back( boost::format("%1%::%1%(::Udm::ObjectImpl *impl) : %2% {}") % cl_name % is.getInitializers(c, "impl") );
+
+	// C(const C &master)
+	ctor_decls.push_back( boost::format("%1%(const %1% &master)") % cl_name );
+	// C::C(const C &master) : init_list {}
+	ctor_defs.push_back( boost::format("%1%::%1%(const %1% &master) : %2% {}") % cl_name % is.getInitializers(c, "master") );
+
+	// C(C &&master)
+	ctor_rvalue_decls.push_back( boost::format("%1%(%1% &&master)") % cl_name );
+	// C::C(C &&master) : init_list {}
+	ctor_rvalue_defs.push_back( boost::format("%1%::%1%(%1% &&master) : %2% {}") % cl_name % is.getInitializers(c, "master") );
+
+	// static C Cast(::Udm::Object &&a)
+	meth_rvalue_decls.push_back( boost::format("static %1% Cast(::Udm::Object &&a)") % cl_name );
+	// static C C::Cast(::Udm::Object &&a) { return __Cast(std::move(a), meta); }
+	meth_rvalue_defs.push_back( boost::format("%1% %1%::Cast(::Udm::Object &&a) { return __Cast(std::move(a), meta); }") % cl_name );
+
+	// C& operator=(C &&a)
+	meth_rvalue_decls.push_back( boost::format("%1%& operator=(%1% &&a)") % cl_name );
+	// C& C::operator=(C &&a) { ::Udm::Object::operator =(std::move(a)); return *this; }
+	meth_rvalue_defs.push_back( boost::format("%1%& %1%::operator=(%1% &&a) { ::Udm::Object::operator =(std::move(a)); return *this; }") % cl_name );
+
+	// static C Cast(const ::Udm::Object &a)
+	meth_decls.push_back( boost::format("static %1% Cast(const ::Udm::Object &a)") % cl_name );
+	// static C C::Cast(const ::Udm::Object &a) { return __Cast(a, meta); }
+	meth_defs.push_back( boost::format("%1% %1%::Cast(const ::Udm::Object &a) { return __Cast(a, meta); }") % cl_name );
+
+	// static C Create(const ::Udm::Object &parent, const ::Uml::CompositionChildRole &role = ::Udm::NULLCHILDROLE)
+	meth_decls.push_back( boost::format("static %1% Create(const ::Udm::Object &parent, const ::Uml::CompositionChildRole &role = ::Udm::NULLCHILDROLE)") % cl_name );
+	// static C C::Create(const ::Udm::Object &parent, const ::Uml::CompositionChildRole &role) { return __Create(meta, parent, role); }
+	meth_defs.push_back( boost::format("%1% %1%::Create(const ::Udm::Object &parent, const ::Uml::CompositionChildRole &role) { return __Create(meta, parent, role); }") % cl_name );
+
+	// C CreateInstance(const ::Udm::Object &parent, const ::Uml::CompositionChildRole &role = ::Udm::NULLCHILDROLE)
+	meth_decls.push_back( boost::format("%1% CreateInstance(const ::Udm::Object &parent, const ::Uml::CompositionChildRole &role = ::Udm::NULLCHILDROLE)") % cl_name );
+	// C C::CreateInstance(const ::Udm::Object &parent, const ::Uml::CompositionChildRole &role) { return __Create(meta, parent, role, impl); }
+	meth_defs.push_back( boost::format("%1% %1%::CreateInstance(const ::Udm::Object &parent, const ::Uml::CompositionChildRole &role) { return __Create(meta, parent, role, impl); }") % cl_name );
+
+	// ::Udm::InstantiatedAttr<C> Instances()
+	meth_decls.push_back( boost::format("::Udm::InstantiatedAttr< %1%> Instances()") % cl_name );
+	// ::Udm::InstantiatedAttr<C> C::Instances() { return ::Udm::InstantiatedAttr<C>(impl); }
+	meth_defs.push_back( boost::format("::Udm::InstantiatedAttr< %1%> %1%::Instances() { return ::Udm::InstantiatedAttr< %1%>(impl); }") % cl_name );
+
+	// template <class Pred> ::Udm::InstantiatedAttr<C, Pred> Instances_sorted(const Pred &) { return ::Udm::InstantiatedAttr<C, Pred>(impl); }
+	meth_decls.push_back( boost::format("template <class Pred> ::Udm::InstantiatedAttr< %1%, Pred> Instances_sorted(const Pred &) { return ::Udm::InstantiatedAttr< %1%, Pred>(impl); }") % cl_name );
+
+	// C CreateDerived(const ::Udm::Object &parent, const ::Uml::CompositionChildRole &role = ::Udm::NULLCHILDROLE)
+	meth_decls.push_back( boost::format("%1% CreateDerived(const ::Udm::Object &parent, const ::Uml::CompositionChildRole &role = ::Udm::NULLCHILDROLE)") % cl_name );
+	// C C::CreateDerived(const ::Udm::Object &parent, const ::Uml::CompositionChildRole &role) { return __Create(meta, parent, role, impl, true); }
+	meth_defs.push_back( boost::format("%1% %1%::CreateDerived(const ::Udm::Object &parent, const ::Uml::CompositionChildRole &role) { return __Create(meta, parent, role, impl, true); }") % cl_name );
+
+	// ::Udm::DerivedAttr<C> Derived()
+	meth_decls.push_back( boost::format("::Udm::DerivedAttr< %1%> Derived()") % cl_name );
+	// ::Udm::DerivedAttr<C> C::Derived() { return ::Udm::DerivedAttr<C>(impl); }
+	meth_defs.push_back( boost::format("::Udm::DerivedAttr< %1%> %1%::Derived() { return ::Udm::DerivedAttr< %1%>(impl); }") % cl_name );
+
+	// template <class Pred> ::Udm::DerivedAttr<C, Pred> Derived_sorted(const Pred &) { return ::Udm::DerivedAttr<C, Pred>(impl); }
+	meth_decls.push_back( boost::format("template <class Pred> ::Udm::DerivedAttr< %1%, Pred> Derived_sorted(const Pred &) { return ::Udm::DerivedAttr< %1%, Pred>(impl); }") % cl_name );
+
+	// ::Udm::ArchetypeAttr<C> Archetype() const
+	meth_decls.push_back( boost::format("::Udm::ArchetypeAttr< %1%> Archetype() const") % cl_name );
+	// ::Udm::ArchetypeAttr<C> C::Archetype() const { return ::Udm::ArchetypeAttr<C>(impl); }
+	meth_defs.push_back( boost::format("::Udm::ArchetypeAttr< %1%> %1%::Archetype() const { return ::Udm::ArchetypeAttr< %1%>(impl); }") % cl_name );
 
 
 	if (gen.opts.mode == UdmOpts::CXX_GENERIC)
@@ -179,62 +202,62 @@
 		// member function templates
 
 		// 1. associations without an association class
-		// template <class PeerType, class RoleType> Udm::PointerAttr<PeerType> peer() const { ... }
-		meth_defs_mpl_assoc.push_back( boost::format("template <class PeerType, class RoleType> ::Udm::PointerAttr<PeerType> peer() const { boost::function_requires< ::Udm::WithRoleInTListConcept<PeerType, RoleType, AssociationsSingle> >(); return Udm::PointerAttr<PeerType>(impl, _type2ARole<RoleType>()); }") );
-		// template <class PeersType, class RoleType> Udm::AssocAttr<PeersType> peers() const { ... }
-		meth_defs_mpl_assoc.push_back( boost::format("template <class PeersType, class RoleType> Udm::AssocAttr<PeersType> peers() const { boost::function_requires< Udm::WithRoleInTListConcept<PeersType, RoleType, AssociationsMulti> >(); return Udm::AssocAttr<PeersType>(impl, _type2ARole<RoleType>()); }") );
-		// template <class PeersType, class RoleType, class Pred> Udm::AssocAttr<PeersType, Pred> peers_sorted(const Pred &) const { ... }
-		meth_defs_mpl_assoc.push_back( boost::format("template <class PeersType, class RoleType, class Pred> Udm::AssocAttr<PeersType, Pred> peers_sorted() const { boost::function_requires< Udm::WithRoleInTListConcept<PeersType, RoleType, AssociationsMulti> >(); return Udm::AssocAttr<PeersType, Pred>(impl, _type2ARole<RoleType>()); }") );
+		// template <class PeerType, class RoleType> ::Udm::PointerAttr<PeerType> peer() const { ... }
+		meth_defs_mpl_assoc.push_back( boost::format("template <class PeerType, class RoleType> ::Udm::PointerAttr<PeerType> peer() const { boost::function_requires< ::Udm::WithRoleInTListConcept<PeerType, RoleType, AssociationsSingle> >(); return ::Udm::PointerAttr<PeerType>(impl, _type2ARole<RoleType>()); }") );
+		// template <class PeersType, class RoleType> ::Udm::AssocAttr<PeersType> peers() const { ... }
+		meth_defs_mpl_assoc.push_back( boost::format("template <class PeersType, class RoleType> ::Udm::AssocAttr<PeersType> peers() const { boost::function_requires< ::Udm::WithRoleInTListConcept<PeersType, RoleType, AssociationsMulti> >(); return ::Udm::AssocAttr<PeersType>(impl, _type2ARole<RoleType>()); }") );
+		// template <class PeersType, class RoleType, class Pred> ::Udm::AssocAttr<PeersType, Pred> peers_sorted(const Pred &) const { ... }
+		meth_defs_mpl_assoc.push_back( boost::format("template <class PeersType, class RoleType, class Pred> ::Udm::AssocAttr<PeersType, Pred> peers_sorted() const { boost::function_requires< ::Udm::WithRoleInTListConcept<PeersType, RoleType, AssociationsMulti> >(); return ::Udm::AssocAttr<PeersType, Pred>(impl, _type2ARole<RoleType>()); }") );
 
 		// 2. associations with association class
-		// template <class ConnectorType, class PeerType, class RoleType> Udm::AClassPointerAttr<ConnectorType, PeerType> connector() const { ... }
-		meth_defs_mpl_assoc.push_back( boost::format("template <class ConnectorType, class PeerType, class RoleType> Udm::AClassPointerAttr<ConnectorType, PeerType> connector() const { boost::function_requires< Udm::WithAClassAndRoleInTListConcept<PeerType, ConnectorType, RoleType, AssociationsWAClassSingle> >(); std::pair<const ::Uml::AssociationRole*, const ::Uml::AssociationRole*> roles_mp = _type2ACARole<RoleType>(); return Udm::AClassPointerAttr<ConnectorType, PeerType>(impl, *roles_mp.first, *roles_mp.second); }") );
-		// template <class ConnectorsType, class PeerType, class RoleType> Udm::AClassAssocAttr<ConnectorsType, PeerType> connectors() const { ... }
-		meth_defs_mpl_assoc.push_back( boost::format("template <class ConnectorsType, class PeerType, class RoleType> Udm::AClassAssocAttr<ConnectorsType, PeerType> connectors() const { boost::function_requires< Udm::WithAClassAndRoleInTListConcept<PeerType, ConnectorsType, RoleType, AssociationsWAClassMulti> >(); std::pair<const ::Uml::AssociationRole*, const ::Uml::AssociationRole*> roles_mp = _type2ACARole<RoleType>(); return Udm::AClassAssocAttr<ConnectorsType, PeerType>(impl, *roles_mp.first, *roles_mp.second); }") );
-		// template <class ConnectorsType, class PeerType, class RoleType, class Pred> Udm::AClassAssocAttr<ConnectorsType, PeerType, Pred> connectors_sorted() const { ... }
-		meth_defs_mpl_assoc.push_back( boost::format("template <class ConnectorsType, class PeerType, class RoleType, class Pred> Udm::AClassAssocAttr<ConnectorsType, PeerType, Pred> connectors_sorted() const { boost::function_requires< Udm::WithAClassAndRoleInTListConcept<PeerType, ConnectorsType, RoleType, AssociationsWAClassMulti> >(); std::pair<const ::Uml::AssociationRole*, const ::Uml::AssociationRole*> roles_mp = _type2ACARole<RoleType>(); return Udm::AClassAssocAttr<ConnectorsType, PeerType, Pred>(impl, *roles_mp.first, *roles_mp.second); }") );
+		// template <class ConnectorType, class PeerType, class RoleType> ::Udm::AClassPointerAttr<ConnectorType, PeerType> connector() const { ... }
+		meth_defs_mpl_assoc.push_back( boost::format("template <class ConnectorType, class PeerType, class RoleType> ::Udm::AClassPointerAttr<ConnectorType, PeerType> connector() const { boost::function_requires< ::Udm::WithAClassAndRoleInTListConcept<PeerType, ConnectorType, RoleType, AssociationsWAClassSingle> >(); std::pair<const ::Uml::AssociationRole*, const ::Uml::AssociationRole*> roles_mp = _type2ACARole<RoleType>(); return ::Udm::AClassPointerAttr<ConnectorType, PeerType>(impl, *roles_mp.first, *roles_mp.second); }") );
+		// template <class ConnectorsType, class PeerType, class RoleType> ::Udm::AClassAssocAttr<ConnectorsType, PeerType> connectors() const { ... }
+		meth_defs_mpl_assoc.push_back( boost::format("template <class ConnectorsType, class PeerType, class RoleType> ::Udm::AClassAssocAttr<ConnectorsType, PeerType> connectors() const { boost::function_requires< ::Udm::WithAClassAndRoleInTListConcept<PeerType, ConnectorsType, RoleType, AssociationsWAClassMulti> >(); std::pair<const ::Uml::AssociationRole*, const ::Uml::AssociationRole*> roles_mp = _type2ACARole<RoleType>(); return ::Udm::AClassAssocAttr<ConnectorsType, PeerType>(impl, *roles_mp.first, *roles_mp.second); }") );
+		// template <class ConnectorsType, class PeerType, class RoleType, class Pred> ::Udm::AClassAssocAttr<ConnectorsType, PeerType, Pred> connectors_sorted() const { ... }
+		meth_defs_mpl_assoc.push_back( boost::format("template <class ConnectorsType, class PeerType, class RoleType, class Pred> ::Udm::AClassAssocAttr<ConnectorsType, PeerType, Pred> connectors_sorted() const { boost::function_requires< ::Udm::WithAClassAndRoleInTListConcept<PeerType, ConnectorsType, RoleType, AssociationsWAClassMulti> >(); std::pair<const ::Uml::AssociationRole*, const ::Uml::AssociationRole*> roles_mp = _type2ACARole<RoleType>(); return ::Udm::AClassAssocAttr<ConnectorsType, PeerType, Pred>(impl, *roles_mp.first, *roles_mp.second); }") );
 
 		// 3. cross diagram associations without an association class
-		// template <class PeerType, class RoleType> Udm::CrossPointerAttr<PeerType> cross_peer() const { ... }
-		meth_defs_mpl_assoc.push_back( boost::format("template <class PeerType, class RoleType> Udm::CrossPointerAttr<PeerType> cross_peer() const { boost::function_requires< Udm::WithRoleInTListConcept<PeerType, RoleType, CrossAssociationsSingle> >(); return Udm::CrossPointerAttr<PeerType>(impl, _type2ARole<RoleType>()); }") );
-		// template <class PeersType, class RoleType> Udm::CrossAssocAttr<PeersType> cross_peers() const { ... }
-		meth_defs_mpl_assoc.push_back( boost::format("template <class PeersType, class RoleType> Udm::CrossAssocAttr<PeersType> cross_peers() const { boost::function_requires< Udm::WithRoleInTListConcept<PeersType, RoleType, CrossAssociationsMulti> >(); return Udm::CrossAssocAttr<PeersType>(impl, _type2ARole<RoleType>()); }") );
-		// template <class PeersType, class RoleType, class Pred> Udm::CrossAssocAttr<PeersType, Pred> cross_peers_sorted(const Pred &) const { ... }
-		meth_defs_mpl_assoc.push_back( boost::format("template <class PeersType, class RoleType, class Pred> Udm::CrossAssocAttr<PeersType, Pred> cross_peers_sorted() const { boost::function_requires< Udm::WithRoleInTListConcept<PeersType, RoleType, CrossAssociationsMulti> >(); return Udm::CrossAssocAttr<PeersType, Pred>(impl, _type2ARole<RoleType>()); }") );
+		// template <class PeerType, class RoleType> ::Udm::CrossPointerAttr<PeerType> cross_peer() const { ... }
+		meth_defs_mpl_assoc.push_back( boost::format("template <class PeerType, class RoleType> ::Udm::CrossPointerAttr<PeerType> cross_peer() const { boost::function_requires< ::Udm::WithRoleInTListConcept<PeerType, RoleType, CrossAssociationsSingle> >(); return ::Udm::CrossPointerAttr<PeerType>(impl, _type2ARole<RoleType>()); }") );
+		// template <class PeersType, class RoleType> ::Udm::CrossAssocAttr<PeersType> cross_peers() const { ... }
+		meth_defs_mpl_assoc.push_back( boost::format("template <class PeersType, class RoleType> ::Udm::CrossAssocAttr<PeersType> cross_peers() const { boost::function_requires< ::Udm::WithRoleInTListConcept<PeersType, RoleType, CrossAssociationsMulti> >(); return ::Udm::CrossAssocAttr<PeersType>(impl, _type2ARole<RoleType>()); }") );
+		// template <class PeersType, class RoleType, class Pred> ::Udm::CrossAssocAttr<PeersType, Pred> cross_peers_sorted(const Pred &) const { ... }
+		meth_defs_mpl_assoc.push_back( boost::format("template <class PeersType, class RoleType, class Pred> ::Udm::CrossAssocAttr<PeersType, Pred> cross_peers_sorted() const { boost::function_requires< ::Udm::WithRoleInTListConcept<PeersType, RoleType, CrossAssociationsMulti> >(); return ::Udm::CrossAssocAttr<PeersType, Pred>(impl, _type2ARole<RoleType>()); }") );
 
 		// 4. cross diagram associations with association class
-		// template <class ConnectorType, class PeerType, class RoleType> Udm::AClassCrossPointerAttr<ConnectorType, PeerType> cross_connector() const { ... }
-		meth_defs_mpl_assoc.push_back( boost::format("template <class ConnectorType, class PeerType, class RoleType> Udm::AClassCrossPointerAttr<ConnectorType, PeerType> cross_connector() const { boost::function_requires< Udm::WithAClassAndRoleInTListConcept<PeerType, ConnectorType, RoleType, CrossAssociationsWAClassSingle> >(); std::pair<const ::Uml::AssociationRole*, const ::Uml::AssociationRole*> roles_mp = _type2ACARole<RoleType>(); return Udm::AClassCrossPointerAttr<ConnectorType, PeerType>(impl, *roles_mp.first, *roles_mp.second); }") );
-		// template <class ConnectorsType, class PeerType, class RoleType> Udm::AClassCrossAssocAttr<ConnectorsType, PeerType> cross_connectors() const { ... }
-		meth_defs_mpl_assoc.push_back( boost::format("template <class ConnectorsType, class PeerType, class RoleType> Udm::AClassCrossAssocAttr<ConnectorsType, PeerType> cross_connectors() const { boost::function_requires< Udm::WithAClassAndRoleInTListConcept<PeerType, ConnectorsType, RoleType, CrossAssociationsWAClassMulti> >(); std::pair<const ::Uml::AssociationRole*, const ::Uml::AssociationRole*> roles_mp = _type2ACARole<RoleType>(); return Udm::AClassCrossAssocAttr<ConnectorsType, PeerType>(impl, *roles_mp.first, *roles_mp.second); }") );
-		// template <class ConnectorsType, class PeerType, class RoleType, class Pred> Udm::AClassCrossAssocAttr<ConnectorsType, PeerType, Pred> cross_connectors_sorted() const { ... }
-		meth_defs_mpl_assoc.push_back( boost::format("template <class ConnectorsType, class PeerType, class RoleType, class Pred> Udm::AClassCrossAssocAttr<ConnectorsType, PeerType, Pred> cross_connectors_sorted() const { boost::function_requires< Udm::WithAClassAndRoleInTListConcept<PeerType, ConnectorsType, RoleType, CrossAssociationsWAClassMulti> >(); std::pair<const ::Uml::AssociationRole*, const ::Uml::AssociationRole*> roles_mp = _type2ACARole<RoleType>(); return Udm::AClassCrossAssocAttr<ConnectorsType, PeerType, Pred>(impl, *roles_mp.first, *roles_mp.second); }") );
+		// template <class ConnectorType, class PeerType, class RoleType> :Udm::AClassCrossPointerAttr<ConnectorType, PeerType> cross_connector() const { ... }
+		meth_defs_mpl_assoc.push_back( boost::format("template <class ConnectorType, class PeerType, class RoleType> ::Udm::AClassCrossPointerAttr<ConnectorType, PeerType> cross_connector() const { boost::function_requires< ::Udm::WithAClassAndRoleInTListConcept<PeerType, ConnectorType, RoleType, CrossAssociationsWAClassSingle> >(); std::pair<const ::Uml::AssociationRole*, const ::Uml::AssociationRole*> roles_mp = _type2ACARole<RoleType>(); return ::Udm::AClassCrossPointerAttr<ConnectorType, PeerType>(impl, *roles_mp.first, *roles_mp.second); }") );
+		// template <class ConnectorsType, class PeerType, class RoleType> ::Udm::AClassCrossAssocAttr<ConnectorsType, PeerType> cross_connectors() const { ... }
+		meth_defs_mpl_assoc.push_back( boost::format("template <class ConnectorsType, class PeerType, class RoleType> ::Udm::AClassCrossAssocAttr<ConnectorsType, PeerType> cross_connectors() const { boost::function_requires< ::Udm::WithAClassAndRoleInTListConcept<PeerType, ConnectorsType, RoleType, CrossAssociationsWAClassMulti> >(); std::pair<const ::Uml::AssociationRole*, const ::Uml::AssociationRole*> roles_mp = _type2ACARole<RoleType>(); return ::Udm::AClassCrossAssocAttr<ConnectorsType, PeerType>(impl, *roles_mp.first, *roles_mp.second); }") );
+		// template <class ConnectorsType, class PeerType, class RoleType, class Pred> ::Udm::AClassCrossAssocAttr<ConnectorsType, PeerType, Pred> cross_connectors_sorted() const { ... }
+		meth_defs_mpl_assoc.push_back( boost::format("template <class ConnectorsType, class PeerType, class RoleType, class Pred> ::Udm::AClassCrossAssocAttr<ConnectorsType, PeerType, Pred> cross_connectors_sorted() const { boost::function_requires< ::Udm::WithAClassAndRoleInTListConcept<PeerType, ConnectorsType, RoleType, CrossAssociationsWAClassMulti> >(); std::pair<const ::Uml::AssociationRole*, const ::Uml::AssociationRole*> roles_mp = _type2ACARole<RoleType>(); return ::Udm::AClassCrossAssocAttr<ConnectorsType, PeerType, Pred>(impl, *roles_mp.first, *roles_mp.second); }") );
 
 		// 5. children
-		// template <class ChildType, class RoleType> Udm::ChildAttr<ChildType> child() const { ... }
-		meth_defs_mpl_comp.push_back( boost::format("template <class ChildType, class RoleType> Udm::ChildAttr<ChildType> child() const { boost::function_requires< Udm::WithRoleInTListConcept_B<ChildType, RoleType, ChildrenSingle> >(); return Udm::ChildAttr<ChildType>(impl, _type2CCRole<RoleType>()); }") );
-		// template <class ChildrenType, class RoleType> Udm::ChildrenAttr<ChildrenType> children() const { ... }
-		meth_defs.push_back( boost::format("template <class ChildrenType, class RoleType> Udm::ChildrenAttr<ChildrenType> children() const { boost::function_requires< Udm::WithRoleInTListConcept_B<ChildrenType, RoleType, ChildrenMulti> >(); return Udm::ChildrenAttr<ChildrenType>(impl, _type2CCRole<RoleType>()); }") );
-		// template <class ChildrenType, class RoleType, class Pred> Udm::ChildrenAttr<ChildrenType, Pred> children_sorted() const { ... }
-		meth_defs_mpl_comp.push_back( boost::format("template <class ChildrenType, class RoleType, class Pred> Udm::ChildrenAttr<ChildrenType, Pred> children_sorted() const { boost::function_requires< Udm::WithRoleInTListConcept_B<ChildrenType, RoleType, ChildrenMulti> >(); return Udm::ChildrenAttr<ChildrenType, Pred>(impl, _type2CCRole<RoleType>()); }") );
-		// template <class ChildrenType> Udm::ChildrenAttr<ChildrenType> children_kind() const { ... }
-		meth_defs_mpl_comp.push_back( boost::format("template <class ChildrenType> Udm::ChildrenAttr<ChildrenType> children_kind() const { boost::function_requires< Udm::InTListConcept<ChildrenType, ChildrenKinds> >(); return Udm::ChildrenAttr<ChildrenType>(impl, Udm::NULLCHILDROLE); }") );
-		// template <class ChildrenType, class Pred> Udm::ChildrenAttr<ChildrenType, Pred> children_kind_sorted() const { ... }
-		meth_defs_mpl_comp.push_back( boost::format("template <class ChildrenType, class Pred> Udm::ChildrenAttr<ChildrenType, Pred> children_kind_sorted() const { boost::function_requires< Udm::InTListConcept<ChildrenType, ChildrenKinds> >(); return Udm::ChildrenAttr<ChildrenType, Pred>(impl, Udm::NULLCHILDROLE); }") );
+		// template <class ChildType, class RoleType> ::Udm::ChildAttr<ChildType> child() const { ... }
+		meth_defs_mpl_comp.push_back( boost::format("template <class ChildType, class RoleType> ::Udm::ChildAttr<ChildType> child() const { boost::function_requires< ::Udm::WithRoleInTListConcept_B<ChildType, RoleType, ChildrenSingle> >(); return ::Udm::ChildAttr<ChildType>(impl, _type2CCRole<RoleType>()); }") );
+		// template <class ChildrenType, class RoleType> ::Udm::ChildrenAttr<ChildrenType> children() const { ... }
+		meth_defs_mpl_comp.push_back( boost::format("template <class ChildrenType, class RoleType> ::Udm::ChildrenAttr<ChildrenType> children() const { boost::function_requires< ::Udm::WithRoleInTListConcept_B<ChildrenType, RoleType, ChildrenMulti> >(); return ::Udm::ChildrenAttr<ChildrenType>(impl, _type2CCRole<RoleType>()); }") );
+		// template <class ChildrenType, class RoleType, class Pred> ::Udm::ChildrenAttr<ChildrenType, Pred> children_sorted() const { ... }
+		meth_defs_mpl_comp.push_back( boost::format("template <class ChildrenType, class RoleType, class Pred> ::Udm::ChildrenAttr<ChildrenType, Pred> children_sorted() const { boost::function_requires< ::Udm::WithRoleInTListConcept_B<ChildrenType, RoleType, ChildrenMulti> >(); return ::Udm::ChildrenAttr<ChildrenType, Pred>(impl, _type2CCRole<RoleType>()); }") );
+		// template <class ChildrenType> ::Udm::ChildrenAttr<ChildrenType> children_kind() const { ... }
+		meth_defs_mpl_comp.push_back( boost::format("template <class ChildrenType> ::Udm::ChildrenAttr<ChildrenType> children_kind() const { boost::function_requires< ::Udm::InTListConcept<ChildrenType, ChildrenKinds> >(); return ::Udm::ChildrenAttr<ChildrenType>(impl, ::Udm::NULLCHILDROLE); }") );
+		// template <class ChildrenType, class Pred> ::Udm::ChildrenAttr<ChildrenType, Pred> children_kind_sorted() const { ... }
+		meth_defs_mpl_comp.push_back( boost::format("template <class ChildrenType, class Pred> ::Udm::ChildrenAttr<ChildrenType, Pred> children_kind_sorted() const { boost::function_requires< ::Udm::InTListConcept<ChildrenType, ChildrenKinds> >(); return ::Udm::ChildrenAttr<ChildrenType, Pred>(impl, ::Udm::NULLCHILDROLE); }") );
 
 		// 6. parents
-		// template <class ParentType, class RoleType> Udm::ParentAttr<ParentType> parent() const { ... }
-		meth_defs_mpl_comp.push_back( boost::format("template <class ParentType, class RoleType> Udm::ParentAttr<ParentType> parent() const { boost::function_requires< Udm::WithRoleInTListConcept<ParentType, RoleType, Parents> >(); return Udm::ParentAttr<ParentType>(impl, _type2CPRole<RoleType>()); }") );
-		// template <class ParentType> Udm::ParentAttr<ParentType> parent_kind() const { ... }
-		meth_defs_mpl_comp.push_back( boost::format("template <class ParentType> Udm::ParentAttr<ParentType> parent_kind() const { boost::function_requires< Udm::InTListConcept<ParentType, ParentKinds> >(); return Udm::ParentAttr<ParentType>(impl, Udm::NULLPARENTROLE); }") );
+		// template <class ParentType, class RoleType> ::Udm::ParentAttr<ParentType> parent() const { ... }
+		meth_defs_mpl_comp.push_back( boost::format("template <class ParentType, class RoleType> ::Udm::ParentAttr<ParentType> parent() const { boost::function_requires< ::Udm::WithRoleInTListConcept<ParentType, RoleType, Parents> >(); return ::Udm::ParentAttr<ParentType>(impl, _type2CPRole<RoleType>()); }") );
+		// template <class ParentType> ::Udm::ParentAttr<ParentType> parent_kind() const { ... }
+		meth_defs_mpl_comp.push_back( boost::format("template <class ParentType> ::Udm::ParentAttr<ParentType> parent_kind() const { boost::function_requires< ::Udm::InTListConcept<ParentType, ParentKinds> >(); return ::Udm::ParentAttr<ParentType>(impl, ::Udm::NULLPARENTROLE); }") );
 
 		// 7. association class ends
-		// template <class EndType, class RoleType> Udm::AssocEndAttr<EndType> end() const { ... }
-		meth_defs_mpl_assoc.push_back( boost::format("template <class EndType, class RoleType> Udm::AssocEndAttr<EndType> end() const { boost::function_requires< Udm::WithRoleInTListConcept<EndType, RoleType, AClassEnds> >(); return Udm::AssocEndAttr<EndType>(impl, _type2ARole<RoleType>()); }") );
+		// template <class EndType, class RoleType> ::Udm::AssocEndAttr<EndType> end() const { ... }
+		meth_defs_mpl_assoc.push_back( boost::format("template <class EndType, class RoleType> ::Udm::AssocEndAttr<EndType> end() const { boost::function_requires< ::Udm::WithRoleInTListConcept<EndType, RoleType, AClassEnds> >(); return ::Udm::AssocEndAttr<EndType>(impl, _type2ARole<RoleType>()); }") );
 
 		// 8. cross diagram association class ends
-		// template <class EndType, class RoleType> Udm::CrossAssocEndAttr<EndType> cross_end() const { ... }
-		meth_defs_mpl_assoc.push_back( boost::format("template <class EndType, class RoleType> Udm::CrossAssocEndAttr<EndType> cross_end() const { boost::function_requires< Udm::WithRoleInTListConcept<EndType, RoleType, CrossAClassEnds> >(); return Udm::CrossAssocEndAttr<EndType>(impl, _type2ARole<RoleType>()); }") );
+		// template <class EndType, class RoleType> ::Udm::CrossAssocEndAttr<EndType> cross_end() const { ... }
+		meth_defs_mpl_assoc.push_back( boost::format("template <class EndType, class RoleType> ::Udm::CrossAssocEndAttr<EndType> cross_end() const { boost::function_requires< ::Udm::WithRoleInTListConcept<EndType, RoleType, CrossAClassEnds> >(); return ::Udm::CrossAssocEndAttr<EndType>(impl, _type2ARole<RoleType>()); }") );
 
 		// typedef for stereotype
 		string stereotype = c.stereotype();
@@ -267,13 +290,19 @@
 			+ AttrType2Name( attr.type() )
 			+ "Attr"
 			+ (attr.max() == 1 || attr.max() == 0 ? "" : "Arr"); // array of values or single value
-		// Udm::RealAttr d() const { return Udm::RealAttr(impl, meta_d); }
-		// Udm::TempRealAttr d() const { return Udm::TempRealAttr(impl, meta_d); }
-		// Udm::RealAttrArr d() const { return Udm::RealAttrArr(impl, meta_d); }
-		// Udm::TempRealAttrArr d() const { return Udm::TempRealAttrArr(impl, meta_d); }
-		meth_defs.push_back( boost::format("::Udm::%1% %2%() const { return ::Udm::%1%(impl, meta_%2%); }")
+		// ::Udm::RealAttr d() const
+		// ::Udm::TempRealAttr d() const
+		// ::Udm::RealAttrArr d() const
+		// ::Udm::TempRealAttrArr d() const
+		meth_decls.push_back( boost::format("::Udm::%1% %2%() const") % attr_udm_type % attr_name );
+		// ::Udm::RealAttr C::d() const { return ::Udm::RealAttr(impl, meta_d); }
+		// ::Udm::TempRealAttr C::d() const { return ::Udm::TempRealAttr(impl, meta_d); }
+		// ::Udm::RealAttrArr C::d() const { return ::Udm::RealAttrArr(impl, meta_d); }
+		// ::Udm::TempRealAttrArr C::d() const { return ::Udm::TempRealAttrArr(impl, meta_d); }
+		meth_defs.push_back( boost::format("::Udm::%1% %3%::%2%() const { return ::Udm::%1%(impl, meta_%2%); }")
 				% attr_udm_type
-				% attr_name );
+				% attr_name
+				% cl_name );
 
 		meta_create.push_back( boost::format("%2%::meta_%1% = ::Uml::Attribute::Create(%2%::meta)") % attr_name % cl_name );
 
@@ -391,19 +420,23 @@
 
 				if (the_other.max() == 1)
 				{
-					// Udm::PointerAttr<T> A() const { return Udm::PointerAttr<T>(impl, meta_A); }
-					meth_defs.push_back( boost::format("::Udm::PointerAttr< %1%> %2%() const { return ::Udm::PointerAttr< %1%>(impl, meta_%2%); }") % oclass_cpp_name % rel_name );
+					// ::Udm::PointerAttr<T> A() const
+					meth_decls.push_back( boost::format("::Udm::PointerAttr< %1%> %2%() const") % oclass_cpp_name % rel_name );
+					// ::Udm::PointerAttr<T> C::A() const { return ::Udm::PointerAttr<T>(impl, meta_A); }
+					meth_defs.push_back( boost::format("::Udm::PointerAttr< %1%> %3%::%2%() const { return ::Udm::PointerAttr< %1%>(impl, meta_%2%); }") % oclass_cpp_name % rel_name % cl_name );
 
 					if (gen.opts.mode == UdmOpts::CXX_GENERIC)
 						assoc_tlhlp.typenames_single.push_back(tl_typename);
 				}
 				else
 				{
-					// Udm::AssocAttr<T> A() const { return Udm::AssocAttr<T>(impl, meta_A); }
-					meth_defs.push_back( boost::format("::Udm::AssocAttr< %1%> %2%() const { return ::Udm::AssocAttr< %1%>(impl, meta_%2%); }") % oclass_cpp_name % rel_name );
+					// ::Udm::AssocAttr<T> A() const
+					meth_decls.push_back( boost::format("::Udm::AssocAttr< %1%> %2%() const") % oclass_cpp_name % rel_name );
+					// ::Udm::AssocAttr<T> C::A() const { return ::Udm::AssocAttr<T>(impl, meta_A); }
+					meth_defs.push_back( boost::format("::Udm::AssocAttr< %1%> %3%::%2%() const { return ::Udm::AssocAttr< %1%>(impl, meta_%2%); }") % oclass_cpp_name % rel_name % cl_name );
 
-					// template <class Pred> Udm::AssocAttr<T, Pred> A_sorted(const Pred &) const { return Udm::AssocAttr<T, Pred>(impl, meta_A); }
-					meth_defs.push_back( boost::format("template <class Pred> ::Udm::AssocAttr< %1%, Pred> %2%_sorted(const Pred &) const { return ::Udm::AssocAttr< %1%, Pred>(impl, meta_%2%); }") % oclass_cpp_name % rel_name );
+					// template <class Pred> ::Udm::AssocAttr<T, Pred> A_sorted(const Pred &) const { return ::Udm::AssocAttr<T, Pred>(impl, meta_A); }
+					meth_decls.push_back( boost::format("template <class Pred> ::Udm::AssocAttr< %1%, Pred> %2%_sorted(const Pred &) const { return ::Udm::AssocAttr< %1%, Pred>(impl, meta_%2%); }") % oclass_cpp_name % rel_name );
 
 					if (gen.opts.mode == UdmOpts::CXX_GENERIC)
 						assoc_tlhlp.typenames_multi.push_back(tl_typename);
@@ -445,18 +478,22 @@
 
 				if (the_other.max() == 1)
 				{
-					// Udm::AClassPointerAttr<T1, T2> A() const { return Udm::AClassPointerAttr<T1, T2>(impl, meta_A, meta_A_rev);  }
-					meth_defs.push_back( boost::format("::Udm::AClassPointerAttr< %1%, %2%> %3%() const { return ::Udm::AClassPointerAttr< %1%, %2%>(impl, meta_%3%, meta_%3%_rev); }") % aclass_cpp_name % oclass_cpp_name % rel_name );
+					// ::Udm::AClassPointerAttr<T1, T2> A()
+					meth_decls.push_back( boost::format("::Udm::AClassPointerAttr< %1%, %2%> %3%() const") % aclass_cpp_name % oclass_cpp_name % rel_name );
+					// ::Udm::AClassPointerAttr<T1, T2> C::A() const { return ::Udm::AClassPointerAttr<T1, T2>(impl, meta_A, meta_A_rev);  }
+					meth_defs.push_back( boost::format("::Udm::AClassPointerAttr< %1%, %2%> %4%::%3%() const { return ::Udm::AClassPointerAttr< %1%, %2%>(impl, meta_%3%, meta_%3%_rev); }") % aclass_cpp_name % oclass_cpp_name % rel_name % cl_name );
 
 					if (gen.opts.mode == UdmOpts::CXX_GENERIC)
 						assoc_ac_tlhlp.typenames_single.push_back(tl_typename);
 				}
 				else
 				{	
-					// Udm::AClassAssocAttr<T1, T2> A() const { return Udm::AClassAssocAttr<T1, T2>(impl, meta_A, meta_A_rev); }
-					meth_defs.push_back( boost::format("::Udm::AClassAssocAttr< %1%, %2%> %3%() const { return ::Udm::AClassAssocAttr< %1%, %2%>(impl, meta_%3%, meta_%3%_rev); }") % aclass_cpp_name % oclass_cpp_name % rel_name );
-					// template <class Pred> Udm::AClassAssocAttr<T1, T2> A_sorted(const Pred &) const { return Udm::AClassAssocAttr<T1, T2, Pred>(impl, meta_A, meta_A_rev); }
-					meth_defs.push_back( boost::format("template <class Pred> ::Udm::AClassAssocAttr< %1%, %2%, Pred> %3%_sorted(const Pred &) const { return ::Udm::AClassAssocAttr< %1%, %2%, Pred>(impl, meta_%3%, meta_%3%_rev); }") % aclass_cpp_name % oclass_cpp_name % rel_name );
+					// ::Udm::AClassAssocAttr<T1, T2> A() const
+					meth_decls.push_back( boost::format("::Udm::AClassAssocAttr< %1%, %2%> %3%() const") % aclass_cpp_name % oclass_cpp_name % rel_name );
+					// ::Udm::AClassAssocAttr<T1, T2> C::A() const { return ::Udm::AClassAssocAttr<T1, T2>(impl, meta_A, meta_A_rev); }
+					meth_defs.push_back( boost::format("::Udm::AClassAssocAttr< %1%, %2%> %4%::%3%() const { return ::Udm::AClassAssocAttr< %1%, %2%>(impl, meta_%3%, meta_%3%_rev); }") % aclass_cpp_name % oclass_cpp_name % rel_name % cl_name );
+					// template <class Pred> ::Udm::AClassAssocAttr<T1, T2> A_sorted(const Pred &) const { return ::Udm::AClassAssocAttr<T1, T2, Pred>(impl, meta_A, meta_A_rev); }
+					meth_decls.push_back( boost::format("template <class Pred> ::Udm::AClassAssocAttr< %1%, %2%, Pred> %3%_sorted(const Pred &) const { return ::Udm::AClassAssocAttr< %1%, %2%, Pred>(impl, meta_%3%, meta_%3%_rev); }") % aclass_cpp_name % oclass_cpp_name % rel_name );
 
 					if (gen.opts.mode == UdmOpts::CXX_GENERIC)
 						assoc_ac_tlhlp.typenames_multi.push_back(tl_typename);
@@ -543,18 +580,22 @@
 
 					if (the_other.max() == 1 )
 					{
-						// Udm::CrossPointerAttr<T> A() const { return Udm::CrossPointerAttr<T>(impl, meta_A); }
-						meth_defs.push_back( boost::format("::Udm::CrossPointerAttr< %1%> %2%() const { return ::Udm::CrossPointerAttr< %1%>(impl, meta_%2%); }") % (cname + "::" + oname) % rel_name );
+						// ::Udm::CrossPointerAttr<T> A() const
+						meth_decls.push_back( boost::format("::Udm::CrossPointerAttr< %1%> %2%() const") % (cname + "::" + oname) % rel_name );
+						// ::Udm::CrossPointerAttr<T> C::A() const { return ::Udm::CrossPointerAttr<T>(impl, meta_A); }
+						meth_defs.push_back( boost::format("::Udm::CrossPointerAttr< %1%> %3%::%2%() const { return ::Udm::CrossPointerAttr< %1%>(impl, meta_%2%); }") % (cname + "::" + oname) % rel_name % cl_name );
 
 						if (gen.opts.mode == UdmOpts::CXX_GENERIC)
 							cross_assoc_tlhlp.typenames_single.push_back(tl_typename);
 					}
 					else
 					{
-						// Udm::CrossAssocAttr<T> A() const { return Udm::CrossAssocAttr<T>(impl, meta_A); }
-						meth_defs.push_back( boost::format("::Udm::CrossAssocAttr< %1%> %2%() const { return ::Udm::CrossAssocAttr< %1%>(impl, meta_%2%); }") % (cname + "::" + oname) % rel_name );
-						// template <class Pred> Udm::CrossAssocAttr<T, Pred> A_sorted(const Pred &) const
-						meth_defs.push_back( boost::format("template <class Pred> ::Udm::CrossAssocAttr< %1%, Pred> %2%_sorted(const Pred &) const { return ::Udm::CrossAssocAttr< %1%, Pred>(impl, meta_%2%); }") % (cname + "::" + oname) % rel_name );
+						// ::Udm::CrossAssocAttr<T> A() const
+						meth_decls.push_back( boost::format("::Udm::CrossAssocAttr< %1%> %2%() const") % (cname + "::" + oname) % rel_name );
+						// ::Udm::CrossAssocAttr<T> C::A() const { return ::Udm::CrossAssocAttr<T>(impl, meta_A); }
+						meth_defs.push_back( boost::format("::Udm::CrossAssocAttr< %1%> %3%::%2%() const { return ::Udm::CrossAssocAttr< %1%>(impl, meta_%2%); }") % (cname + "::" + oname) % rel_name % cl_name );
+						// template <class Pred> ::Udm::CrossAssocAttr<T, Pred> A_sorted(const Pred &) const { return ::Udm::CrossAssocAttr<T, Pred>(impl, meta_A); }
+						meth_decls.push_back( boost::format("template <class Pred> ::Udm::CrossAssocAttr< %1%, Pred> %2%_sorted(const Pred &) const { return ::Udm::CrossAssocAttr< %1%, Pred>(impl, meta_%2%); }") % (cname + "::" + oname) % rel_name );
 
 						if (gen.opts.mode == UdmOpts::CXX_GENERIC)
 							cross_assoc_tlhlp.typenames_multi.push_back(tl_typename);
@@ -620,18 +661,22 @@
 
 					if (the_other.max() == 1)
 					{
-						// Udm::AClassCrossPointerAttr<T1, T2> A() const { return Udm::AClassCrossPointerAttr<T1, T2>(impl, meta_A, meta_A_rev); }
-						meth_defs.push_back( boost::format("::Udm::AClassCrossPointerAttr< %1%, %2%> %3%() const { return ::Udm::AClassCrossPointerAttr< %1%, %2%>(impl, meta_%3%, meta_%3%_rev); }") % (cl_dgr + "::" + clname) % (cname + "::" + oname) % rel_name );
+						// ::Udm::AClassCrossPointerAttr<T1, T2> A() const
+						meth_decls.push_back( boost::format("::Udm::AClassCrossPointerAttr< %1%, %2%> %3%() const") % (cl_dgr + "::" + clname) % (cname + "::" + oname) % rel_name );
+						// ::Udm::AClassCrossPointerAttr<T1, T2> C::A() const { return ::Udm::AClassCrossPointerAttr<T1, T2>(impl, meta_A, meta_A_rev); }
+						meth_defs.push_back( boost::format("::Udm::AClassCrossPointerAttr< %1%, %2%> %4%::%3%() const { return ::Udm::AClassCrossPointerAttr< %1%, %2%>(impl, meta_%3%, meta_%3%_rev); }") % (cl_dgr + "::" + clname) % (cname + "::" + oname) % rel_name % cl_name );
 
 						if (gen.opts.mode == UdmOpts::CXX_GENERIC)
 							cross_assoc_ac_tlhlp.typenames_single.push_back(tl_typename);
 					}
 					else
 					{
-						// Udm::AClassCrossAssocAttr<T1, T2> A() const { return Udm::AClassCrossAssocAttr<T1, T2>(impl, meta_A, meta_A_rev); }
-						meth_defs.push_back( boost::format("::Udm::AClassCrossAssocAttr< %1%, %2%> %3%() const { return ::Udm::AClassCrossAssocAttr< %1%, %2%>(impl, meta_%3%, meta_%3%_rev); }") % (cl_dgr + "::" + clname) % (cname + "::" + oname) % rel_name );
-						// template <class Pred> Udm::AClassCrossAssocAttr<T1, T2, Pred> A_sorted(const Pred &) const { return Udm::AClassCrossPointerAttr<T1, T2, Pred>(impl, meta_A, meta_A_rev); }
-						meth_defs.push_back( boost::format("template <class Pred> ::Udm::AClassCrossAssocAttr< %1%, %2%, Pred> %3%_sorted(const Pred &) const { return ::Udm::AClassCrossAssocAttr< %1%, %2%, Pred>(impl, meta_%3%, meta_%3%_rev); }") % (cl_dgr + "::" + clname) % (cname + "::" + oname) % rel_name );
+						// ::Udm::AClassCrossAssocAttr<T1, T2> A() const
+						meth_decls.push_back( boost::format("::Udm::AClassCrossAssocAttr< %1%, %2%> %3%() const") % (cl_dgr + "::" + clname) % (cname + "::" + oname) % rel_name );
+						// ::Udm::AClassCrossAssocAttr<T1, T2> C::A() const { return ::Udm::AClassCrossAssocAttr<T1, T2>(impl, meta_A, meta_A_rev); }
+						meth_defs.push_back( boost::format("::Udm::AClassCrossAssocAttr< %1%, %2%> %4%::%3%() const { return ::Udm::AClassCrossAssocAttr< %1%, %2%>(impl, meta_%3%, meta_%3%_rev); }") % (cl_dgr + "::" + clname) % (cname + "::" + oname) % rel_name % cl_name );
+						// template <class Pred> ::Udm::AClassCrossAssocAttr<T1, T2, Pred> A_sorted(const Pred &) const { return ::Udm::AClassCrossPointerAttr<T1, T2, Pred>(impl, meta_A, meta_A_rev); }
+						meth_decls.push_back( boost::format("template <class Pred> ::Udm::AClassCrossAssocAttr< %1%, %2%, Pred> %3%_sorted(const Pred &) const { return ::Udm::AClassCrossAssocAttr< %1%, %2%, Pred>(impl, meta_%3%, meta_%3%_rev); }") % (cl_dgr + "::" + clname) % (cname + "::" + oname) % rel_name );
 
 						if (gen.opts.mode == UdmOpts::CXX_GENERIC)
 							cross_assoc_ac_tlhlp.typenames_multi.push_back(tl_typename);
@@ -702,18 +747,22 @@
 
 			if (the_other.max() == 1 )
 			{
-				// Udm::ChildAttr<T> R() const { return Udm::ChildAttr<T>(impl, meta_R); }
-				meth_defs.push_back( boost::format("::Udm::ChildAttr< %1%> %2%() const { return ::Udm::ChildAttr< %1%>(impl, meta_%2%); }") % child_name % rel_name );
+				// ::Udm::ChildAttr<T> R() const
+				meth_decls.push_back( boost::format("::Udm::ChildAttr< %1%> %2%() const") % child_name % rel_name );
+				// ::Udm::ChildAttr<T> C::R() const { return ::Udm::ChildAttr<T>(impl, meta_R); }
+				meth_defs.push_back( boost::format("::Udm::ChildAttr< %1%> %3%::%2%() const { return ::Udm::ChildAttr< %1%>(impl, meta_%2%); }") % child_name % rel_name % cl_name );
 
 				if (gen.opts.mode == UdmOpts::CXX_GENERIC)
 					children_tlhlp.typenames_single.push_back(tl_typename);
 			}
 			else
 			{
-				// Udm::ChildrenAttr<T> R() const { return Udm::ChildrenAttr<T>(impl, meta_R); }
-				meth_defs.push_back( boost::format("::Udm::ChildrenAttr< %1%> %2%() const { return ::Udm::ChildrenAttr< %1%>(impl, meta_%2%); }") % child_name % rel_name );
-				// template <class Pred> Udm::ChildrenAttr<T, Pred> R_sorted(const Pred &) const { return Udm::ChildrenAttr<T, Pred>(impl, meta_R); }
-				meth_defs.push_back( boost::format("template <class Pred> ::Udm::ChildrenAttr< %1%, Pred> %2%_sorted(const Pred &) const { return ::Udm::ChildrenAttr< %1%, Pred>(impl, meta_%2%); }") % child_name % rel_name );
+				// ::Udm::ChildrenAttr<T> R() const
+				meth_decls.push_back( boost::format("::Udm::ChildrenAttr< %1%> %2%() const") % child_name % rel_name );
+				// ::Udm::ChildrenAttr<T> C::R() const { return ::Udm::ChildrenAttr<T>(impl, meta_R); }
+				meth_defs.push_back( boost::format("::Udm::ChildrenAttr< %1%> %3%::%2%() const { return ::Udm::ChildrenAttr< %1%>(impl, meta_%2%); }") % child_name % rel_name % cl_name );
+				// template <class Pred> ::Udm::ChildrenAttr<T, Pred> R_sorted(const Pred &) const { return ::Udm::ChildrenAttr<T, Pred>(impl, meta_R); }
+				meth_decls.push_back( boost::format("template <class Pred> ::Udm::ChildrenAttr< %1%, Pred> %2%_sorted(const Pred &) const { return ::Udm::ChildrenAttr< %1%, Pred>(impl, meta_%2%); }") % child_name % rel_name );
 
 				if (gen.opts.mode == UdmOpts::CXX_GENERIC)
 					children_tlhlp.typenames_multi.push_back(tl_typename);
@@ -772,10 +821,12 @@
 
 				string kind_children_cpp = UmlClassCPPName(*j);
 
-				// Udm::ChildrenAttr<T> R_kind_children() const { return Udm::ChildrenAttr<T>(impl, Udm::NULLCHILDROLE); }
-				meth_defs.push_back( boost::format("::Udm::ChildrenAttr< %1%> %2%_kind_children() const { return ::Udm::ChildrenAttr< %1%>(impl, ::Udm::NULLCHILDROLE); }") % kind_children_cpp % kind_children_name );
-				// template <class Pred> Udm::ChildrenAttr<T, Pred> R_kind_children_sorted(const Pred &) const { return Udm::ChildrenAttr<T, Pred>(impl, Udm::NULLCHILDROLE); }
-				meth_defs.push_back( boost::format("template <class Pred> ::Udm::ChildrenAttr< %1%, Pred> %2%_kind_children_sorted(const Pred &) const { return ::Udm::ChildrenAttr< %1%, Pred>(impl, ::Udm::NULLCHILDROLE); }") % kind_children_cpp % kind_children_name );
+				// ::Udm::ChildrenAttr<T> R_kind_children() const
+				meth_decls.push_back( boost::format("::Udm::ChildrenAttr< %1%> %2%_kind_children() const") % kind_children_cpp % kind_children_name );
+				// ::Udm::ChildrenAttr<T> C::R_kind_children() const { return ::Udm::ChildrenAttr<T>(impl, ::Udm::NULLCHILDROLE); }
+				meth_defs.push_back( boost::format("::Udm::ChildrenAttr< %1%> %3%::%2%_kind_children() const { return ::Udm::ChildrenAttr< %1%>(impl, ::Udm::NULLCHILDROLE); }") % kind_children_cpp % kind_children_name % cl_name );
+				// template <class Pred> ::Udm::ChildrenAttr<T, Pred> R_kind_children_sorted(const Pred &) const { return ::Udm::ChildrenAttr<T, Pred>(impl, ::Udm::NULLCHILDROLE); }
+				meth_decls.push_back( boost::format("template <class Pred> ::Udm::ChildrenAttr< %1%, Pred> %2%_kind_children_sorted(const Pred &) const { return ::Udm::ChildrenAttr< %1%, Pred>(impl, ::Udm::NULLCHILDROLE); }") % kind_children_cpp % kind_children_name );
 
 				break;
 			}
@@ -817,9 +868,11 @@
 
 		if (the_other.isNavigable()) 
 		{
-			// Udm::ParentAttr<T> R() const { return Udm::ParentAttr<T>(impl, meta_R); }
+			// ::Udm::ParentAttr<T> R() const
+			meth_decls.push_back( boost::format("::Udm::ParentAttr< %1%> %2%() const") % parent_name % rel_name );
+			// ::Udm::ParentAttr<T> C::R() const { return ::Udm::ParentAttr<T>(impl, meta_R); }
 			// FIXME this is slow in StaticDataNetwork if there's only one child role, since it needs to get all the children of the parent
-			meth_defs.push_back( boost::format("::Udm::ParentAttr< %1%> %2%() const { return ::Udm::ParentAttr< %1%>(impl, meta_%2%); }") % parent_name % rel_name );
+			meth_defs.push_back( boost::format("::Udm::ParentAttr< %1%> %3%::%2%() const { return ::Udm::ParentAttr< %1%>(impl, meta_%2%); }") % parent_name % rel_name % cl_name );
 
 			if (gen.opts.mode == UdmOpts::CXX_GENERIC)
 			{
@@ -885,16 +938,22 @@
 		if (ans.size() == 1)
 		{
 			::Uml::Class ans_class = (::Uml::Class)(*ans.begin());
-			// Udm::ParentAttr<T> parent() const { return Udm::ParentAttr<T>(impl, Udm::NULLPARENTROLE); }
-			meth_defs.push_back( boost::format("::Udm::ParentAttr< %1%> parent() const { return ::Udm::ParentAttr< %1%>(impl, ::Udm::NULLPARENTROLE); }") % UmlClassCPPName(ans_class) );
+			// ::Udm::ParentAttr<T> parent() const
+			meth_decls.push_back( boost::format("::Udm::ParentAttr< %1%> parent() const") % UmlClassCPPName(ans_class) );
+			// ::Udm::ParentAttr<T> C::parent() const { return ::Udm::ParentAttr<T>(impl, ::Udm::NULLPARENTROLE); }
+			meth_defs.push_back( boost::format("::Udm::ParentAttr< %1%> %2%::parent() const { return ::Udm::ParentAttr< %1%>(impl, ::Udm::NULLPARENTROLE); }") % UmlClassCPPName(ans_class) % cl_name );
 		} else {
-			// Udm::ParentAttr<Udm::Object> parent() const { return Udm::ParentAttr<Udm::Object>(impl, Udm::NULLPARENTROLE); }
-			meth_defs.push_back( boost::format("::Udm::ParentAttr< ::Udm::Object> parent() const { return ::Udm::ParentAttr< ::Udm::Object>(impl, ::Udm::NULLPARENTROLE); }") );
+			// ::Udm::ParentAttr< ::Udm::Object> parent() const
+			meth_decls.push_back( boost::format("::Udm::ParentAttr< ::Udm::Object> parent() const") );
+			// ::Udm::ParentAttr< ::Udm::Object> C::parent() const { return ::Udm::ParentAttr< ::Udm::Object>(impl, ::Udm::NULLPARENTROLE); }
+			meth_defs.push_back( boost::format("::Udm::ParentAttr< ::Udm::Object> %1%::parent() const { return ::Udm::ParentAttr< ::Udm::Object>(impl, ::Udm::NULLPARENTROLE); }") % cl_name );
 
 			for(set< ::Uml::Class>::iterator ccc = ans.begin(); ccc != ans.end(); ccc++) 
 			{
-				// Udm::ParentAttr<T> T_parent() const { return Udm::ParentAttr<T>(impl, Udm::NULLPARENTROLE); }
-				meth_defs.push_back( boost::format("::Udm::ParentAttr< %1%> %2%_parent() const { return ::Udm::ParentAttr< %1%>(impl, ::Udm::NULLPARENTROLE); }") % UmlClassCPPName(*ccc) % (string) ccc->name() );
+				// ::Udm::ParentAttr<T> T_parent() const
+				meth_decls.push_back( boost::format("::Udm::ParentAttr< %1%> %2%_parent() const") % UmlClassCPPName(*ccc) % (string) ccc->name() );
+				// ::Udm::ParentAttr<T> C::T_parent() const { return ::Udm::ParentAttr<T>(impl, ::Udm::NULLPARENTROLE); }
+				meth_defs.push_back( boost::format("::Udm::ParentAttr< %1%> %3%::%2%_parent() const { return ::Udm::ParentAttr< %1%>(impl, ::Udm::NULLPARENTROLE); }") % UmlClassCPPName(*ccc) % (string) ccc->name() % cl_name );
 			}
 		}
 	}
@@ -937,8 +996,10 @@
 				// ::Uml::AssociationRole C::meta_R_end_
 				meta_defs.push_back( boost::format("::Uml::AssociationRole %2%::meta_%1%_end_") % rel_name % cl_name );
 
-				// ::Udm::AssocEndAttr<T> R_end() const { return ::Udm::AssocEndAttr<T>(impl, meta_R_end_); }
-				meth_defs.push_back( boost::format("::Udm::AssocEndAttr< %1%> %2%_end() const { return ::Udm::AssocEndAttr< %1%>(impl, meta_%2%_end_); }") % tclass_cpp_name % rel_name );
+				// ::Udm::AssocEndAttr<T> R_end() const
+				meth_decls.push_back( boost::format("::Udm::AssocEndAttr< %1%> %2%_end() const") % tclass_cpp_name % rel_name );
+				// ::Udm::AssocEndAttr<T> C::R_end() const { return ::Udm::AssocEndAttr<T>(impl, meta_R_end_); }
+				meth_defs.push_back( boost::format("::Udm::AssocEndAttr< %1%> %3%::%2%_end() const { return ::Udm::AssocEndAttr< %1%>(impl, meta_%2%_end_); }") % tclass_cpp_name % rel_name % cl_name );
 
 				// association_class::meta_OTHER_ROLE_end_ = OTHER_ROLE_target::meta_ROLE_rev = ROLE_target::meta_OTHER_ROLE
 				meta_init_links.push_back( boost::format("%1%::meta_%2%_end_ = %3%::meta_%4%_rev = %5%::meta_%6%") % cl_name % orel_name % UmlClassCPPName(the_other.target(), c.parent_ns()) % rel_name % UmlClassCPPName(tclass, c.parent_ns()) % orel_name );
@@ -946,7 +1007,8 @@
 				::Uml::AssociationRole orp_helper = the_other.rp_helper();
 				if (orp_helper) {
 					typedefs.push_back( boost::format("typedef std::pair< %1%, std::vector< ::Udm::Object> > %2%_chain_t") % tclass_cpp_name % rel_name );
-					meth_defs.push_back( boost::format("::Udm::AssocEndChainAttr< %1%, %2%_chain_t > %2%_chain() const { return ::Udm::AssocEndChainAttr< %1%, %2%_chain_t >(impl, meta_%2%_end_); }") % tclass_cpp_name % rel_name );
+					meth_decls.push_back( boost::format("::Udm::AssocEndChainAttr< %1%, %2%_chain_t > %2%_chain() const") % tclass_cpp_name % rel_name );
+					meth_defs.push_back( boost::format("::Udm::AssocEndChainAttr< %1%, %3%::%2%_chain_t > %3%::%2%_chain() const { return ::Udm::AssocEndChainAttr< %1%, %3%::%2%_chain_t >(impl, meta_%2%_end_); }") % tclass_cpp_name % rel_name % cl_name );
 
 					string orp_helper_name = ::Uml::MakeRoleName(orp_helper);
 					meta_init_links.push_back( boost::format("%1%::meta_%2%_end_.rp_helper() = %1%::meta_%3%") % cl_name % orel_name % orp_helper_name );
@@ -1002,8 +1064,10 @@
 					// ::Uml::AssociationRole C::meta_R_end_
 					meta_defs.push_back( boost::format("::Uml::AssociationRole %2%::meta_%1%_end_") % rel_name % cl_name );
 
-					// ::Udm::CrossAssocEndAttr<T> R_end() const { return ::Udm::CrossAssocEndAttr<T>(impl, meta_R_end_); }
-					meth_defs.push_back( boost::format("::Udm::CrossAssocEndAttr< %1%> %2%_end() const { return ::Udm::CrossAssocEndAttr< %1%>(impl, meta_%2%_end_); }") % (from + "::" + oname) % rel_name );
+					// ::Udm::CrossAssocEndAttr<T> R_end() const
+					meth_decls.push_back( boost::format("::Udm::CrossAssocEndAttr< %1%> %2%_end() const") % (from + "::" + oname) % rel_name );
+					// ::Udm::CrossAssocEndAttr<T> C::R_end() const { return ::Udm::CrossAssocEndAttr<T>(impl, meta_R_end_); }
+					meth_defs.push_back( boost::format("::Udm::CrossAssocEndAttr< %1%> %3%::%2%_end() const { return ::Udm::CrossAssocEndAttr< %1%>(impl, meta_%2%_end_); }") % (from + "::" + oname) % rel_name % cl_name );
 
 					meta_init_links.push_back( boost::format("%2%::meta_%1%_end_ = %3%::meta_%1%") % rel_name % cl_name % UmlClassCPPName(::Uml::theOther(*i).target()) );
 
@@ -1137,8 +1201,10 @@
 {
 	if (gen.opts.visitor_sup && !c.isAbstract())
 	{
-		// void Accept(Visitor &v) { v.Visit_C(*this); }
-		meth_defs.push_back( boost::format("void Accept(Visitor &v) { v.Visit_%1%(*this); }") % (string) c.name() );
+		// void Accept(Visitor &v)
+		meth_decls.push_back( boost::format("void Accept(Visitor &v)") );
+		// void C::Accept(Visitor &v) { v.Visit_C(*this); }
+		meth_defs.push_back( boost::format("void %1%::Accept(Visitor &v) { v.Visit_%1%(*this); }") % (string) c.name() );
 	}
 }
 
@@ -1236,9 +1302,18 @@
 	out << lidt << "public:" << endl;
 
 	OutFmts(out, idt, typedefs);
-	OutFmts(out, idt, ctor_defs, false);
-	OutFmts(out, idt, dtor_defs, false);
-	OutFmts(out, idt, meth_defs, false);
+
+	OutFmts(out, idt, ctor_decls);
+	OutFmts(out, idt, dtor_decls);
+
+	if (ctor_rvalue_decls.size() || meth_rvalue_decls.size()) {
+		out << "#ifdef UDM_RVALUE" << endl;
+		OutFmts(out, idt, ctor_rvalue_decls);
+		OutFmts(out, idt, meth_rvalue_decls);
+		out << "#endif" << endl;
+	}
+
+	OutFmts(out, idt, meth_decls);
 	OutFmts(out, idt, meta_decls);
 	OutFmts(out, idt, comments, false);
 
@@ -1271,6 +1346,17 @@
 {
 	string lidt = idt.substr(1);
 
+	OutFmts(out, lidt, ctor_defs, false);
+	OutFmts(out, lidt, dtor_defs, false);
+
+	if (ctor_rvalue_defs.size() || meth_rvalue_defs.size()) {
+		out << "#ifdef UDM_RVALUE" << endl;
+		OutFmts(out, lidt, ctor_rvalue_defs);
+		OutFmts(out, lidt, meth_rvalue_defs);
+		out << "#endif" << endl;
+	}
+
+	OutFmts(out, lidt, meth_defs, false);
 	OutFmts(out, lidt, meta_defs);
 
 	if (gen.opts.mode == UdmOpts::CXX_GENERIC) {

Modified: UDM/trunk/src/Udm/DiagramGen.cpp
==============================================================================
--- UDM/trunk/src/Udm/DiagramGen.cpp	Mon Nov 21 03:55:33 2011	(r3958)
+++ UDM/trunk/src/Udm/DiagramGen.cpp	Mon Nov 21 04:01:53 2011	(r3959)
@@ -56,20 +56,20 @@
 	begin_meta_init_links2 = boost::format("void InitMetaLinks(const ::Uml::Diagram &parent) {");
 	end_meta_init_links2   = boost::format("}");
 
-	other_decls.push_back( boost::format("extern %1%Udm::UdmDiagram diagram")
+	other_decls.push_back( boost::format("extern %1% ::Udm::UdmDiagram diagram")
 				% gen.opts.macro );
 
-	other_defs.push_back( boost::format("%1%Udm::UdmDiagram diagram = { &meta, Initialize }") % gen.opts.macro );
+	other_defs.push_back( boost::format("%1% ::Udm::UdmDiagram diagram = { &meta, Initialize }") % gen.opts.macro );
 
 	other_defs.push_back( boost::format("static struct _regClass\n\
 \t{\n\
 \t\t_regClass()\n\
 \t\t{\n\
-\t\t\tUdm::MetaDepository::StoreDiagram(\"%1%\", diagram);\n\
+\t\t\t::Udm::MetaDepository::StoreDiagram(\"%1%\", diagram);\n\
 \t\t}\n\
 \t\t~_regClass()\n\
 \t\t{\n\
-\t\t\tUdm::MetaDepository::RemoveDiagram(\"%1%\");\n\
+\t\t\t::Udm::MetaDepository::RemoveDiagram(\"%1%\");\n\
 \t\t}\n\
 \t} __regUnUsed\
 ")
@@ -108,13 +108,13 @@
 		meth_defs.push_back( boost::format("\t%1%::Initialize();") % (string) cross_diagram.name() );
 
 	meth_defs.push_back( boost::format("\n\
-\t\tUDM_ASSERT( meta == Udm::null );\n\
+\t\tUDM_ASSERT( meta == ::Udm::null );\n\
 ")
 				);
 
 	if (gen.opts.meta_init == UdmOpts::DYNAMIC_INIT)
-		meth_defs.push_back( boost::format("\tUdmStatic::StaticDataNetwork * meta_dn = new UdmStatic::StaticDataNetwork(::Uml::diagram);\n\
-\t\tmeta_dn->CreateNew(\"%1%.mem\", \"\", ::Uml::Diagram::meta, Udm::CHANGES_LOST_DEFAULT);\n\
+		meth_defs.push_back( boost::format("\t::UdmStatic::StaticDataNetwork * meta_dn = new ::UdmStatic::StaticDataNetwork(::Uml::diagram);\n\
+\t\tmeta_dn->CreateNew(\"%1%.mem\", \"\", ::Uml::Diagram::meta, ::Udm::CHANGES_LOST_DEFAULT);\n\
 \t\tmeta = ::Uml::Diagram::Cast(meta_dn->GetRootObject());\n\
 \n\
 \t\t::Uml::InitDiagramProps(meta, \"%1%\", \"%2%\");\n\
@@ -136,11 +136,11 @@
 
 	// create a static DN for Uml meta
 	if (gen.opts.meta_init == UdmOpts::STATIC_INIT && dgr_name == "Uml")
-		meth_defs.push_back( boost::format("\tUdmStatic::StaticDataNetwork* dn = new UdmStatic::StaticDataNetwork(diagram);\n\
+		meth_defs.push_back( boost::format("\t::UdmStatic::StaticDataNetwork* dn = new ::UdmStatic::StaticDataNetwork(diagram);\n\
 \t\tdn->rootobject = meta;\n\
-\t\tstatic_cast<UdmStatic::StaticObject*>(dn->rootobject.__impl())->mydn = dn;\n\
+\t\tstatic_cast< ::UdmStatic::StaticObject*>(dn->rootobject.__impl())->mydn = dn;\n\
 \t\tdn->systemname = \"%1%\";\n\
-\t\tdn->sem = Udm::CHANGES_LOST_DEFAULT;\n\
+\t\tdn->sem = ::Udm::CHANGES_LOST_DEFAULT;\n\
 \n\
 ")
 					% dgr_name
@@ -193,7 +193,7 @@
 \t}\n\
 ")
 					% gen.opts.macro
-					% (cross_diagram && (cross_diagram != c) ? "UDM_ASSERT(::" + (string) cross_diagram.name() + "::meta != Udm::null);" : "")
+					% (cross_diagram && (cross_diagram != c) ? "UDM_ASSERT(::" + (string) cross_diagram.name() + "::meta != ::Udm::null);" : "")
 					% (uri_mapping_stmts.size() ? "_SetURIMapping();" : "")
 					% (xsd_storage_stmts.size() ? "_SetXsdStorage();" : "")
 				     );

Modified: UDM/trunk/src/Udm/Udm.h
==============================================================================
--- UDM/trunk/src/Udm/Udm.h	Mon Nov 21 03:55:33 2011	(r3958)
+++ UDM/trunk/src/Udm/Udm.h	Mon Nov 21 04:01:53 2011	(r3959)
@@ -167,13 +167,20 @@
 	vector<boost::format> typedefs;
 
 	// constructors
+	vector<boost::format> ctor_decls;
+	vector<boost::format> ctor_rvalue_decls;
 	vector<boost::format> ctor_defs;
+	vector<boost::format> ctor_rvalue_defs;
 
 	// destructors
+	vector<boost::format> dtor_decls;
 	vector<boost::format> dtor_defs;
 
 	// methods
+	vector<boost::format> meth_decls;
+	vector<boost::format> meth_rvalue_decls;
 	vector<boost::format> meth_defs;
+	vector<boost::format> meth_rvalue_defs;
 	// methods accessing composition relationships (for MPL code)
 	vector<boost::format> meth_defs_mpl_comp;
 	// methods accessing association relationships (for MPL code)
@@ -296,13 +303,16 @@
 			for (set< ::Uml::Class>::const_iterator cl_i = classes.begin(); cl_i != classes.end(); cl_i++)
 			{
 				if (!cl_i->isAbstract()) {
-					meth_defs.push_back( boost::format("virtual void Visit_%1%(const %1% &) {}") % (string)cl_i->name() );
+					meth_decls.push_back( boost::format("virtual void Visit_%1%(const %1% &)") % (string)cl_i->name() );
+					meth_defs.push_back( boost::format("void Visitor::Visit_%1%(const %1% &) {}") % (string)cl_i->name() );
 				}
 			}
 
-			meth_defs.push_back( boost::format("virtual void Visit_Object(const Udm::Object &) {}") );
+			meth_decls.push_back( boost::format("virtual void Visit_Object(const ::Udm::Object &)") );
+			meth_defs.push_back( boost::format("void Visitor::Visit_Object(const ::Udm::Object &) {}") );
 
-			dtor_defs.push_back( boost::format("virtual ~Visitor() {}") );
+			dtor_decls.push_back( boost::format("virtual ~Visitor()") );
+			dtor_defs.push_back( boost::format("Visitor::~Visitor() {}") );
 		}
 	}
 };

Modified: UDM/trunk/src/Udm/UdmCpp.cpp
==============================================================================
--- UDM/trunk/src/Udm/UdmCpp.cpp	Mon Nov 21 03:55:33 2011	(r3958)
+++ UDM/trunk/src/Udm/UdmCpp.cpp	Mon Nov 21 04:01:53 2011	(r3959)
@@ -429,7 +429,7 @@
 			const std::string& ns = it->first;
 			const std::string& uri = it->second;
 
-			r.push_back( boost::format("\tUdmDom::AddURIToUMLNamespaceMapping(\"%1%\", \"%2%\", \"%3%_%4%.xsd\");") % uri % ns % (string) diagram.name() % UdmUtil::replace_delimiter(ns, "::", "_") );
+			r.push_back( boost::format("\t::UdmDom::AddURIToUMLNamespaceMapping(\"%1%\", \"%2%\", \"%3%_%4%.xsd\");") % uri % ns % (string) diagram.name() % UdmUtil::replace_delimiter(ns, "::", "_") );
 		}
 	}
 
@@ -452,7 +452,7 @@
 
 			File2Code f2c(opts.out_dir, nsn + std::string("_xsd"), infname, File2Code::CPP);
 			f2c.gen();
-			r.push_back( boost::format("\tUdmDom::str_xsd_storage::StoreXsd(\"%1%.xsd\", %1%_xsd::getString());") % nsn );
+			r.push_back( boost::format("\t::UdmDom::str_xsd_storage::StoreXsd(\"%1%.xsd\", %1%_xsd::getString());") % nsn );
 		}
 
 		const string& dgrn = diagram.name();


More information about the Mobies-commit mailing list