[Mobies-commit] [commit] r4413 - in UDM/trunk: include src/Udm src/Udm/PythonAPIGen
ksmyth at svn.isis.vanderbilt.edu
ksmyth at svn.isis.vanderbilt.edu
Tue Apr 3 13:26:27 CDT 2018
Author: ksmyth
Date: Tue Apr 3 13:26:26 2018
New Revision: 4413
Log:
Udm.exe performance optimizations
Modified:
UDM/trunk/include/UmlExt.h
UDM/trunk/src/Udm/ClassGen.cpp
UDM/trunk/src/Udm/DiagramGen.cpp
UDM/trunk/src/Udm/PythonAPIGen/PythonAPIGen.cpp
UDM/trunk/src/Udm/PythonAPIGen/PythonAPIGen.h
UDM/trunk/src/Udm/Udm.h
UDM/trunk/src/Udm/UdmCpp.cpp
Modified: UDM/trunk/include/UmlExt.h
==============================================================================
--- UDM/trunk/include/UmlExt.h Mon Mar 12 16:11:00 2018 (r4412)
+++ UDM/trunk/include/UmlExt.h Tue Apr 3 13:26:26 2018 (r4413)
@@ -351,34 +351,35 @@
GetItems m_items_getter;
};
+ // n.b. _kind_children is more performant with Dom backend
class UDM_DLL DiagramAssociations : public ElemCollection<Diagram, Association> {
public:
- DiagramAssociations(const Diagram &diagram) : ElemCollection<Diagram, Association>(diagram, &Diagram::associations, &Namespace::associations) {}
+ DiagramAssociations(const Diagram &diagram) : ElemCollection<Diagram, Association>(diagram, &Diagram::Association_kind_children, &Namespace::Association_kind_children) {}
};
class UDM_DLL DiagramClasses : public ElemCollection<Diagram, Class> {
public:
- DiagramClasses(const Diagram &diagram) : ElemCollection<Diagram, Class>(diagram, &Diagram::classes, &Namespace::classes) {}
+ DiagramClasses(const Diagram &diagram) : ElemCollection<Diagram, Class>(diagram, &Diagram::Class_kind_children, &Namespace::Class_kind_children) {}
};
class UDM_DLL DiagramCompositions : public ElemCollection<Diagram, Composition> {
public:
- DiagramCompositions(const Diagram &diagram) : ElemCollection<Diagram, Composition>(diagram, &Diagram::compositions, &Namespace::compositions) {}
+ DiagramCompositions(const Diagram &diagram) : ElemCollection<Diagram, Composition>(diagram, &Diagram::Composition_kind_children, &Namespace::Composition_kind_children) {}
};
class UDM_DLL NamespaceAssociations : public ElemCollection<Namespace, Association> {
public:
- NamespaceAssociations(const Namespace &ns) : ElemCollection<Namespace, Association>(ns, &Namespace::associations, &Namespace::associations) {}
+ NamespaceAssociations(const Namespace &ns) : ElemCollection<Namespace, Association>(ns, &Namespace::Association_kind_children, &Namespace::Association_kind_children) {}
};
class UDM_DLL NamespaceClasses : public ElemCollection<Namespace, Class> {
public:
- NamespaceClasses(const Namespace &ns) : ElemCollection<Namespace, Class>(ns, &Namespace::classes, &Namespace::classes) {}
+ NamespaceClasses(const Namespace &ns) : ElemCollection<Namespace, Class>(ns, &Namespace::Class_kind_children, &Namespace::Class_kind_children) {}
};
class UDM_DLL NamespaceCompositions : public ElemCollection<Namespace, Composition> {
public:
- NamespaceCompositions(const Namespace &ns) : ElemCollection<Namespace, Composition>(ns, &Namespace::compositions, &Namespace::compositions) {}
+ NamespaceCompositions(const Namespace &ns) : ElemCollection<Namespace, Composition>(ns, &Namespace::Composition_kind_children, &Namespace::Composition_kind_children) {}
};
template<class CONTAINER>
Modified: UDM/trunk/src/Udm/ClassGen.cpp
==============================================================================
--- UDM/trunk/src/Udm/ClassGen.cpp Mon Mar 12 16:11:00 2018 (r4412)
+++ UDM/trunk/src/Udm/ClassGen.cpp Tue Apr 3 13:26:26 2018 (r4413)
@@ -814,11 +814,11 @@
::Uml::Namespace ns = c.parent_ns();
::Uml::DiagramClasses allclasses = ::Uml::DiagramClasses(dgr);
- for (::Uml::DiagramClasses::iterator j = allclasses.begin(); j != allclasses.end(); j++)
+ for (std::vector< ::Uml::Class>::const_iterator j = this->gen.DiagramClasses.begin(); j != this->gen.DiagramClasses.end(); j++)
{
for (set< ::Uml::Class>::iterator k = childrenkinds.begin(); k != childrenkinds.end(); k++)
{
- if (Uml::IsDerivedFrom(*j, *k) || Uml::IsDerivedFrom(*k, *j))
+ if (gen.isDerivedFrom(*j, *k) || gen.isDerivedFrom(*k, *j))
{
string kind_children_name;
if (ns != j->parent_ns())
@@ -1301,7 +1301,7 @@
}
}
-void ClassGen::OutDecls(ostream &out)
+void ClassGen::OutDecls(ostream &out) const
{
string lidt = idt.substr(1);
@@ -1349,7 +1349,7 @@
out << lidt << "};" << endl << endl;
}
-void ClassGen::OutDefs(ostream &out)
+void ClassGen::OutDefs(ostream &out) const
{
string lidt = idt.substr(1);
@@ -1377,7 +1377,7 @@
}
}
-void ClassGen::OutMetaCreate(ostream &out)
+void ClassGen::OutMetaCreate(ostream &out) const
{
switch (gen.opts.meta_init)
{
@@ -1395,7 +1395,7 @@
}
}
-void ClassGen::OutMetaInit(ostream &out)
+void ClassGen::OutMetaInit(ostream &out) const
{
switch (gen.opts.meta_init)
{
@@ -1413,7 +1413,7 @@
}
}
-void ClassGen::OutMetaInitLinks(ostream &out)
+void ClassGen::OutMetaInitLinks(ostream &out) const
{
switch (gen.opts.meta_init)
{
@@ -1431,12 +1431,12 @@
}
}
-void ClassGen::OutMetaInit2(ostream &out)
+void ClassGen::OutMetaInit2(ostream &out) const
{
OutFmts(out, idt, meta_init2);
}
-void ClassGen::OutMetaInitLinks2(ostream &out)
+void ClassGen::OutMetaInitLinks2(ostream &out) const
{
OutFmts(out, idt, meta_init_links2);
}
Modified: UDM/trunk/src/Udm/DiagramGen.cpp
==============================================================================
--- UDM/trunk/src/Udm/DiagramGen.cpp Mon Mar 12 16:11:00 2018 (r4412)
+++ UDM/trunk/src/Udm/DiagramGen.cpp Tue Apr 3 13:26:26 2018 (r4413)
@@ -412,7 +412,7 @@
CLGEN_MAP::const_iterator i = all_clgen_map.find(cl_path);
if (i == all_clgen_map.end()) throw udm_exception("all_clgen_map does not contain a mapping for the class " + cl_path);
- ClassGen cgen = i->second;
+ const ClassGen& cgen = i->second;
cgen.OutDecls(out);
}
Modified: UDM/trunk/src/Udm/PythonAPIGen/PythonAPIGen.cpp
==============================================================================
--- UDM/trunk/src/Udm/PythonAPIGen/PythonAPIGen.cpp Mon Mar 12 16:11:00 2018 (r4412)
+++ UDM/trunk/src/Udm/PythonAPIGen/PythonAPIGen.cpp Tue Apr 3 13:26:26 2018 (r4413)
@@ -4,7 +4,7 @@
#include <iterator>
-PythonInheritanceSolver::PythonInheritanceSolver(const Uml::Diagram &diagram, bool sort_by_namespace) : ::UdmCPPGen::InheritanceSolver(diagram, sort_by_namespace) {};
+PythonInheritanceSolver::PythonInheritanceSolver(const Uml::Diagram &diagram, const ::UdmCPPGen::UdmGen& gen, bool sort_by_namespace) : ::UdmCPPGen::InheritanceSolver(diagram, gen, sort_by_namespace) {};
string PythonInheritanceSolver::getAncestorList(const ::Uml::Class &cl ) const
{
string ret;
@@ -86,7 +86,10 @@
/*GENERATE PYTHON CLASSES*/
set< ::Uml::Class> uml_classes = m_diagram.classes();
- PythonInheritanceSolver is(m_diagram);
+ UdmOpts opts;
+ ::UdmCPPGen::UdmGen gen(m_diagram, opts);
+ PythonInheritanceSolver is(m_diagram, gen);
+
for ( vector < ::Uml::Class>::iterator gio_i = is.good_inheritence_order.begin(); gio_i != is.good_inheritence_order.end(); gio_i++)
generateClass(*gio_i,is );
Modified: UDM/trunk/src/Udm/PythonAPIGen/PythonAPIGen.h
==============================================================================
--- UDM/trunk/src/Udm/PythonAPIGen/PythonAPIGen.h Mon Mar 12 16:11:00 2018 (r4412)
+++ UDM/trunk/src/Udm/PythonAPIGen/PythonAPIGen.h Tue Apr 3 13:26:26 2018 (r4413)
@@ -13,7 +13,7 @@
{
friend class PythonAPIGen;
public:
- PythonInheritanceSolver(const ::Uml::Diagram &diagram, bool sort_by_namespace = false);
+ PythonInheritanceSolver(const ::Uml::Diagram &diagram, const ::UdmCPPGen::UdmGen& gen, bool sort_by_namespace = false);
virtual string getAncestorList(const ::Uml::Class &cl) const;
};
class PythonAPIGen
Modified: UDM/trunk/src/Udm/Udm.h
==============================================================================
--- UDM/trunk/src/Udm/Udm.h Mon Mar 12 16:11:00 2018 (r4412)
+++ UDM/trunk/src/Udm/Udm.h Tue Apr 3 13:26:26 2018 (r4413)
@@ -20,6 +20,8 @@
#include <UdmDom.h>
#include <UmlExt.h>
+#include <unordered_set>
+
using namespace std;
@@ -112,6 +114,7 @@
void OutVecFmts(ostream &out, const string &idt, const vector< vector<boost::format> > &v, const string &label = "");
class DiagramGen;
+class UdmGen;
class InheritanceSolver {
typedef map< ::Uml::Class, set< ::Uml::Class> > cltoclsmap;
@@ -135,15 +138,16 @@
vector< ::Uml::Class> good_inheritence_order;
friend class DiagramGen;
+ const UdmGen& gen;
public:
- InheritanceSolver(const ::Uml::Diagram &diagram, bool sort_by_namespace = false);
+ InheritanceSolver(const ::Uml::Diagram &diagram, const UdmGen& gen, bool sort_by_namespace = false);
virtual string getAncestorList(const ::Uml::Class &cl) const;
string getInitializers(const ::Uml::Class &cl, const string &argument) const;
};
-class UdmGen {
+class UdmGen : boost::noncopyable {
// maximum size of Boost MPL sequences created
static int mpl_seq_max_size;
@@ -151,7 +155,36 @@
::Uml::Diagram diagram;
UdmOpts opts;
- UdmGen(const ::Uml::Diagram &p_diagram, const UdmOpts &p_opts) : diagram(p_diagram), opts(p_opts) { }
+ std::vector< ::Uml::Class> DiagramClasses;
+
+ struct unique_hash { //: public unary_function<_Kty, size_t> {
+ size_t operator()(const std::pair< Udm::ObjectImpl::uniqueId_type, Udm::ObjectImpl::uniqueId_type>& key) const {
+ return key.first + key.second * 32;
+ }
+ };
+
+ std::unordered_set < std::pair< Udm::ObjectImpl::uniqueId_type, Udm::ObjectImpl::uniqueId_type>, unique_hash> IsDerivedFrom;
+
+ UdmGen(const ::Uml::Diagram &p_diagram, const UdmOpts &p_opts) : diagram(p_diagram), opts(p_opts) {
+ ::Uml::DiagramClasses allclasses = ::Uml::DiagramClasses(diagram);
+ for (::Uml::DiagramClasses::iterator i = allclasses.begin(); i != allclasses.end(); ++i) {
+ DiagramClasses.push_back(*i);
+ }
+ for (std::vector< ::Uml::Class>::const_iterator i = DiagramClasses.begin(); i != DiagramClasses.end(); i++)
+ {
+ for (std::vector< ::Uml::Class>::const_iterator j = DiagramClasses.begin(); j != DiagramClasses.end(); j++)
+ {
+ if (Uml::IsDerivedFrom(*i, *j))
+ {
+ IsDerivedFrom.emplace(std::make_pair< Udm::ObjectImpl::uniqueId_type, Udm::ObjectImpl::uniqueId_type>(i->uniqueId(), j->uniqueId()));
+ }
+ }
+ }
+ }
+
+ bool isDerivedFrom(const ::Uml::Class &a, const ::Uml::Class &b) const {
+ return IsDerivedFrom.find(std::make_pair< Udm::ObjectImpl::uniqueId_type, Udm::ObjectImpl::uniqueId_type>(a.uniqueId(), b.uniqueId())) != IsDerivedFrom.end();
+ }
void Generate(const ::Uml::Diagram &cross_dgr, const string &filename);
vector<boost::format> HPreamble(const string &fname) const;
@@ -243,7 +276,7 @@
::Uml::Class c;
- UdmGen gen;
+ const UdmGen& gen;
string idt; // indentation to use
// store typedefs and typenames to create typelists
@@ -275,13 +308,13 @@
ClassGen(const ::Uml::Class &p_c, const UdmGen &p_gen) : c(p_c), gen(p_gen) {}
void Process(const ::Uml::Diagram &cross_diagram, const InheritanceSolver &is);
- void OutDecls(ostream &out);
- void OutDefs(ostream &out);
- void OutMetaCreate(ostream &out);
- void OutMetaInit(ostream &out);
- void OutMetaInitLinks(ostream &out);
- void OutMetaInit2(ostream &out);
- void OutMetaInitLinks2(ostream &out);
+ void OutDecls(ostream &out) const;
+ void OutDefs(ostream &out) const;
+ void OutMetaCreate(ostream &out) const;
+ void OutMetaInit(ostream &out) const;
+ void OutMetaInitLinks(ostream &out) const;
+ void OutMetaInit2(ostream &out) const;
+ void OutMetaInitLinks2(ostream &out) const;
protected:
void Basic(const InheritanceSolver &is);
@@ -414,7 +447,7 @@
// NamespaceGen object, or NULL if
// this is a DiagramGen
- UdmGen gen;
+ const UdmGen& gen;
string idt; // indentation to use
virtual void CustomProcess(const ::Uml::Diagram &cross_diagram, const InheritanceSolver &is);
@@ -448,10 +481,10 @@
{
fwd_decls.push_back( boost::format("class %1%%2%") % gen.opts.macro % (string)i->name() );
- ClassGen cgen(*i, gen);
- cgen.Process(cross_diagram, is);
+ // clgen_map.emplace(piecewise_construct, make_tuple(), make_tuple());
+ ClassGen& cgen = clgen_map.insert(make_pair(i->getPath2("::", false), ClassGen(*i, gen))).first->second;
- clgen_map.insert(make_pair(i->getPath2("::", false), cgen));
+ cgen.Process(cross_diagram, is);
}
set< ::Uml::Association> associations = c.associations();
@@ -661,7 +694,7 @@
i->second.CollectMaps(p_nsgen_map, p_clgen_map);
}
- void BeginNS(ostream &out, bool parents_too = true)
+ void BeginNS(ostream &out, bool parents_too = true) const
{
if (parents_too)
for (vector<boost::format>::const_iterator i = begin_ns.begin(); i != begin_ns.end(); i++)
@@ -672,7 +705,7 @@
out << endl;
}
- void EndNS(ostream &out, bool parents_too = true)
+ void EndNS(ostream &out, bool parents_too = true) const
{
if (parents_too)
for (vector<boost::format>::const_iterator i = end_ns.begin(); i != end_ns.end(); i++)
@@ -683,7 +716,7 @@
out << endl;
}
- void OutDecls(ostream &out)
+ void OutDecls(ostream &out) const
{
string lidt = idt + "\t";
@@ -699,7 +732,7 @@
OutFmts(out, lidt, other_decls);
}
- void OutMetaCreate(ostream &out)
+ void OutMetaCreate(ostream &out) const
{
string lidt = idt + "\t";
@@ -719,7 +752,7 @@
}
}
- void OutMetaInit(ostream &out)
+ void OutMetaInit(ostream &out) const
{
string lidt = idt + "\t";
@@ -739,7 +772,7 @@
}
}
- void OutMetaInitLinks(ostream &out)
+ void OutMetaInitLinks(ostream &out) const
{
string lidt = idt + "\t";
@@ -759,17 +792,17 @@
}
}
- void OutMetaInit2(ostream &out)
+ void OutMetaInit2(ostream &out) const
{
OutFmts(out, idt + "\t", meta_init2);
}
- void OutMetaInitLinks2(ostream &out)
+ void OutMetaInitLinks2(ostream &out) const
{
OutFmts(out, idt + "\t", meta_init_links2);
}
- void OutMetaCreateAssocs(ostream &out)
+ void OutMetaCreateAssocs(ostream &out) const
{
string lidt = idt + "\t\t";
@@ -789,7 +822,7 @@
}
}
- void OutMetaCreateComps(ostream &out)
+ void OutMetaCreateComps(ostream &out) const
{
string lidt = idt + "\t\t";
@@ -809,19 +842,19 @@
}
}
- void OutMetaInitAssocs(ostream &out)
+ void OutMetaInitAssocs(ostream &out) const
{
if (gen.opts.meta_init == UdmOpts::DYNAMIC_INIT)
OutVecFmts(out, idt + "\t\t", meta_init_assocs, "associations");
}
- void OutMetaInitComps(ostream &out)
+ void OutMetaInitComps(ostream &out) const
{
if (gen.opts.meta_init == UdmOpts::DYNAMIC_INIT)
OutVecFmts(out, idt + "\t\t", meta_init_comps, "compositions");
}
- void OutMetaInitLinksAssocs(ostream &out)
+ void OutMetaInitLinksAssocs(ostream &out) const
{
string lidt = idt + "\t\t";
@@ -840,7 +873,7 @@
}
}
- void OutMetaInitLinksComps(ostream &out)
+ void OutMetaInitLinksComps(ostream &out) const
{
string lidt = idt + "\t\t";
@@ -859,7 +892,7 @@
}
}
- void OutDefs(ostream &out)
+ void OutDefs(ostream &out) const
{
if (meta_def.size())
out << idt << "\t" << meta_def << ";" << endl << endl;
@@ -872,7 +905,7 @@
if (clgen_map.size())
{
out << lidt << "\t// classes, with attributes, constraints and constraint definitions" << endl;
- for (CLGEN_MAP::iterator i = clgen_map.begin(); i != clgen_map.end(); i++)
+ for (CLGEN_MAP::const_iterator i = clgen_map.begin(); i != clgen_map.end(); i++)
i->second.OutMetaCreate(out);
}
@@ -882,7 +915,7 @@
if (nsgen_map.size())
{
out << lidt << "\t// namespaces" << endl;
- for (NSGEN_MAP::iterator i = nsgen_map.begin(); i != nsgen_map.end(); i++)
+ for (NSGEN_MAP::const_iterator i = nsgen_map.begin(); i != nsgen_map.end(); i++)
i->second.OutMetaCreate(out);
}
@@ -895,7 +928,7 @@
if (clgen_map.size())
{
out << lidt << "\t// classes, with attributes, constraints and constraint definitions" << endl;
- for (CLGEN_MAP::iterator i = clgen_map.begin(); i != clgen_map.end(); i++)
+ for (CLGEN_MAP::const_iterator i = clgen_map.begin(); i != clgen_map.end(); i++)
i->second.OutMetaInit(out);
}
@@ -905,7 +938,7 @@
if (nsgen_map.size())
{
out << lidt << "\t// namespaces" << endl;
- for (NSGEN_MAP::iterator i = nsgen_map.begin(); i != nsgen_map.end(); i++)
+ for (NSGEN_MAP::const_iterator i = nsgen_map.begin(); i != nsgen_map.end(); i++)
i->second.OutMetaInit(out);
}
@@ -916,7 +949,7 @@
out << lidt << begin_meta_init_links << endl;
if (clgen_map.size())
- for (CLGEN_MAP::iterator i = clgen_map.begin(); i != clgen_map.end(); i++)
+ for (CLGEN_MAP::const_iterator i = clgen_map.begin(); i != clgen_map.end(); i++)
i->second.OutMetaInitLinks(out);
OutMetaInitLinksAssocs(out);
@@ -925,7 +958,7 @@
if (nsgen_map.size())
{
out << lidt << "\t// namespaces" << endl;
- for (NSGEN_MAP::iterator i = nsgen_map.begin(); i != nsgen_map.end(); i++)
+ for (NSGEN_MAP::const_iterator i = nsgen_map.begin(); i != nsgen_map.end(); i++)
i->second.OutMetaInitLinks(out);
}
@@ -941,14 +974,14 @@
if (clgen_map.size())
{
out << lidt << "\t// classes, with attributes, constraints and constraint definitions" << endl;
- for (CLGEN_MAP::iterator i = clgen_map.begin(); i != clgen_map.end(); i++)
+ for (CLGEN_MAP::const_iterator i = clgen_map.begin(); i != clgen_map.end(); i++)
i->second.OutMetaInit2(out);
}
if (nsgen_map.size())
{
out << lidt << "\t// namespaces" << endl;
- for (NSGEN_MAP::iterator i = nsgen_map.begin(); i != nsgen_map.end(); i++)
+ for (NSGEN_MAP::const_iterator i = nsgen_map.begin(); i != nsgen_map.end(); i++)
i->second.OutMetaInit2(out);
}
@@ -961,14 +994,14 @@
if (clgen_map.size())
{
out << lidt << "\t// classes" << endl;
- for (CLGEN_MAP::iterator i = clgen_map.begin(); i != clgen_map.end(); i++)
+ for (CLGEN_MAP::const_iterator i = clgen_map.begin(); i != clgen_map.end(); i++)
i->second.OutMetaInitLinks2(out);
}
if (nsgen_map.size())
{
out << lidt << "\t// namespaces" << endl;
- for (NSGEN_MAP::iterator i = nsgen_map.begin(); i != nsgen_map.end(); i++)
+ for (NSGEN_MAP::const_iterator i = nsgen_map.begin(); i != nsgen_map.end(); i++)
i->second.OutMetaInitLinks2(out);
}
@@ -991,7 +1024,7 @@
out << endl;
}
- void OutCPP(ostream &out)
+ void OutCPP(ostream &out) const
{
BeginNS(out, false);
@@ -1002,7 +1035,7 @@
NSGEN_MAP::const_iterator i = nsgen_map.find(ns_path);
if (i == nsgen_map.end()) throw udm_exception("nsgen_map does not contain a mapping for the namespace " + ns_path);
- CGen< ::Uml::Namespace> ngen = i->second;
+ const CGen< ::Uml::Namespace>& ngen = i->second;
ngen.OutCPP(out);
}
@@ -1013,7 +1046,7 @@
CLGEN_MAP::const_iterator i = clgen_map.find(cl_path);
if (i == clgen_map.end()) throw udm_exception("clgen_map does not contain a mapping for the class " + cl_path);
- ClassGen cgen = i->second;
+ const ClassGen& cgen = i->second;
cgen.OutDefs(out);
}
@@ -1048,7 +1081,7 @@
void CustomProcess(const ::Uml::Diagram &cross_diagram, const InheritanceSolver &p_is);
public:
- DiagramGen(const ::Uml::Diagram &p_c, const UdmGen &p_gen) : CGen< ::Uml::Diagram>(p_c, p_gen), is(p_c, p_gen.opts.cxx_source_unit == UdmOpts::UNIT_NAMESPACE) { }
+ DiagramGen(const ::Uml::Diagram &p_c, const UdmGen &p_gen) : CGen< ::Uml::Diagram>(p_c, p_gen), is(p_c, p_gen, p_gen.opts.cxx_source_unit == UdmOpts::UNIT_NAMESPACE) { }
void Process(const ::Uml::Diagram &cross_diagram, bool recursively = true)
{
Modified: UDM/trunk/src/Udm/UdmCpp.cpp
==============================================================================
--- UDM/trunk/src/Udm/UdmCpp.cpp Mon Mar 12 16:11:00 2018 (r4412)
+++ UDM/trunk/src/Udm/UdmCpp.cpp Tue Apr 3 13:26:26 2018 (r4413)
@@ -26,12 +26,12 @@
-InheritanceSolver::InheritanceSolver(const ::Uml::Diagram &diagram, bool sort_by_namespace)
+InheritanceSolver::InheritanceSolver(const ::Uml::Diagram &diagram, const UdmGen& gen, bool sort_by_namespace) : gen(gen)
{
- ::Uml::DiagramClasses all_classes(diagram);
vector< ::Uml::Class> classes;
- for (::Uml::DiagramClasses::iterator i = all_classes.begin(); i != all_classes.end(); i++) {
- classes.push_back(*i);
+ for (vector< ::Uml::Class>::const_iterator it = gen.DiagramClasses.begin(); it != gen.DiagramClasses.end(); it++)
+ {
+ classes.push_back(*it);
}
bool has_namespaces = ((set< ::Uml::Namespace>)diagram.namespaces()).size() > 0;
@@ -40,7 +40,7 @@
{
::Uml::Class cl;
set< ::Uml::Class> bases;
- vector< ::Uml::Class>::iterator c;
+ vector< ::Uml::Class>::const_iterator c;
for( c = classes.begin(); c != classes.end(); c++ )
{
cl = *c;
@@ -86,7 +86,7 @@
{
for(set< ::Uml::Class>::iterator j = dirancs.begin(); j != dirancs.end(); j++)
{
- if(!Uml::IsDerivedFrom(*j, cl))
+ if (!gen.isDerivedFrom(*j, cl))
{
virtualbaseclasses.insert(cl);
break;
@@ -118,7 +118,7 @@
{
for(set< ::Uml::Class>::iterator j = dirancs.begin(); j != dirancs.end(); j++)
{
- if(!Uml::IsDerivedFrom(*j, cl) && Uml::IsDerivedFrom(*j, *h))
+ if (!gen.isDerivedFrom(*j, cl) && gen.isDerivedFrom(*j, *h))
{
actmapi->second.insert(cl);
}
@@ -159,7 +159,7 @@
int found_inset = 0, found_notinset = 0;
for(set< ::Uml::Class>::iterator p = subtypes.begin(); p != subtypes.end(); p++)
{
- if(!Uml::IsDerivedFrom(cl, *p)) continue;
+ if(!gen.isDerivedFrom(cl, *p)) continue;
if(actmapi->second.find(*p) != actmapi->second.end()) found_inset++;
else found_notinset++;
}
More information about the Mobies-commit
mailing list