Renamed common::id_t to eid_t to avoid conflicts with system id_t
This commit is contained in:
@@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
namespace clanguml::class_diagram::generators::mermaid {
|
namespace clanguml::class_diagram::generators::mermaid {
|
||||||
|
|
||||||
|
using clanguml::common::eid_t;
|
||||||
using clanguml::common::generators::mermaid::indent;
|
using clanguml::common::generators::mermaid::indent;
|
||||||
using clanguml::common::generators::mermaid::render_name;
|
using clanguml::common::generators::mermaid::render_name;
|
||||||
|
|
||||||
@@ -405,7 +406,7 @@ void generator::generate_relationships(
|
|||||||
LOG_DBG("== Processing relationship {}", to_string(r.type()));
|
LOG_DBG("== Processing relationship {}", to_string(r.type()));
|
||||||
|
|
||||||
std::stringstream relstr;
|
std::stringstream relstr;
|
||||||
clanguml::common::id_t destination{};
|
eid_t destination{};
|
||||||
try {
|
try {
|
||||||
destination = r.destination();
|
destination = r.destination();
|
||||||
|
|
||||||
@@ -513,7 +514,7 @@ void generator::generate_relationships(
|
|||||||
LOG_DBG("== Processing relationship {}", to_string(r.type()));
|
LOG_DBG("== Processing relationship {}", to_string(r.type()));
|
||||||
|
|
||||||
std::stringstream relstr;
|
std::stringstream relstr;
|
||||||
clanguml::common::id_t destination{};
|
eid_t destination{};
|
||||||
try {
|
try {
|
||||||
destination = r.destination();
|
destination = r.destination();
|
||||||
|
|
||||||
@@ -584,7 +585,7 @@ void generator::generate_relationships(const enum_ &e, std::ostream &ostr) const
|
|||||||
if (!model().should_include(r.type()))
|
if (!model().should_include(r.type()))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
clanguml::common::id_t destination{};
|
eid_t destination{};
|
||||||
std::stringstream relstr;
|
std::stringstream relstr;
|
||||||
try {
|
try {
|
||||||
destination = r.destination();
|
destination = r.destination();
|
||||||
|
|||||||
@@ -488,7 +488,7 @@ void generator::generate_relationships(
|
|||||||
plantuml_common::to_plantuml(r, config()));
|
plantuml_common::to_plantuml(r, config()));
|
||||||
|
|
||||||
std::stringstream relstr;
|
std::stringstream relstr;
|
||||||
clanguml::common::id_t destination{};
|
eid_t destination{};
|
||||||
try {
|
try {
|
||||||
destination = r.destination();
|
destination = r.destination();
|
||||||
|
|
||||||
@@ -583,7 +583,7 @@ void generator::generate_relationships(
|
|||||||
LOG_DBG("== Processing relationship {}", to_string(r.type()));
|
LOG_DBG("== Processing relationship {}", to_string(r.type()));
|
||||||
|
|
||||||
std::stringstream relstr;
|
std::stringstream relstr;
|
||||||
clanguml::common::id_t destination{};
|
eid_t destination{};
|
||||||
try {
|
try {
|
||||||
destination = r.destination();
|
destination = r.destination();
|
||||||
|
|
||||||
@@ -664,7 +664,7 @@ void generator::generate_relationships(const enum_ &e, std::ostream &ostr) const
|
|||||||
if (!model().should_include(r.type()))
|
if (!model().should_include(r.type()))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
clanguml::common::id_t destination{};
|
eid_t destination{};
|
||||||
std::stringstream relstr;
|
std::stringstream relstr;
|
||||||
try {
|
try {
|
||||||
destination = r.destination();
|
destination = r.destination();
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ using clanguml::class_diagram::model::class_member;
|
|||||||
using clanguml::class_diagram::model::class_method;
|
using clanguml::class_diagram::model::class_method;
|
||||||
using clanguml::class_diagram::model::concept_;
|
using clanguml::class_diagram::model::concept_;
|
||||||
using clanguml::class_diagram::model::enum_;
|
using clanguml::class_diagram::model::enum_;
|
||||||
|
using clanguml::common::eid_t;
|
||||||
using clanguml::common::model::access_t;
|
using clanguml::common::model::access_t;
|
||||||
using clanguml::common::model::package;
|
using clanguml::common::model::package;
|
||||||
using clanguml::common::model::relationship;
|
using clanguml::common::model::relationship;
|
||||||
|
|||||||
@@ -185,8 +185,6 @@ struct hash<std::reference_wrapper<clanguml::class_diagram::model::class_>> {
|
|||||||
const std::reference_wrapper<clanguml::class_diagram::model::class_>
|
const std::reference_wrapper<clanguml::class_diagram::model::class_>
|
||||||
&key) const
|
&key) const
|
||||||
{
|
{
|
||||||
using clanguml::common::id_t;
|
|
||||||
|
|
||||||
return std::hash<uint64_t>{}(key.get().id().value());
|
return std::hash<uint64_t>{}(key.get().id().value());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -24,9 +24,9 @@ void class_parent::set_name(const std::string &name) { name_ = name; }
|
|||||||
|
|
||||||
std::string class_parent::name() const { return name_; }
|
std::string class_parent::name() const { return name_; }
|
||||||
|
|
||||||
void class_parent::set_id(clanguml::common::id_t id) { id_ = id; }
|
void class_parent::set_id(eid_t id) { id_ = id; }
|
||||||
|
|
||||||
clanguml::common::id_t class_parent::id() const noexcept { return id_; }
|
eid_t class_parent::id() const noexcept { return id_; }
|
||||||
|
|
||||||
void class_parent::is_virtual(bool is_virtual) { is_virtual_ = is_virtual; }
|
void class_parent::is_virtual(bool is_virtual) { is_virtual_ = is_virtual; }
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,8 @@
|
|||||||
|
|
||||||
namespace clanguml::class_diagram::model {
|
namespace clanguml::class_diagram::model {
|
||||||
|
|
||||||
|
using clanguml::common::eid_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Class parent relationship model.
|
* @brief Class parent relationship model.
|
||||||
*
|
*
|
||||||
@@ -59,14 +61,14 @@ public:
|
|||||||
*
|
*
|
||||||
* @param id Id of the parent class.
|
* @param id Id of the parent class.
|
||||||
*/
|
*/
|
||||||
void set_id(clanguml::common::id_t id);
|
void set_id(eid_t id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get the id of class parent.
|
* @brief Get the id of class parent.
|
||||||
*
|
*
|
||||||
* @return Id of the parent class.
|
* @return Id of the parent class.
|
||||||
*/
|
*/
|
||||||
clanguml::common::id_t id() const noexcept;
|
eid_t id() const noexcept;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Set whether the parent is virtual.
|
* @brief Set whether the parent is virtual.
|
||||||
@@ -97,7 +99,7 @@ public:
|
|||||||
common::model::access_t access() const;
|
common::model::access_t access() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
clanguml::common::id_t id_{};
|
eid_t id_{};
|
||||||
std::string name_;
|
std::string name_;
|
||||||
bool is_virtual_{false};
|
bool is_virtual_{false};
|
||||||
common::model::access_t access_{common::model::access_t::kPublic};
|
common::model::access_t access_{common::model::access_t::kPublic};
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ common::optional_ref<clanguml::common::model::diagram_element> diagram::get(
|
|||||||
}
|
}
|
||||||
|
|
||||||
common::optional_ref<clanguml::common::model::diagram_element> diagram::get(
|
common::optional_ref<clanguml::common::model::diagram_element> diagram::get(
|
||||||
const clanguml::common::id_t id) const
|
const eid_t id) const
|
||||||
{
|
{
|
||||||
common::optional_ref<clanguml::common::model::diagram_element> res;
|
common::optional_ref<clanguml::common::model::diagram_element> res;
|
||||||
|
|
||||||
@@ -153,7 +153,7 @@ void diagram::get_parents(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool diagram::has_element(clanguml::common::id_t id) const
|
bool diagram::has_element(eid_t id) const
|
||||||
{
|
{
|
||||||
const auto has_class = std::any_of(classes().begin(), classes().end(),
|
const auto has_class = std::any_of(classes().begin(), classes().end(),
|
||||||
[id](const auto &c) { return c.get().id() == id; });
|
[id](const auto &c) { return c.get().id() == id; });
|
||||||
@@ -171,7 +171,7 @@ bool diagram::has_element(clanguml::common::id_t id) const
|
|||||||
[id](const auto &c) { return c.get().id() == id; });
|
[id](const auto &c) { return c.get().id() == id; });
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string diagram::to_alias(clanguml::common::id_t id) const
|
std::string diagram::to_alias(eid_t id) const
|
||||||
{
|
{
|
||||||
LOG_DBG("Looking for alias for {}", id);
|
LOG_DBG("Looking for alias for {}", id);
|
||||||
|
|
||||||
@@ -224,12 +224,12 @@ inja::json diagram::context() const
|
|||||||
|
|
||||||
void diagram::remove_redundant_dependencies()
|
void diagram::remove_redundant_dependencies()
|
||||||
{
|
{
|
||||||
using common::id_t;
|
using common::eid_t;
|
||||||
using common::model::relationship;
|
using common::model::relationship;
|
||||||
using common::model::relationship_t;
|
using common::model::relationship_t;
|
||||||
|
|
||||||
for (auto &c : element_view<class_>::view()) {
|
for (auto &c : element_view<class_>::view()) {
|
||||||
std::set<id_t> dependency_relationships_to_remove;
|
std::set<eid_t> dependency_relationships_to_remove;
|
||||||
|
|
||||||
for (auto &r : c.get().relationships()) {
|
for (auto &r : c.get().relationships()) {
|
||||||
if (r.type() != relationship_t::kDependency)
|
if (r.type() != relationship_t::kDependency)
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ public:
|
|||||||
* @param id Element id.
|
* @param id Element id.
|
||||||
* @return Optional reference to a diagram element.
|
* @return Optional reference to a diagram element.
|
||||||
*/
|
*/
|
||||||
opt_ref<diagram_element> get(common::id_t id) const override;
|
opt_ref<diagram_element> get(eid_t id) const override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get list of references to classes in the diagram model.
|
* @brief Get list of references to classes in the diagram model.
|
||||||
@@ -172,7 +172,7 @@ public:
|
|||||||
* @param id Id of the element
|
* @param id Id of the element
|
||||||
* @return Optional reference to a diagram element
|
* @return Optional reference to a diagram element
|
||||||
*/
|
*/
|
||||||
template <typename ElementT> opt_ref<ElementT> find(common::id_t id) const;
|
template <typename ElementT> opt_ref<ElementT> find(eid_t id) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get reference to vector of elements of specific type
|
* @brief Get reference to vector of elements of specific type
|
||||||
@@ -218,7 +218,7 @@ public:
|
|||||||
* @param id Id of the diagram element.
|
* @param id Id of the diagram element.
|
||||||
* @return PlantUML alias.
|
* @return PlantUML alias.
|
||||||
*/
|
*/
|
||||||
std::string to_alias(common::id_t id) const;
|
std::string to_alias(eid_t id) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Given an initial set of classes, add all their parents to the
|
* @brief Given an initial set of classes, add all their parents to the
|
||||||
@@ -235,7 +235,7 @@ public:
|
|||||||
* @param id Id of the element.
|
* @param id Id of the element.
|
||||||
* @return True, if diagram contains an element with a specific id.
|
* @return True, if diagram contains an element with a specific id.
|
||||||
*/
|
*/
|
||||||
bool has_element(common::id_t id) const override;
|
bool has_element(eid_t id) const override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Remove redundant dependency relationships
|
* @brief Remove redundant dependency relationships
|
||||||
@@ -431,8 +431,7 @@ std::vector<opt_ref<ElementT>> diagram::find(
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename ElementT>
|
template <typename ElementT> opt_ref<ElementT> diagram::find(eid_t id) const
|
||||||
opt_ref<ElementT> diagram::find(common::id_t id) const
|
|
||||||
{
|
{
|
||||||
for (const auto &element : element_view<ElementT>::view()) {
|
for (const auto &element : element_view<ElementT>::view()) {
|
||||||
if (element.get().id() == id) {
|
if (element.get().id() == id) {
|
||||||
|
|||||||
@@ -123,14 +123,14 @@ bool translation_unit_visitor::VisitEnumDecl(clang::EnumDecl *enm)
|
|||||||
const auto *parent = enm->getParent();
|
const auto *parent = enm->getParent();
|
||||||
|
|
||||||
// Id of parent class or struct in which this enum is potentially nested
|
// Id of parent class or struct in which this enum is potentially nested
|
||||||
std::optional<common::id_t> parent_id_opt;
|
std::optional<eid_t> parent_id_opt;
|
||||||
|
|
||||||
if (parent != nullptr) {
|
if (parent != nullptr) {
|
||||||
const auto *parent_record_decl =
|
const auto *parent_record_decl =
|
||||||
clang::dyn_cast<clang::RecordDecl>(parent);
|
clang::dyn_cast<clang::RecordDecl>(parent);
|
||||||
|
|
||||||
if (parent_record_decl != nullptr) {
|
if (parent_record_decl != nullptr) {
|
||||||
common::id_t local_id{parent_record_decl->getID()};
|
eid_t local_id{parent_record_decl->getID()};
|
||||||
|
|
||||||
// First check if the parent has been added to the diagram as
|
// First check if the parent has been added to the diagram as
|
||||||
// regular class
|
// regular class
|
||||||
@@ -222,7 +222,7 @@ bool translation_unit_visitor::VisitClassTemplateSpecializationDecl(
|
|||||||
if (!template_specialization.template_specialization_found()) {
|
if (!template_specialization.template_specialization_found()) {
|
||||||
// Only do this if we haven't found a better specialization during
|
// Only do this if we haven't found a better specialization during
|
||||||
// construction of the template specialization
|
// construction of the template specialization
|
||||||
const common::id_t ast_id{cls->getSpecializedTemplate()->getID()};
|
const eid_t ast_id{cls->getSpecializedTemplate()->getID()};
|
||||||
const auto maybe_id = id_mapper().get_global_id(ast_id);
|
const auto maybe_id = id_mapper().get_global_id(ast_id);
|
||||||
if (maybe_id.has_value())
|
if (maybe_id.has_value())
|
||||||
template_specialization.add_relationship(
|
template_specialization.add_relationship(
|
||||||
@@ -621,7 +621,7 @@ void translation_unit_visitor::process_concept_specialization_relationships(
|
|||||||
should_include(cpt)) {
|
should_include(cpt)) {
|
||||||
|
|
||||||
const auto cpt_name = cpt->getNameAsString();
|
const auto cpt_name = cpt->getNameAsString();
|
||||||
const common::id_t ast_id{cpt->getID()};
|
const eid_t ast_id{cpt->getID()};
|
||||||
const auto maybe_id = id_mapper().get_global_id(ast_id);
|
const auto maybe_id = id_mapper().get_global_id(ast_id);
|
||||||
if (!maybe_id)
|
if (!maybe_id)
|
||||||
return;
|
return;
|
||||||
@@ -707,7 +707,7 @@ bool translation_unit_visitor::VisitCXXRecordDecl(clang::CXXRecordDecl *cls)
|
|||||||
if (cls->isTemplated() && (cls->getDescribedTemplate() != nullptr)) {
|
if (cls->isTemplated() && (cls->getDescribedTemplate() != nullptr)) {
|
||||||
// If the described templated of this class is already in the model
|
// If the described templated of this class is already in the model
|
||||||
// skip it:
|
// skip it:
|
||||||
const common::id_t ast_id{cls->getDescribedTemplate()->getID()};
|
const eid_t ast_id{cls->getDescribedTemplate()->getID()};
|
||||||
if (id_mapper().get_global_id(ast_id))
|
if (id_mapper().get_global_id(ast_id))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -869,7 +869,7 @@ void translation_unit_visitor::process_record_parent(
|
|||||||
{
|
{
|
||||||
const auto *parent = cls->getParent();
|
const auto *parent = cls->getParent();
|
||||||
|
|
||||||
std::optional<common::id_t> id_opt;
|
std::optional<eid_t> id_opt;
|
||||||
|
|
||||||
auto parent_ns = ns;
|
auto parent_ns = ns;
|
||||||
if (parent != nullptr) {
|
if (parent != nullptr) {
|
||||||
@@ -879,7 +879,7 @@ void translation_unit_visitor::process_record_parent(
|
|||||||
if (parent_record_decl != nullptr) {
|
if (parent_record_decl != nullptr) {
|
||||||
parent_ns = common::get_tag_namespace(*parent_record_decl);
|
parent_ns = common::get_tag_namespace(*parent_record_decl);
|
||||||
|
|
||||||
common::id_t ast_id{parent_record_decl->getID()};
|
eid_t ast_id{parent_record_decl->getID()};
|
||||||
|
|
||||||
// First check if the parent has been added to the diagram as
|
// First check if the parent has been added to the diagram as
|
||||||
// regular class
|
// regular class
|
||||||
@@ -2176,7 +2176,7 @@ void translation_unit_visitor::add_concept(std::unique_ptr<concept_> &&c)
|
|||||||
|
|
||||||
void translation_unit_visitor::find_instantiation_relationships(
|
void translation_unit_visitor::find_instantiation_relationships(
|
||||||
common::model::template_element &template_instantiation_base,
|
common::model::template_element &template_instantiation_base,
|
||||||
const std::string &full_name, common::id_t templated_decl_id)
|
const std::string &full_name, eid_t templated_decl_id)
|
||||||
{
|
{
|
||||||
auto &template_instantiation = dynamic_cast<class_diagram::model::class_ &>(
|
auto &template_instantiation = dynamic_cast<class_diagram::model::class_ &>(
|
||||||
template_instantiation_base);
|
template_instantiation_base);
|
||||||
@@ -2187,7 +2187,7 @@ void translation_unit_visitor::find_instantiation_relationships(
|
|||||||
std::string best_match_full_name{};
|
std::string best_match_full_name{};
|
||||||
auto full_template_name = template_instantiation.full_name(false);
|
auto full_template_name = template_instantiation.full_name(false);
|
||||||
int best_match{};
|
int best_match{};
|
||||||
common::id_t best_match_id{};
|
eid_t best_match_id{};
|
||||||
|
|
||||||
for (const auto templ : diagram().classes()) {
|
for (const auto templ : diagram().classes()) {
|
||||||
if (templ.get() == template_instantiation)
|
if (templ.get() == template_instantiation)
|
||||||
@@ -2206,7 +2206,7 @@ void translation_unit_visitor::find_instantiation_relationships(
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto templated_decl_global_id =
|
auto templated_decl_global_id =
|
||||||
id_mapper().get_global_id(templated_decl_id).value_or(common::id_t{});
|
id_mapper().get_global_id(templated_decl_id).value_or(eid_t{});
|
||||||
|
|
||||||
if (best_match_id.value() > 0) {
|
if (best_match_id.value() > 0) {
|
||||||
destination = best_match_full_name;
|
destination = best_match_full_name;
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ using clanguml::class_diagram::model::concept_;
|
|||||||
using clanguml::class_diagram::model::diagram;
|
using clanguml::class_diagram::model::diagram;
|
||||||
using clanguml::class_diagram::model::enum_;
|
using clanguml::class_diagram::model::enum_;
|
||||||
using clanguml::class_diagram::model::method_parameter;
|
using clanguml::class_diagram::model::method_parameter;
|
||||||
|
using clanguml::common::eid_t;
|
||||||
using clanguml::common::model::access_t;
|
using clanguml::common::model::access_t;
|
||||||
using clanguml::common::model::namespace_;
|
using clanguml::common::model::namespace_;
|
||||||
using clanguml::common::model::relationship;
|
using clanguml::common::model::relationship;
|
||||||
@@ -149,7 +150,7 @@ public:
|
|||||||
|
|
||||||
void find_instantiation_relationships(
|
void find_instantiation_relationships(
|
||||||
common::model::template_element &template_instantiation_base,
|
common::model::template_element &template_instantiation_base,
|
||||||
const std::string &full_name, common::id_t templated_decl_id);
|
const std::string &full_name, eid_t templated_decl_id);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
@@ -432,8 +433,7 @@ private:
|
|||||||
|
|
||||||
template_builder_t template_builder_;
|
template_builder_t template_builder_;
|
||||||
|
|
||||||
std::map<common::id_t,
|
std::map<eid_t, std::unique_ptr<clanguml::class_diagram::model::class_>>
|
||||||
std::unique_ptr<clanguml::class_diagram::model::class_>>
|
|
||||||
forward_declarations_;
|
forward_declarations_;
|
||||||
|
|
||||||
std::map<int64_t /* local anonymous struct id */,
|
std::map<int64_t /* local anonymous struct id */,
|
||||||
|
|||||||
@@ -415,52 +415,52 @@ bool is_subexpr_of(const clang::Stmt *parent_stmt, const clang::Stmt *sub_stmt)
|
|||||||
[sub_stmt](const auto *e) { return is_subexpr_of(e, sub_stmt); });
|
[sub_stmt](const auto *e) { return is_subexpr_of(e, sub_stmt); });
|
||||||
}
|
}
|
||||||
|
|
||||||
template <> common::id_t to_id(const std::string &full_name)
|
template <> eid_t to_id(const std::string &full_name)
|
||||||
{
|
{
|
||||||
return static_cast<common::id_t>(std::hash<std::string>{}(full_name));
|
return static_cast<eid_t>(std::hash<std::string>{}(full_name));
|
||||||
}
|
}
|
||||||
|
|
||||||
common::id_t to_id(const clang::QualType &type, const clang::ASTContext &ctx)
|
eid_t to_id(const clang::QualType &type, const clang::ASTContext &ctx)
|
||||||
{
|
{
|
||||||
return to_id(common::to_string(type, ctx));
|
return to_id(common::to_string(type, ctx));
|
||||||
}
|
}
|
||||||
|
|
||||||
template <> common::id_t to_id(const clang::NamespaceDecl &declaration)
|
template <> eid_t to_id(const clang::NamespaceDecl &declaration)
|
||||||
{
|
{
|
||||||
return to_id(get_qualified_name(declaration));
|
return to_id(get_qualified_name(declaration));
|
||||||
}
|
}
|
||||||
|
|
||||||
template <> common::id_t to_id(const clang::RecordDecl &declaration)
|
template <> eid_t to_id(const clang::RecordDecl &declaration)
|
||||||
{
|
{
|
||||||
return to_id(get_qualified_name(declaration));
|
return to_id(get_qualified_name(declaration));
|
||||||
}
|
}
|
||||||
|
|
||||||
template <> common::id_t to_id(const clang::EnumDecl &declaration)
|
template <> eid_t to_id(const clang::EnumDecl &declaration)
|
||||||
{
|
{
|
||||||
return to_id(get_qualified_name(declaration));
|
return to_id(get_qualified_name(declaration));
|
||||||
}
|
}
|
||||||
|
|
||||||
template <> common::id_t to_id(const clang::TagDecl &declaration)
|
template <> eid_t to_id(const clang::TagDecl &declaration)
|
||||||
{
|
{
|
||||||
return to_id(get_qualified_name(declaration));
|
return to_id(get_qualified_name(declaration));
|
||||||
}
|
}
|
||||||
|
|
||||||
template <> common::id_t to_id(const clang::CXXRecordDecl &declaration)
|
template <> eid_t to_id(const clang::CXXRecordDecl &declaration)
|
||||||
{
|
{
|
||||||
return to_id(get_qualified_name(declaration));
|
return to_id(get_qualified_name(declaration));
|
||||||
}
|
}
|
||||||
|
|
||||||
template <> common::id_t to_id(const clang::EnumType &t)
|
template <> eid_t to_id(const clang::EnumType &t)
|
||||||
{
|
{
|
||||||
return to_id(*t.getDecl());
|
return to_id(*t.getDecl());
|
||||||
}
|
}
|
||||||
|
|
||||||
template <> common::id_t to_id(const std::filesystem::path &file)
|
template <> eid_t to_id(const std::filesystem::path &file)
|
||||||
{
|
{
|
||||||
return to_id(file.lexically_normal().string());
|
return to_id(file.lexically_normal().string());
|
||||||
}
|
}
|
||||||
|
|
||||||
template <> common::id_t to_id(const clang::TemplateArgument &template_argument)
|
template <> eid_t to_id(const clang::TemplateArgument &template_argument)
|
||||||
{
|
{
|
||||||
if (template_argument.getKind() == clang::TemplateArgument::Type) {
|
if (template_argument.getKind() == clang::TemplateArgument::Type) {
|
||||||
if (const auto *enum_type =
|
if (const auto *enum_type =
|
||||||
|
|||||||
@@ -178,27 +178,27 @@ bool is_subexpr_of(const clang::Stmt *parent_stmt, const clang::Stmt *sub_stmt);
|
|||||||
*
|
*
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
template <typename T> common::id_t to_id(const T &declaration);
|
template <typename T> eid_t to_id(const T &declaration);
|
||||||
|
|
||||||
template <> common::id_t to_id(const std::string &full_name);
|
template <> eid_t to_id(const std::string &full_name);
|
||||||
|
|
||||||
common::id_t to_id(const clang::QualType &type, const clang::ASTContext &ctx);
|
eid_t to_id(const clang::QualType &type, const clang::ASTContext &ctx);
|
||||||
|
|
||||||
template <> common::id_t to_id(const clang::NamespaceDecl &declaration);
|
template <> eid_t to_id(const clang::NamespaceDecl &declaration);
|
||||||
|
|
||||||
template <> common::id_t to_id(const clang::CXXRecordDecl &declaration);
|
template <> eid_t to_id(const clang::CXXRecordDecl &declaration);
|
||||||
|
|
||||||
template <> common::id_t to_id(const clang::RecordDecl &declaration);
|
template <> eid_t to_id(const clang::RecordDecl &declaration);
|
||||||
|
|
||||||
template <> common::id_t to_id(const clang::EnumDecl &declaration);
|
template <> eid_t to_id(const clang::EnumDecl &declaration);
|
||||||
|
|
||||||
template <> common::id_t to_id(const clang::TagDecl &declaration);
|
template <> eid_t to_id(const clang::TagDecl &declaration);
|
||||||
|
|
||||||
template <> common::id_t to_id(const clang::EnumType &type);
|
template <> eid_t to_id(const clang::EnumType &type);
|
||||||
|
|
||||||
template <> common::id_t to_id(const clang::TemplateSpecializationType &type);
|
template <> eid_t to_id(const clang::TemplateSpecializationType &type);
|
||||||
|
|
||||||
template <> common::id_t to_id(const std::filesystem::path &type);
|
template <> eid_t to_id(const std::filesystem::path &type);
|
||||||
/** @} */ // end of to_id
|
/** @} */ // end of to_id
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ public:
|
|||||||
* @return Optional reference to a diagram element.
|
* @return Optional reference to a diagram element.
|
||||||
*/
|
*/
|
||||||
virtual common::optional_ref<clanguml::common::model::diagram_element> get(
|
virtual common::optional_ref<clanguml::common::model::diagram_element> get(
|
||||||
common::id_t id) const = 0;
|
eid_t id) const = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return optional reference to a diagram_element by name and namespace.
|
* Return optional reference to a diagram_element by name and namespace.
|
||||||
@@ -152,7 +152,7 @@ public:
|
|||||||
// Disallow std::string overload
|
// Disallow std::string overload
|
||||||
bool should_include(const std::string &s) const = delete;
|
bool should_include(const std::string &s) const = delete;
|
||||||
|
|
||||||
virtual bool has_element(const common::id_t /*id*/) const { return false; }
|
virtual bool has_element(const eid_t /*id*/) const { return false; }
|
||||||
|
|
||||||
virtual bool should_include(
|
virtual bool should_include(
|
||||||
const namespace_ &ns, const std::string &name) const;
|
const namespace_ &ns, const std::string &name) const;
|
||||||
|
|||||||
@@ -26,16 +26,16 @@ namespace clanguml::common::model {
|
|||||||
|
|
||||||
diagram_element::diagram_element() = default;
|
diagram_element::diagram_element() = default;
|
||||||
|
|
||||||
const common::id_t &diagram_element::id() const { return id_; }
|
const eid_t &diagram_element::id() const { return id_; }
|
||||||
|
|
||||||
void diagram_element::set_id(common::id_t id) { id_ = id; }
|
void diagram_element::set_id(eid_t id) { id_ = id; }
|
||||||
|
|
||||||
std::optional<id_t> diagram_element::parent_element_id() const
|
std::optional<eid_t> diagram_element::parent_element_id() const
|
||||||
{
|
{
|
||||||
return parent_element_id_;
|
return parent_element_id_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void diagram_element::set_parent_element_id(common::id_t id)
|
void diagram_element::set_parent_element_id(eid_t id)
|
||||||
{
|
{
|
||||||
parent_element_id_ = id;
|
parent_element_id_ = id;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,28 +53,28 @@ public:
|
|||||||
*
|
*
|
||||||
* @return Elements id.
|
* @return Elements id.
|
||||||
*/
|
*/
|
||||||
const common::id_t &id() const;
|
const eid_t &id() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set elements id.
|
* Set elements id.
|
||||||
*
|
*
|
||||||
* @param id Elements id.
|
* @param id Elements id.
|
||||||
*/
|
*/
|
||||||
void set_id(common::id_t id);
|
void set_id(eid_t id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get elements parent package id.
|
* Get elements parent package id.
|
||||||
*
|
*
|
||||||
* @return Parent package id if element is nested.
|
* @return Parent package id if element is nested.
|
||||||
*/
|
*/
|
||||||
std::optional<id_t> parent_element_id() const;
|
std::optional<eid_t> parent_element_id() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set elements parent package id.
|
* Set elements parent package id.
|
||||||
*
|
*
|
||||||
* @param id Id of parent package.
|
* @param id Id of parent package.
|
||||||
*/
|
*/
|
||||||
void set_parent_element_id(id_t id);
|
void set_parent_element_id(eid_t id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Return elements' diagram alias.
|
* @brief Return elements' diagram alias.
|
||||||
@@ -185,8 +185,8 @@ public:
|
|||||||
void complete(bool completed);
|
void complete(bool completed);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
id_t id_{};
|
eid_t id_{};
|
||||||
std::optional<common::id_t> parent_element_id_{};
|
std::optional<eid_t> parent_element_id_{};
|
||||||
std::string name_;
|
std::string name_;
|
||||||
std::vector<relationship> relationships_;
|
std::vector<relationship> relationships_;
|
||||||
bool nested_{false};
|
bool nested_{false};
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ const clanguml::common::optional_ref<common::model::source_file> get(
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
clanguml::common::id_t destination_comparator<common::model::source_file>(
|
eid_t destination_comparator<common::model::source_file>(
|
||||||
const common::model::source_file &f)
|
const common::model::source_file &f)
|
||||||
{
|
{
|
||||||
return f.id();
|
return f.id();
|
||||||
@@ -690,7 +690,7 @@ void context_filter::initialize_effective_context(
|
|||||||
// Now repeat radius times - extend the effective context with elements
|
// Now repeat radius times - extend the effective context with elements
|
||||||
// matching in direct relationship to what is in context
|
// matching in direct relationship to what is in context
|
||||||
auto radius_counter = context.radius;
|
auto radius_counter = context.radius;
|
||||||
std::set<clanguml::common::id_t> current_iteration_context;
|
std::set<eid_t> current_iteration_context;
|
||||||
|
|
||||||
while (radius_counter > 0 && effective_context_extended) {
|
while (radius_counter > 0 && effective_context_extended) {
|
||||||
// If at any iteration the effective context was not extended - we
|
// If at any iteration the effective context was not extended - we
|
||||||
@@ -725,8 +725,8 @@ void context_filter::initialize_effective_context(
|
|||||||
}
|
}
|
||||||
|
|
||||||
void context_filter::find_elements_inheritance_relationship(const diagram &d,
|
void context_filter::find_elements_inheritance_relationship(const diagram &d,
|
||||||
std::set<id_t> &effective_context,
|
std::set<eid_t> &effective_context,
|
||||||
std::set<clanguml::common::id_t> ¤t_iteration_context) const
|
std::set<eid_t> ¤t_iteration_context) const
|
||||||
{
|
{
|
||||||
const auto &cd = dynamic_cast<const class_diagram::model::diagram &>(d);
|
const auto &cd = dynamic_cast<const class_diagram::model::diagram &>(d);
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,8 @@
|
|||||||
|
|
||||||
namespace clanguml::common::model {
|
namespace clanguml::common::model {
|
||||||
|
|
||||||
|
using clanguml::common::eid_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Diagram filters can be add in 2 modes:
|
* Diagram filters can be add in 2 modes:
|
||||||
* - inclusive - the elements that match are included in the diagram
|
* - inclusive - the elements that match are included in the diagram
|
||||||
@@ -55,15 +57,12 @@ template <typename ElementT, typename DiagramT>
|
|||||||
const clanguml::common::optional_ref<ElementT> get(
|
const clanguml::common::optional_ref<ElementT> get(
|
||||||
const DiagramT &d, const std::string &full_name);
|
const DiagramT &d, const std::string &full_name);
|
||||||
|
|
||||||
template <typename ElementT>
|
template <typename ElementT> eid_t destination_comparator(const ElementT &e)
|
||||||
common::id_t destination_comparator(const ElementT &e)
|
|
||||||
{
|
{
|
||||||
return e.id();
|
return e.id();
|
||||||
}
|
}
|
||||||
|
|
||||||
template <>
|
template <> eid_t destination_comparator(const common::model::source_file &f);
|
||||||
clanguml::common::id_t destination_comparator(
|
|
||||||
const common::model::source_file &f);
|
|
||||||
} // namespace detail
|
} // namespace detail
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -493,8 +492,8 @@ private:
|
|||||||
|
|
||||||
template <typename ElementT>
|
template <typename ElementT>
|
||||||
void find_elements_in_direct_relationship(const diagram &d,
|
void find_elements_in_direct_relationship(const diagram &d,
|
||||||
std::set<id_t> &effective_context,
|
std::set<eid_t> &effective_context,
|
||||||
std::set<clanguml::common::id_t> ¤t_iteration_context) const
|
std::set<eid_t> ¤t_iteration_context) const
|
||||||
{
|
{
|
||||||
static_assert(std::is_same_v<ElementT, class_diagram::model::class_> ||
|
static_assert(std::is_same_v<ElementT, class_diagram::model::class_> ||
|
||||||
std::is_same_v<ElementT, class_diagram::model::enum_> ||
|
std::is_same_v<ElementT, class_diagram::model::enum_> ||
|
||||||
@@ -535,8 +534,8 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void find_elements_inheritance_relationship(const diagram &d,
|
void find_elements_inheritance_relationship(const diagram &d,
|
||||||
std::set<id_t> &effective_context,
|
std::set<eid_t> &effective_context,
|
||||||
std::set<clanguml::common::id_t> ¤t_iteration_context) const;
|
std::set<eid_t> ¤t_iteration_context) const;
|
||||||
|
|
||||||
std::vector<config::context_config> context_;
|
std::vector<config::context_config> context_;
|
||||||
|
|
||||||
@@ -544,7 +543,7 @@ private:
|
|||||||
* Represents all elements which should belong to the diagram based
|
* Represents all elements which should belong to the diagram based
|
||||||
* on this filter. It is populated by the initialize() method.
|
* on this filter. It is populated by the initialize() method.
|
||||||
*/
|
*/
|
||||||
mutable std::vector<std::set<clanguml::common::id_t>> effective_contexts_;
|
mutable std::vector<std::set<eid_t>> effective_contexts_;
|
||||||
|
|
||||||
/*! Flag to mark whether the filter context has been computed */
|
/*! Flag to mark whether the filter context has been computed */
|
||||||
mutable bool initialized_{false};
|
mutable bool initialized_{false};
|
||||||
|
|||||||
@@ -21,6 +21,8 @@
|
|||||||
|
|
||||||
namespace clanguml::common::model {
|
namespace clanguml::common::model {
|
||||||
|
|
||||||
|
using clanguml::common::eid_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides type based views over elements in a diagram.
|
* Provides type based views over elements in a diagram.
|
||||||
*
|
*
|
||||||
@@ -58,7 +60,7 @@ public:
|
|||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
common::optional_ref<T> get(clanguml::common::id_t id) const
|
common::optional_ref<T> get(eid_t id) const
|
||||||
{
|
{
|
||||||
for (const auto &e : elements_) {
|
for (const auto &e : elements_) {
|
||||||
if (e.get().id() == id) {
|
if (e.get().id() == id) {
|
||||||
|
|||||||
@@ -89,9 +89,9 @@ struct hash<std::reference_wrapper<clanguml::common::model::package>> {
|
|||||||
const std::reference_wrapper<clanguml::common::model::package> &key)
|
const std::reference_wrapper<clanguml::common::model::package> &key)
|
||||||
const
|
const
|
||||||
{
|
{
|
||||||
using clanguml::common::id_t;
|
using clanguml::common::eid_t;
|
||||||
|
|
||||||
return std::hash<id_t::type>{}(key.get().id().value());
|
return key.get().id().value();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
} // namespace std
|
} // namespace std
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
namespace clanguml::common::model {
|
namespace clanguml::common::model {
|
||||||
|
|
||||||
relationship::relationship(relationship_t type, common::id_t destination,
|
relationship::relationship(relationship_t type, eid_t destination,
|
||||||
access_t access, std::string label, std::string multiplicity_source,
|
access_t access, std::string label, std::string multiplicity_source,
|
||||||
std::string multiplicity_destination)
|
std::string multiplicity_destination)
|
||||||
: type_{type}
|
: type_{type}
|
||||||
@@ -38,15 +38,12 @@ void relationship::set_type(relationship_t type) noexcept { type_ = type; }
|
|||||||
|
|
||||||
relationship_t relationship::type() const noexcept { return type_; }
|
relationship_t relationship::type() const noexcept { return type_; }
|
||||||
|
|
||||||
void relationship::set_destination(common::id_t destination)
|
void relationship::set_destination(eid_t destination)
|
||||||
{
|
{
|
||||||
destination_ = destination;
|
destination_ = destination;
|
||||||
}
|
}
|
||||||
|
|
||||||
clanguml::common::id_t relationship::destination() const
|
eid_t relationship::destination() const { return destination_; }
|
||||||
{
|
|
||||||
return destination_;
|
|
||||||
}
|
|
||||||
|
|
||||||
void relationship::set_multiplicity_source(
|
void relationship::set_multiplicity_source(
|
||||||
const std::string &multiplicity_source)
|
const std::string &multiplicity_source)
|
||||||
|
|||||||
@@ -25,6 +25,8 @@
|
|||||||
|
|
||||||
namespace clanguml::common::model {
|
namespace clanguml::common::model {
|
||||||
|
|
||||||
|
using clanguml::common::eid_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Class representing any relationship other than inheritance
|
* @brief Class representing any relationship other than inheritance
|
||||||
*
|
*
|
||||||
@@ -47,7 +49,7 @@ public:
|
|||||||
* @param multiplicity_source Multiplicity at the source
|
* @param multiplicity_source Multiplicity at the source
|
||||||
* @param multiplicity_destination Multiplicity at the destination
|
* @param multiplicity_destination Multiplicity at the destination
|
||||||
*/
|
*/
|
||||||
relationship(relationship_t type, clanguml::common::id_t destination,
|
relationship(relationship_t type, eid_t destination,
|
||||||
access_t access = access_t::kPublic, std::string label = "",
|
access_t access = access_t::kPublic, std::string label = "",
|
||||||
std::string multiplicity_source = "",
|
std::string multiplicity_source = "",
|
||||||
std::string multiplicity_destination = "");
|
std::string multiplicity_destination = "");
|
||||||
@@ -74,14 +76,14 @@ public:
|
|||||||
*
|
*
|
||||||
* @param destination Target element id.
|
* @param destination Target element id.
|
||||||
*/
|
*/
|
||||||
void set_destination(common::id_t destination);
|
void set_destination(eid_t destination);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the id of the target element of this relationship.
|
* Get the id of the target element of this relationship.
|
||||||
*
|
*
|
||||||
* @return Target element id.
|
* @return Target element id.
|
||||||
*/
|
*/
|
||||||
common::id_t destination() const;
|
eid_t destination() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the relationship multiplicity at the source.
|
* Set the relationship multiplicity at the source.
|
||||||
@@ -144,7 +146,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
relationship_t type_;
|
relationship_t type_;
|
||||||
clanguml::common::id_t destination_;
|
eid_t destination_;
|
||||||
std::string multiplicity_source_;
|
std::string multiplicity_source_;
|
||||||
std::string multiplicity_destination_;
|
std::string multiplicity_destination_;
|
||||||
std::string label_;
|
std::string label_;
|
||||||
|
|||||||
@@ -210,9 +210,7 @@ struct hash<std::reference_wrapper<clanguml::common::model::source_file>> {
|
|||||||
const std::reference_wrapper<clanguml::common::model::source_file> &key)
|
const std::reference_wrapper<clanguml::common::model::source_file> &key)
|
||||||
const
|
const
|
||||||
{
|
{
|
||||||
using clanguml::common::id_t;
|
return key.get().id().value();
|
||||||
|
|
||||||
return std::hash<id_t::type>{}(key.get().id().value());
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
} // namespace std
|
} // namespace std
|
||||||
@@ -505,7 +505,7 @@ std::string template_parameter::to_string(
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool template_parameter::find_nested_relationships(
|
bool template_parameter::find_nested_relationships(
|
||||||
std::vector<std::pair<common::id_t, common::model::relationship_t>>
|
std::vector<std::pair<eid_t, common::model::relationship_t>>
|
||||||
&nested_relationships,
|
&nested_relationships,
|
||||||
common::model::relationship_t hint,
|
common::model::relationship_t hint,
|
||||||
const std::function<bool(const std::string &full_name)> &should_include)
|
const std::function<bool(const std::string &full_name)> &should_include)
|
||||||
|
|||||||
@@ -29,6 +29,8 @@
|
|||||||
|
|
||||||
namespace clanguml::common::model {
|
namespace clanguml::common::model {
|
||||||
|
|
||||||
|
using clanguml::common::eid_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Type of template parameter or argument.
|
* Type of template parameter or argument.
|
||||||
*/
|
*/
|
||||||
@@ -166,14 +168,14 @@ public:
|
|||||||
*
|
*
|
||||||
* @param id Id of parameter
|
* @param id Id of parameter
|
||||||
*/
|
*/
|
||||||
void set_id(const common::id_t &id) { id_ = id; }
|
void set_id(const eid_t &id) { id_ = id; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get id of the template parameter
|
* Get id of the template parameter
|
||||||
*
|
*
|
||||||
* @return Id of the template parameter
|
* @return Id of the template parameter
|
||||||
*/
|
*/
|
||||||
const std::optional<common::id_t> &id() const { return id_; }
|
const std::optional<eid_t> &id() const { return id_; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the name of the template parameter
|
* Set the name of the template parameter
|
||||||
@@ -389,7 +391,7 @@ public:
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
bool find_nested_relationships(
|
bool find_nested_relationships(
|
||||||
std::vector<std::pair<common::id_t, common::model::relationship_t>>
|
std::vector<std::pair<eid_t, common::model::relationship_t>>
|
||||||
&nested_relationships,
|
&nested_relationships,
|
||||||
common::model::relationship_t hint,
|
common::model::relationship_t hint,
|
||||||
const std::function<bool(const std::string &full_name)> &should_include)
|
const std::function<bool(const std::string &full_name)> &should_include)
|
||||||
@@ -533,7 +535,7 @@ private:
|
|||||||
*/
|
*/
|
||||||
std::vector<template_parameter> template_params_;
|
std::vector<template_parameter> template_params_;
|
||||||
|
|
||||||
std::optional<common::id_t> id_;
|
std::optional<eid_t> id_;
|
||||||
|
|
||||||
bool is_unexposed_{false};
|
bool is_unexposed_{false};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -20,25 +20,25 @@
|
|||||||
|
|
||||||
namespace clanguml::common {
|
namespace clanguml::common {
|
||||||
|
|
||||||
id_t::id_t()
|
eid_t::eid_t()
|
||||||
: value_{0ULL}
|
: value_{0ULL}
|
||||||
, is_global_{true}
|
, is_global_{true}
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
id_t::id_t(int64_t id)
|
eid_t::eid_t(int64_t id)
|
||||||
: value_{static_cast<type>(id)}
|
: value_{static_cast<type>(id)}
|
||||||
, is_global_{false}
|
, is_global_{false}
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
id_t::id_t(type id)
|
eid_t::eid_t(type id)
|
||||||
: value_{id}
|
: value_{id}
|
||||||
, is_global_{true}
|
, is_global_{true}
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
id_t &id_t::operator=(int64_t ast_id)
|
eid_t &eid_t::operator=(int64_t ast_id)
|
||||||
{
|
{
|
||||||
// Can't assign ast_id if the id is already a global one
|
// Can't assign ast_id if the id is already a global one
|
||||||
assert(!is_global_);
|
assert(!is_global_);
|
||||||
@@ -47,16 +47,16 @@ id_t &id_t::operator=(int64_t ast_id)
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool id_t::is_global() const { return is_global_; }
|
bool eid_t::is_global() const { return is_global_; }
|
||||||
|
|
||||||
bool operator==(const id_t &lhs, const id_t &rhs)
|
bool operator==(const eid_t &lhs, const eid_t &rhs)
|
||||||
{
|
{
|
||||||
return (lhs.is_global_ == rhs.is_global_) && (lhs.value_ == rhs.value_);
|
return (lhs.is_global_ == rhs.is_global_) && (lhs.value_ == rhs.value_);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator==(const id_t &lhs, const uint64_t &v) { return lhs.value_ == v; }
|
bool operator==(const eid_t &lhs, const uint64_t &v) { return lhs.value_ == v; }
|
||||||
|
|
||||||
bool operator!=(const id_t &lhs, const uint64_t &v)
|
bool operator!=(const eid_t &lhs, const uint64_t &v)
|
||||||
{
|
{
|
||||||
// This is sadly necessary to catch accidental comparisons to empty
|
// This is sadly necessary to catch accidental comparisons to empty
|
||||||
// std::optional<id_t>:
|
// std::optional<id_t>:
|
||||||
@@ -69,9 +69,9 @@ bool operator!=(const id_t &lhs, const uint64_t &v)
|
|||||||
return lhs.value_ != v;
|
return lhs.value_ != v;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator!=(const id_t &lhs, const id_t &rhs) { return !(lhs == rhs); }
|
bool operator!=(const eid_t &lhs, const eid_t &rhs) { return !(lhs == rhs); }
|
||||||
|
|
||||||
bool operator<(const id_t &lhs, const id_t &rhs)
|
bool operator<(const eid_t &lhs, const eid_t &rhs)
|
||||||
{
|
{
|
||||||
if (lhs.is_global_ != rhs.is_global_) {
|
if (lhs.is_global_ != rhs.is_global_) {
|
||||||
return lhs.value_ < rhs.value_ + 1;
|
return lhs.value_ < rhs.value_ + 1;
|
||||||
@@ -80,9 +80,9 @@ bool operator<(const id_t &lhs, const id_t &rhs)
|
|||||||
return lhs.value_ < rhs.value_; // Compare values if is_global_ are the same
|
return lhs.value_ < rhs.value_; // Compare values if is_global_ are the same
|
||||||
}
|
}
|
||||||
|
|
||||||
id_t::type id_t::value() const { return value_; }
|
eid_t::type eid_t::value() const { return value_; }
|
||||||
|
|
||||||
int64_t id_t::ast_local_value() const
|
int64_t eid_t::ast_local_value() const
|
||||||
{
|
{
|
||||||
assert(!is_global_);
|
assert(!is_global_);
|
||||||
|
|
||||||
|
|||||||
@@ -29,32 +29,47 @@
|
|||||||
|
|
||||||
namespace clanguml::common {
|
namespace clanguml::common {
|
||||||
|
|
||||||
class id_t {
|
/**
|
||||||
|
* @brief Universal class for representing all kinds of Id's in the diagram
|
||||||
|
* model.
|
||||||
|
*
|
||||||
|
* This class provides a convenient way of representing id's in the diagram
|
||||||
|
* model. The main problem it solves is that it allows to store both
|
||||||
|
* Clang AST ID's (obtained using getID() method), which are local to a single
|
||||||
|
* translation unit and have a type int64_t as well as global (across
|
||||||
|
* multiple translation units) id's used by clang-uml in the intermediate
|
||||||
|
* model (which are uint64_t).
|
||||||
|
*
|
||||||
|
* The class is aware which kind of value it holds and tries to ensure that
|
||||||
|
* mistakes such as using AST local ID in place where global id is needed
|
||||||
|
* do not happen.
|
||||||
|
*/
|
||||||
|
class eid_t {
|
||||||
public:
|
public:
|
||||||
using type = uint64_t;
|
using type = uint64_t;
|
||||||
|
|
||||||
id_t();
|
eid_t();
|
||||||
|
|
||||||
explicit id_t(int64_t id);
|
explicit eid_t(int64_t id);
|
||||||
|
|
||||||
explicit id_t(type id);
|
explicit eid_t(type id);
|
||||||
|
|
||||||
id_t(const id_t &) = default;
|
eid_t(const eid_t &) = default;
|
||||||
id_t(id_t &&) noexcept = default;
|
eid_t(eid_t &&) noexcept = default;
|
||||||
id_t &operator=(const id_t &) = default;
|
eid_t &operator=(const eid_t &) = default;
|
||||||
id_t &operator=(id_t &&) noexcept = default;
|
eid_t &operator=(eid_t &&) noexcept = default;
|
||||||
|
|
||||||
id_t &operator=(int64_t ast_id);
|
eid_t &operator=(int64_t ast_id);
|
||||||
|
|
||||||
~id_t() = default;
|
~eid_t() = default;
|
||||||
|
|
||||||
bool is_global() const;
|
bool is_global() const;
|
||||||
|
|
||||||
friend bool operator==(const id_t &lhs, const id_t &rhs);
|
friend bool operator==(const eid_t &lhs, const eid_t &rhs);
|
||||||
friend bool operator==(const id_t &lhs, const uint64_t &v);
|
friend bool operator==(const eid_t &lhs, const uint64_t &v);
|
||||||
friend bool operator!=(const id_t &lhs, const uint64_t &v);
|
friend bool operator!=(const eid_t &lhs, const uint64_t &v);
|
||||||
friend bool operator!=(const id_t &lhs, const id_t &rhs);
|
friend bool operator!=(const eid_t &lhs, const eid_t &rhs);
|
||||||
friend bool operator<(const id_t &lhs, const id_t &rhs);
|
friend bool operator<(const eid_t &lhs, const eid_t &rhs);
|
||||||
|
|
||||||
type value() const;
|
type value() const;
|
||||||
|
|
||||||
@@ -328,11 +343,11 @@ struct path_or_regex : public or_regex<std::filesystem::path> { };
|
|||||||
|
|
||||||
} // namespace clanguml::common
|
} // namespace clanguml::common
|
||||||
|
|
||||||
template <> class fmt::formatter<clanguml::common::id_t> {
|
template <> class fmt::formatter<clanguml::common::eid_t> {
|
||||||
public:
|
public:
|
||||||
constexpr auto parse(format_parse_context &ctx) { return ctx.begin(); }
|
constexpr auto parse(format_parse_context &ctx) { return ctx.begin(); }
|
||||||
template <typename Context>
|
template <typename Context>
|
||||||
constexpr auto format(clanguml::common::id_t const &id, Context &ctx) const
|
constexpr auto format(clanguml::common::eid_t const &id, Context &ctx) const
|
||||||
{
|
{
|
||||||
return format_to(ctx.out(), "{}", id.value());
|
return format_to(ctx.out(), "{}", id.value());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,12 +20,12 @@
|
|||||||
|
|
||||||
namespace clanguml::common::visitor {
|
namespace clanguml::common::visitor {
|
||||||
|
|
||||||
void ast_id_mapper::add(int64_t ast_id, id_t global_id)
|
void ast_id_mapper::add(int64_t ast_id, eid_t global_id)
|
||||||
{
|
{
|
||||||
id_map_.emplace(ast_id, global_id);
|
id_map_.emplace(ast_id, global_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<id_t> ast_id_mapper::get_global_id(common::id_t ast_id)
|
std::optional<eid_t> ast_id_mapper::get_global_id(eid_t ast_id)
|
||||||
{
|
{
|
||||||
assert(!ast_id.is_global());
|
assert(!ast_id.is_global());
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,8 @@
|
|||||||
|
|
||||||
namespace clanguml::common::visitor {
|
namespace clanguml::common::visitor {
|
||||||
|
|
||||||
|
using clanguml::common::eid_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Mapping between Clang AST identifier and `clang-uml` unique ids
|
* @brief Mapping between Clang AST identifier and `clang-uml` unique ids
|
||||||
*
|
*
|
||||||
@@ -40,8 +42,6 @@ namespace clanguml::common::visitor {
|
|||||||
*/
|
*/
|
||||||
class ast_id_mapper {
|
class ast_id_mapper {
|
||||||
public:
|
public:
|
||||||
using id_t = common::id_t;
|
|
||||||
|
|
||||||
ast_id_mapper() = default;
|
ast_id_mapper() = default;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -50,7 +50,7 @@ public:
|
|||||||
* @param ast_id Clang's local AST id.
|
* @param ast_id Clang's local AST id.
|
||||||
* @param global_id Global element id.
|
* @param global_id Global element id.
|
||||||
*/
|
*/
|
||||||
void add(int64_t ast_id, id_t global_id);
|
void add(int64_t ast_id, eid_t global_id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get global element id based on it's local Clang AST id, if exists.
|
* Get global element id based on it's local Clang AST id, if exists.
|
||||||
@@ -58,11 +58,11 @@ public:
|
|||||||
* @param ast_id Clang's local AST id.
|
* @param ast_id Clang's local AST id.
|
||||||
* @return Global id, if exists.
|
* @return Global id, if exists.
|
||||||
*/
|
*/
|
||||||
std::optional<id_t> get_global_id(common::id_t ast_id);
|
std::optional<eid_t> get_global_id(eid_t ast_id);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::map</* Clang AST translation unit local id */ int64_t,
|
std::map</* Clang AST translation unit local id */ int64_t,
|
||||||
/* clang-uml global id */ id_t>
|
/* clang-uml global id */ eid_t>
|
||||||
id_map_;
|
id_map_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -30,8 +30,8 @@ using common::model::namespace_;
|
|||||||
using common::model::relationship_t;
|
using common::model::relationship_t;
|
||||||
using common::model::template_parameter;
|
using common::model::template_parameter;
|
||||||
|
|
||||||
using found_relationships_t = std::vector<
|
using found_relationships_t =
|
||||||
std::pair<clanguml::common::id_t, common::model::relationship_t>>;
|
std::vector<std::pair<eid_t, common::model::relationship_t>>;
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
|
|
||||||
@@ -524,8 +524,8 @@ public:
|
|||||||
const template_parameter &ct, found_relationships_t &relationships);
|
const template_parameter &ct, found_relationships_t &relationships);
|
||||||
|
|
||||||
void find_instantiation_relationships(
|
void find_instantiation_relationships(
|
||||||
common::model::template_element &template_instantiation,
|
common::model::template_element &template_instantiation, eid_t id,
|
||||||
common::id_t id, const std::string &qualified_name) const;
|
const std::string &qualified_name) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get reference to Clang AST to clang-uml id mapper
|
* @brief Get reference to Clang AST to clang-uml id mapper
|
||||||
@@ -661,8 +661,8 @@ void template_builder<VisitorT>::build_from_template_declaration(
|
|||||||
templated_element.value().add_relationship(
|
templated_element.value().add_relationship(
|
||||||
{relationship_t::kConstraint,
|
{relationship_t::kConstraint,
|
||||||
id_mapper()
|
id_mapper()
|
||||||
.get_global_id(common::id_t{
|
.get_global_id(
|
||||||
named_concept->getID()})
|
eid_t{named_concept->getID()})
|
||||||
.value(),
|
.value(),
|
||||||
model::access_t::kNone,
|
model::access_t::kNone,
|
||||||
ct.name().value()});
|
ct.name().value()});
|
||||||
@@ -865,8 +865,7 @@ void template_builder<VisitorT>::build(
|
|||||||
if constexpr (std::is_same_v<typename VisitorT::diagram_t,
|
if constexpr (std::is_same_v<typename VisitorT::diagram_t,
|
||||||
class_diagram::model::diagram>) {
|
class_diagram::model::diagram>) {
|
||||||
find_instantiation_relationships(template_instantiation,
|
find_instantiation_relationships(template_instantiation,
|
||||||
common::id_t{template_decl->getID()},
|
eid_t{template_decl->getID()}, full_template_specialization_name);
|
||||||
full_template_specialization_name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template_instantiation.set_id(
|
template_instantiation.set_id(
|
||||||
@@ -911,7 +910,7 @@ void template_builder<VisitorT>::build_from_class_template_specialization(
|
|||||||
if constexpr (std::is_same_v<typename VisitorT::diagram_t,
|
if constexpr (std::is_same_v<typename VisitorT::diagram_t,
|
||||||
class_diagram::model::diagram>) {
|
class_diagram::model::diagram>) {
|
||||||
find_instantiation_relationships(template_instantiation,
|
find_instantiation_relationships(template_instantiation,
|
||||||
common::id_t{template_specialization.getID()}, qualified_name);
|
eid_t{template_specialization.getID()}, qualified_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
visitor_.set_source_location(*template_decl, template_instantiation);
|
visitor_.set_source_location(*template_decl, template_instantiation);
|
||||||
@@ -919,7 +918,7 @@ void template_builder<VisitorT>::build_from_class_template_specialization(
|
|||||||
|
|
||||||
template <typename VisitorT>
|
template <typename VisitorT>
|
||||||
void template_builder<VisitorT>::find_instantiation_relationships(
|
void template_builder<VisitorT>::find_instantiation_relationships(
|
||||||
common::model::template_element &template_instantiation, common::id_t id,
|
common::model::template_element &template_instantiation, eid_t id,
|
||||||
const std::string &qualified_name) const
|
const std::string &qualified_name) const
|
||||||
{
|
{
|
||||||
visitor_.find_instantiation_relationships(
|
visitor_.find_instantiation_relationships(
|
||||||
|
|||||||
@@ -42,8 +42,8 @@
|
|||||||
|
|
||||||
namespace clanguml::common::visitor {
|
namespace clanguml::common::visitor {
|
||||||
|
|
||||||
using found_relationships_t = std::vector<
|
using found_relationships_t =
|
||||||
std::pair<clanguml::common::id_t, common::model::relationship_t>>;
|
std::vector<std::pair<eid_t, common::model::relationship_t>>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Diagram translation unit visitor base class
|
* @brief Diagram translation unit visitor base class
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ common::optional_ref<common::model::diagram_element> diagram::get(
|
|||||||
}
|
}
|
||||||
|
|
||||||
common::optional_ref<common::model::diagram_element> diagram::get(
|
common::optional_ref<common::model::diagram_element> diagram::get(
|
||||||
const common::id_t id) const
|
const eid_t id) const
|
||||||
{
|
{
|
||||||
return find<source_file>(id);
|
return find<source_file>(id);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,6 +28,7 @@
|
|||||||
|
|
||||||
namespace clanguml::include_diagram::model {
|
namespace clanguml::include_diagram::model {
|
||||||
|
|
||||||
|
using clanguml::common::eid_t;
|
||||||
using clanguml::common::opt_ref;
|
using clanguml::common::opt_ref;
|
||||||
using clanguml::common::model::diagram_element;
|
using clanguml::common::model::diagram_element;
|
||||||
using clanguml::common::model::source_file;
|
using clanguml::common::model::source_file;
|
||||||
@@ -68,7 +69,7 @@ public:
|
|||||||
* @param id Element id.
|
* @param id Element id.
|
||||||
* @return Optional reference to a diagram element.
|
* @return Optional reference to a diagram element.
|
||||||
*/
|
*/
|
||||||
opt_ref<diagram_element> get(common::id_t id) const override;
|
opt_ref<diagram_element> get(eid_t id) const override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Add include diagram element, an include file.
|
* @brief Add include diagram element, an include file.
|
||||||
@@ -100,7 +101,7 @@ public:
|
|||||||
* @param id Id of the element
|
* @param id Id of the element
|
||||||
* @return Optional reference to a diagram element
|
* @return Optional reference to a diagram element
|
||||||
*/
|
*/
|
||||||
template <typename ElementT> opt_ref<ElementT> find(common::id_t id) const;
|
template <typename ElementT> opt_ref<ElementT> find(eid_t id) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Convert element id to PlantUML alias.
|
* @brief Convert element id to PlantUML alias.
|
||||||
@@ -158,8 +159,7 @@ opt_ref<ElementT> diagram::find(const std::string &name) const
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename ElementT>
|
template <typename ElementT> opt_ref<ElementT> diagram::find(eid_t id) const
|
||||||
opt_ref<ElementT> diagram::find(common::id_t id) const
|
|
||||||
{
|
{
|
||||||
for (const auto &element : element_view<ElementT>::view()) {
|
for (const auto &element : element_view<ElementT>::view()) {
|
||||||
if (element.get().id() == id) {
|
if (element.get().id() == id) {
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ void translation_unit_visitor::include_visitor::InclusionDirective(
|
|||||||
|
|
||||||
void translation_unit_visitor::include_visitor::process_internal_header(
|
void translation_unit_visitor::include_visitor::process_internal_header(
|
||||||
const std::filesystem::path &include_path, bool is_system,
|
const std::filesystem::path &include_path, bool is_system,
|
||||||
const common::id_t current_file_id)
|
const eid_t current_file_id)
|
||||||
{
|
{
|
||||||
// Make the path relative with respect to relative_to config option
|
// Make the path relative with respect to relative_to config option
|
||||||
auto relative_include_path =
|
auto relative_include_path =
|
||||||
@@ -151,8 +151,7 @@ void translation_unit_visitor::include_visitor::process_internal_header(
|
|||||||
}
|
}
|
||||||
|
|
||||||
void translation_unit_visitor::include_visitor::process_external_system_header(
|
void translation_unit_visitor::include_visitor::process_external_system_header(
|
||||||
const std::filesystem::path &include_path,
|
const std::filesystem::path &include_path, const eid_t current_file_id)
|
||||||
const common::id_t current_file_id)
|
|
||||||
{
|
{
|
||||||
const auto file_name = include_path.filename();
|
const auto file_name = include_path.filename();
|
||||||
const auto file_name_str = file_name.string();
|
const auto file_name_str = file_name.string();
|
||||||
@@ -177,7 +176,7 @@ void translation_unit_visitor::include_visitor::process_external_system_header(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<common::id_t>
|
std::optional<eid_t>
|
||||||
translation_unit_visitor::include_visitor::process_source_file(
|
translation_unit_visitor::include_visitor::process_source_file(
|
||||||
const std::filesystem::path &file)
|
const std::filesystem::path &file)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -35,6 +35,8 @@
|
|||||||
|
|
||||||
namespace clanguml::include_diagram::visitor {
|
namespace clanguml::include_diagram::visitor {
|
||||||
|
|
||||||
|
using clanguml::common::eid_t;
|
||||||
|
|
||||||
using visitor_specialization_t =
|
using visitor_specialization_t =
|
||||||
common::visitor::translation_unit_visitor<clanguml::config::include_diagram,
|
common::visitor::translation_unit_visitor<clanguml::config::include_diagram,
|
||||||
clanguml::include_diagram::model::diagram>;
|
clanguml::include_diagram::model::diagram>;
|
||||||
@@ -104,7 +106,7 @@ public:
|
|||||||
* @param current_file_id File id
|
* @param current_file_id File id
|
||||||
*/
|
*/
|
||||||
void process_internal_header(const std::filesystem::path &include_path,
|
void process_internal_header(const std::filesystem::path &include_path,
|
||||||
bool is_system, common::id_t current_file_id);
|
bool is_system, eid_t current_file_id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Handle system header include directive
|
* @brief Handle system header include directive
|
||||||
@@ -113,8 +115,7 @@ public:
|
|||||||
* @param current_file_id File id
|
* @param current_file_id File id
|
||||||
*/
|
*/
|
||||||
void process_external_system_header(
|
void process_external_system_header(
|
||||||
const std::filesystem::path &include_path,
|
const std::filesystem::path &include_path, eid_t current_file_id);
|
||||||
common::id_t current_file_id);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Handle a source file
|
* @brief Handle a source file
|
||||||
@@ -125,7 +126,7 @@ public:
|
|||||||
* @param file Absolute path to a source file
|
* @param file Absolute path to a source file
|
||||||
* @return Diagram element id, in case the file was added to the diagram
|
* @return Diagram element id, in case the file was added to the diagram
|
||||||
*/
|
*/
|
||||||
std::optional<common::id_t> process_source_file(
|
std::optional<eid_t> process_source_file(
|
||||||
const std::filesystem::path &file);
|
const std::filesystem::path &file);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -41,12 +41,12 @@ common::optional_ref<clanguml::common::model::diagram_element> diagram::get(
|
|||||||
}
|
}
|
||||||
|
|
||||||
common::optional_ref<clanguml::common::model::diagram_element> diagram::get(
|
common::optional_ref<clanguml::common::model::diagram_element> diagram::get(
|
||||||
const clanguml::common::id_t id) const
|
const eid_t id) const
|
||||||
{
|
{
|
||||||
return find<package>(id);
|
return find<package>(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string diagram::to_alias(const clanguml::common::id_t id) const
|
std::string diagram::to_alias(const eid_t id) const
|
||||||
{
|
{
|
||||||
LOG_DBG("Looking for alias for {}", id);
|
LOG_DBG("Looking for alias for {}", id);
|
||||||
|
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
|
|
||||||
namespace clanguml::package_diagram::model {
|
namespace clanguml::package_diagram::model {
|
||||||
|
|
||||||
|
using clanguml::common::eid_t;
|
||||||
using clanguml::common::opt_ref;
|
using clanguml::common::opt_ref;
|
||||||
using clanguml::common::model::diagram_element;
|
using clanguml::common::model::diagram_element;
|
||||||
using clanguml::common::model::package;
|
using clanguml::common::model::package;
|
||||||
@@ -75,7 +76,7 @@ public:
|
|||||||
* @param id Element id.
|
* @param id Element id.
|
||||||
* @return Optional reference to a diagram element.
|
* @return Optional reference to a diagram element.
|
||||||
*/
|
*/
|
||||||
opt_ref<diagram_element> get(common::id_t id) const override;
|
opt_ref<diagram_element> get(eid_t id) const override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Find an element in the diagram by name.
|
* @brief Find an element in the diagram by name.
|
||||||
@@ -100,7 +101,7 @@ public:
|
|||||||
* @param id Id of the element
|
* @param id Id of the element
|
||||||
* @return Optional reference to a diagram element
|
* @return Optional reference to a diagram element
|
||||||
*/
|
*/
|
||||||
template <typename ElementT> opt_ref<ElementT> find(common::id_t id) const;
|
template <typename ElementT> opt_ref<ElementT> find(eid_t id) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Find elements in the diagram by regex pattern.
|
* @brief Find elements in the diagram by regex pattern.
|
||||||
@@ -148,7 +149,7 @@ public:
|
|||||||
* @param id Id of a package in the diagram
|
* @param id Id of a package in the diagram
|
||||||
* @return PlantUML alias of the element
|
* @return PlantUML alias of the element
|
||||||
*/
|
*/
|
||||||
std::string to_alias(common::id_t id) const;
|
std::string to_alias(eid_t id) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Return the elements JSON context for inja templates.
|
* @brief Return the elements JSON context for inja templates.
|
||||||
@@ -213,8 +214,7 @@ opt_ref<ElementT> diagram::find(const std::string &name) const
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename ElementT>
|
template <typename ElementT> opt_ref<ElementT> diagram::find(eid_t id) const
|
||||||
opt_ref<ElementT> diagram::find(common::id_t id) const
|
|
||||||
{
|
{
|
||||||
for (const auto &element : element_view<ElementT>::view()) {
|
for (const auto &element : element_view<ElementT>::view()) {
|
||||||
if (element.get().id() == id) {
|
if (element.get().id() == id) {
|
||||||
|
|||||||
@@ -290,7 +290,7 @@ void translation_unit_visitor::add_relationships(
|
|||||||
auto current_package = diagram().get(current_package_id);
|
auto current_package = diagram().get(current_package_id);
|
||||||
|
|
||||||
if (current_package) {
|
if (current_package) {
|
||||||
std::vector<common::id_t> parent_ids =
|
std::vector<eid_t> parent_ids =
|
||||||
get_parent_package_ids(current_package_id);
|
get_parent_package_ids(current_package_id);
|
||||||
|
|
||||||
for (const auto &dependency : relationships) {
|
for (const auto &dependency : relationships) {
|
||||||
@@ -313,7 +313,7 @@ void translation_unit_visitor::add_relationships(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
common::id_t translation_unit_visitor::get_package_id(const clang::Decl *cls)
|
eid_t translation_unit_visitor::get_package_id(const clang::Decl *cls)
|
||||||
{
|
{
|
||||||
if (config().package_type() == config::package_type_t::kNamespace) {
|
if (config().package_type() == config::package_type_t::kNamespace) {
|
||||||
const auto *namespace_context =
|
const auto *namespace_context =
|
||||||
@@ -677,11 +677,10 @@ bool translation_unit_visitor::find_relationships(const clang::QualType &type,
|
|||||||
|
|
||||||
void translation_unit_visitor::finalize() { }
|
void translation_unit_visitor::finalize() { }
|
||||||
|
|
||||||
std::vector<common::id_t> translation_unit_visitor::get_parent_package_ids(
|
std::vector<eid_t> translation_unit_visitor::get_parent_package_ids(eid_t id)
|
||||||
common::id_t id)
|
|
||||||
{
|
{
|
||||||
std::vector<common::id_t> parent_ids;
|
std::vector<eid_t> parent_ids;
|
||||||
std::optional<common::id_t> parent_id = id;
|
std::optional<eid_t> parent_id = id;
|
||||||
|
|
||||||
while (parent_id.has_value()) {
|
while (parent_id.has_value()) {
|
||||||
const auto pid = parent_id.value(); // NOLINT
|
const auto pid = parent_id.value(); // NOLINT
|
||||||
|
|||||||
@@ -33,8 +33,10 @@
|
|||||||
|
|
||||||
namespace clanguml::package_diagram::visitor {
|
namespace clanguml::package_diagram::visitor {
|
||||||
|
|
||||||
using found_relationships_t = std::vector<
|
using clanguml::common::eid_t;
|
||||||
std::pair<clanguml::common::id_t, common::model::relationship_t>>;
|
|
||||||
|
using found_relationships_t =
|
||||||
|
std::vector<std::pair<eid_t, common::model::relationship_t>>;
|
||||||
|
|
||||||
using visitor_specialization_t =
|
using visitor_specialization_t =
|
||||||
common::visitor::translation_unit_visitor<clanguml::config::package_diagram,
|
common::visitor::translation_unit_visitor<clanguml::config::package_diagram,
|
||||||
@@ -98,7 +100,7 @@ private:
|
|||||||
* @param cls C++ entity declaration
|
* @param cls C++ entity declaration
|
||||||
* @return Id of the package containing that declaration
|
* @return Id of the package containing that declaration
|
||||||
*/
|
*/
|
||||||
common::id_t get_package_id(const clang::Decl *cls);
|
eid_t get_package_id(const clang::Decl *cls);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Process class declaration
|
* @brief Process class declaration
|
||||||
@@ -203,6 +205,6 @@ private:
|
|||||||
void add_relationships(
|
void add_relationships(
|
||||||
clang::Decl *cls, found_relationships_t &relationships);
|
clang::Decl *cls, found_relationships_t &relationships);
|
||||||
|
|
||||||
std::vector<common::id_t> get_parent_package_ids(common::id_t id);
|
std::vector<eid_t> get_parent_package_ids(eid_t id);
|
||||||
};
|
};
|
||||||
} // namespace clanguml::package_diagram::visitor
|
} // namespace clanguml::package_diagram::visitor
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ void generator::generate_call(const message &m, nlohmann::json &parent) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
void generator::generate_activity(
|
void generator::generate_activity(
|
||||||
const activity &a, std::vector<common::id_t> &visited) const
|
const activity &a, std::vector<eid_t> &visited) const
|
||||||
{
|
{
|
||||||
// Generate calls from this activity to other activities
|
// Generate calls from this activity to other activities
|
||||||
for (const auto &m : a.messages()) {
|
for (const auto &m : a.messages()) {
|
||||||
@@ -263,7 +263,7 @@ nlohmann::json &generator::current_block_statement() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
void generator::process_call_message(
|
void generator::process_call_message(
|
||||||
const model::message &m, std::vector<common::id_t> &visited) const
|
const model::message &m, std::vector<eid_t> &visited) const
|
||||||
{
|
{
|
||||||
visited.push_back(m.from());
|
visited.push_back(m.from());
|
||||||
|
|
||||||
@@ -541,10 +541,10 @@ void generator::generate_participant(
|
|||||||
generate_participant(parent, p.value().id(), true);
|
generate_participant(parent, p.value().id(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<common::id_t> generator::generate_participant(
|
std::optional<eid_t> generator::generate_participant(
|
||||||
nlohmann::json & /*parent*/, common::id_t id, bool force) const
|
nlohmann::json & /*parent*/, eid_t id, bool force) const
|
||||||
{
|
{
|
||||||
std::optional<common::id_t> participant_id{};
|
std::optional<eid_t> participant_id{};
|
||||||
|
|
||||||
if (!force) {
|
if (!force) {
|
||||||
for (const auto pid : model().active_participants()) {
|
for (const auto pid : model().active_participants()) {
|
||||||
@@ -672,7 +672,7 @@ std::optional<common::id_t> generator::generate_participant(
|
|||||||
return participant_id;
|
return participant_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool generator::is_participant_generated(common::id_t id) const
|
bool generator::is_participant_generated(eid_t id) const
|
||||||
{
|
{
|
||||||
return std::find(generated_participants_.begin(),
|
return std::find(generated_participants_.begin(),
|
||||||
generated_participants_.end(),
|
generated_participants_.end(),
|
||||||
@@ -748,7 +748,7 @@ void generator::generate_diagram(nlohmann::json &parent) const
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
auto message_chains_unique = model().get_all_from_to_message_chains(
|
auto message_chains_unique = model().get_all_from_to_message_chains(
|
||||||
common::id_t{}, to_activity_id.value());
|
eid_t{}, to_activity_id.value());
|
||||||
|
|
||||||
nlohmann::json sequence;
|
nlohmann::json sequence;
|
||||||
sequence["to"]["location"] = to_location.location;
|
sequence["to"]["location"] = to_location.location;
|
||||||
@@ -779,7 +779,7 @@ void generator::generate_diagram(nlohmann::json &parent) const
|
|||||||
|
|
||||||
for (const auto &sf : config().from()) {
|
for (const auto &sf : config().from()) {
|
||||||
if (sf.location_type == location_t::function) {
|
if (sf.location_type == location_t::function) {
|
||||||
common::id_t start_from{};
|
eid_t start_from{};
|
||||||
std::string start_from_str;
|
std::string start_from_str;
|
||||||
for (const auto &[k, v] : model().sequences()) {
|
for (const auto &[k, v] : model().sequences()) {
|
||||||
const auto &caller = *model().participants().at(v.from());
|
const auto &caller = *model().participants().at(v.from());
|
||||||
@@ -799,7 +799,7 @@ void generator::generate_diagram(nlohmann::json &parent) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Use this to break out of recurrent loops
|
// Use this to break out of recurrent loops
|
||||||
std::vector<common::id_t> visited_participants;
|
std::vector<eid_t> visited_participants;
|
||||||
|
|
||||||
const auto &from =
|
const auto &from =
|
||||||
model().get_participant<model::function>(start_from);
|
model().get_participant<model::function>(start_from);
|
||||||
|
|||||||
@@ -32,6 +32,8 @@
|
|||||||
|
|
||||||
namespace clanguml::sequence_diagram::generators::json {
|
namespace clanguml::sequence_diagram::generators::json {
|
||||||
|
|
||||||
|
using clanguml::common::eid_t;
|
||||||
|
|
||||||
std::string render_name(std::string name);
|
std::string render_name(std::string name);
|
||||||
|
|
||||||
using diagram_config = clanguml::config::sequence_diagram;
|
using diagram_config = clanguml::config::sequence_diagram;
|
||||||
@@ -77,8 +79,8 @@ public:
|
|||||||
* the set of active participants
|
* the set of active participants
|
||||||
* @return Id of the generated participant
|
* @return Id of the generated participant
|
||||||
*/
|
*/
|
||||||
std::optional<common::id_t> generate_participant(
|
std::optional<eid_t> generate_participant(
|
||||||
nlohmann::json &parent, common::id_t id, bool force = false) const;
|
nlohmann::json &parent, eid_t id, bool force = false) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Generate sequence diagram participant by name
|
* @brief Generate sequence diagram participant by name
|
||||||
@@ -99,7 +101,7 @@ public:
|
|||||||
* for breaking infinite recursion on recursive calls
|
* for breaking infinite recursion on recursive calls
|
||||||
*/
|
*/
|
||||||
void generate_activity(const sequence_diagram::model::activity &a,
|
void generate_activity(const sequence_diagram::model::activity &a,
|
||||||
std::vector<common::id_t> &visited) const;
|
std::vector<eid_t> &visited) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get reference to the current block statement.
|
* @brief Get reference to the current block statement.
|
||||||
@@ -120,7 +122,7 @@ private:
|
|||||||
* @param id Participant id.
|
* @param id Participant id.
|
||||||
* @return True, if participant has already been generated.
|
* @return True, if participant has already been generated.
|
||||||
*/
|
*/
|
||||||
bool is_participant_generated(common::id_t id) const;
|
bool is_participant_generated(eid_t id) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Process call message
|
* @brief Process call message
|
||||||
@@ -129,7 +131,7 @@ private:
|
|||||||
* @param visited List of already visited participants
|
* @param visited List of already visited participants
|
||||||
*/
|
*/
|
||||||
void process_call_message(
|
void process_call_message(
|
||||||
const model::message &m, std::vector<common::id_t> &visited) const;
|
const model::message &m, std::vector<eid_t> &visited) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Process `if` statement message
|
* @brief Process `if` statement message
|
||||||
@@ -239,7 +241,7 @@ private:
|
|||||||
*/
|
*/
|
||||||
void process_end_while_message() const;
|
void process_end_while_message() const;
|
||||||
|
|
||||||
mutable std::set<common::id_t> generated_participants_;
|
mutable std::set<eid_t> generated_participants_;
|
||||||
|
|
||||||
// Needed to add "participants" array in a temporary object accessible from
|
// Needed to add "participants" array in a temporary object accessible from
|
||||||
// all methods of the generator
|
// all methods of the generator
|
||||||
|
|||||||
@@ -192,8 +192,8 @@ void generator::generate_return(const message &m, std::ostream &ostr) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void generator::generate_activity(const activity &a, std::ostream &ostr,
|
void generator::generate_activity(
|
||||||
std::vector<common::id_t> &visited) const
|
const activity &a, std::ostream &ostr, std::vector<eid_t> &visited) const
|
||||||
{
|
{
|
||||||
for (const auto &m : a.messages()) {
|
for (const auto &m : a.messages()) {
|
||||||
if (m.in_static_declaration_context()) {
|
if (m.in_static_declaration_context()) {
|
||||||
@@ -352,9 +352,9 @@ void generator::generate_participant(
|
|||||||
}
|
}
|
||||||
|
|
||||||
void generator::generate_participant(
|
void generator::generate_participant(
|
||||||
std::ostream &ostr, common::id_t id, bool force) const
|
std::ostream &ostr, eid_t id, bool force) const
|
||||||
{
|
{
|
||||||
common::id_t participant_id{};
|
eid_t participant_id{};
|
||||||
|
|
||||||
if (!force) {
|
if (!force) {
|
||||||
for (const auto pid : model().active_participants()) {
|
for (const auto pid : model().active_participants()) {
|
||||||
@@ -460,7 +460,7 @@ void generator::generate_participant(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool generator::is_participant_generated(common::id_t id) const
|
bool generator::is_participant_generated(eid_t id) const
|
||||||
{
|
{
|
||||||
return std::find(generated_participants_.begin(),
|
return std::find(generated_participants_.begin(),
|
||||||
generated_participants_.end(),
|
generated_participants_.end(),
|
||||||
@@ -549,8 +549,8 @@ void generator::generate_diagram(std::ostream &ostr) const
|
|||||||
if (!to_activity_id)
|
if (!to_activity_id)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
auto message_chains_unique = model().get_all_from_to_message_chains(
|
auto message_chains_unique =
|
||||||
common::id_t{}, *to_activity_id);
|
model().get_all_from_to_message_chains(eid_t{}, *to_activity_id);
|
||||||
|
|
||||||
for (const auto &mc : message_chains_unique) {
|
for (const auto &mc : message_chains_unique) {
|
||||||
const auto from_activity_id = mc.front().from();
|
const auto from_activity_id = mc.front().from();
|
||||||
@@ -581,7 +581,7 @@ void generator::generate_diagram(std::ostream &ostr) const
|
|||||||
|
|
||||||
for (const auto &sf : config().from()) {
|
for (const auto &sf : config().from()) {
|
||||||
if (sf.location_type == location_t::function) {
|
if (sf.location_type == location_t::function) {
|
||||||
common::id_t start_from{};
|
eid_t start_from{};
|
||||||
for (const auto &[k, v] : model().sequences()) {
|
for (const auto &[k, v] : model().sequences()) {
|
||||||
if (model().participants().count(v.from()) == 0)
|
if (model().participants().count(v.from()) == 0)
|
||||||
continue;
|
continue;
|
||||||
@@ -603,7 +603,7 @@ void generator::generate_diagram(std::ostream &ostr) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Use this to break out of recurrent loops
|
// Use this to break out of recurrent loops
|
||||||
std::vector<common::id_t> visited_participants;
|
std::vector<eid_t> visited_participants;
|
||||||
|
|
||||||
if (model().participants().count(start_from) == 0)
|
if (model().participants().count(start_from) == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -35,6 +35,8 @@ namespace sequence_diagram {
|
|||||||
namespace generators {
|
namespace generators {
|
||||||
namespace mermaid {
|
namespace mermaid {
|
||||||
|
|
||||||
|
using clanguml::common::eid_t;
|
||||||
|
|
||||||
using diagram_config = clanguml::config::sequence_diagram;
|
using diagram_config = clanguml::config::sequence_diagram;
|
||||||
using diagram_model = clanguml::sequence_diagram::model::diagram;
|
using diagram_model = clanguml::sequence_diagram::model::diagram;
|
||||||
|
|
||||||
@@ -95,7 +97,7 @@ public:
|
|||||||
* @return Id of the generated participant
|
* @return Id of the generated participant
|
||||||
*/
|
*/
|
||||||
void generate_participant(
|
void generate_participant(
|
||||||
std::ostream &ostr, common::id_t id, bool force = false) const;
|
std::ostream &ostr, eid_t id, bool force = false) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Generate sequence diagram participant by name
|
* @brief Generate sequence diagram participant by name
|
||||||
@@ -117,7 +119,7 @@ public:
|
|||||||
* for breaking infinite recursion on recursive calls
|
* for breaking infinite recursion on recursive calls
|
||||||
*/
|
*/
|
||||||
void generate_activity(const clanguml::sequence_diagram::model::activity &a,
|
void generate_activity(const clanguml::sequence_diagram::model::activity &a,
|
||||||
std::ostream &ostr, std::vector<common::id_t> &visited) const;
|
std::ostream &ostr, std::vector<eid_t> &visited) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
@@ -126,7 +128,7 @@ private:
|
|||||||
* @param id Participant id.
|
* @param id Participant id.
|
||||||
* @return True, if participant has already been generated.
|
* @return True, if participant has already been generated.
|
||||||
*/
|
*/
|
||||||
bool is_participant_generated(common::id_t id) const;
|
bool is_participant_generated(eid_t id) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Generate MermaidJS alias for participant
|
* @brief Generate MermaidJS alias for participant
|
||||||
@@ -153,7 +155,7 @@ private:
|
|||||||
model::function::message_render_mode
|
model::function::message_render_mode
|
||||||
select_method_arguments_render_mode() const;
|
select_method_arguments_render_mode() const;
|
||||||
|
|
||||||
mutable std::set<common::id_t> generated_participants_;
|
mutable std::set<eid_t> generated_participants_;
|
||||||
mutable std::vector<model::message> already_generated_in_static_context_;
|
mutable std::vector<model::message> already_generated_in_static_context_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
namespace clanguml::sequence_diagram::generators::plantuml {
|
namespace clanguml::sequence_diagram::generators::plantuml {
|
||||||
|
|
||||||
|
using clanguml::common::eid_t;
|
||||||
using clanguml::common::model::message_t;
|
using clanguml::common::model::message_t;
|
||||||
using clanguml::config::location_t;
|
using clanguml::config::location_t;
|
||||||
using clanguml::sequence_diagram::model::activity;
|
using clanguml::sequence_diagram::model::activity;
|
||||||
@@ -149,8 +150,8 @@ void generator::generate_return(const message &m, std::ostream &ostr) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void generator::generate_activity(const activity &a, std::ostream &ostr,
|
void generator::generate_activity(
|
||||||
std::vector<common::id_t> &visited) const
|
const activity &a, std::ostream &ostr, std::vector<eid_t> &visited) const
|
||||||
{
|
{
|
||||||
for (const auto &m : a.messages()) {
|
for (const auto &m : a.messages()) {
|
||||||
if (m.in_static_declaration_context()) {
|
if (m.in_static_declaration_context()) {
|
||||||
@@ -348,9 +349,9 @@ void generator::generate_participant(
|
|||||||
}
|
}
|
||||||
|
|
||||||
void generator::generate_participant(
|
void generator::generate_participant(
|
||||||
std::ostream &ostr, common::id_t id, bool force) const
|
std::ostream &ostr, eid_t id, bool force) const
|
||||||
{
|
{
|
||||||
common::id_t participant_id{};
|
eid_t participant_id{};
|
||||||
|
|
||||||
if (!force) {
|
if (!force) {
|
||||||
for (const auto pid : model().active_participants()) {
|
for (const auto pid : model().active_participants()) {
|
||||||
@@ -465,7 +466,7 @@ void generator::generate_participant(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool generator::is_participant_generated(common::id_t id) const
|
bool generator::is_participant_generated(eid_t id) const
|
||||||
{
|
{
|
||||||
return std::find(generated_participants_.begin(),
|
return std::find(generated_participants_.begin(),
|
||||||
generated_participants_.end(),
|
generated_participants_.end(),
|
||||||
@@ -552,8 +553,8 @@ void generator::generate_diagram(std::ostream &ostr) const
|
|||||||
if (!to_activity_id)
|
if (!to_activity_id)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
auto message_chains_unique = model().get_all_from_to_message_chains(
|
auto message_chains_unique =
|
||||||
common::id_t{}, *to_activity_id);
|
model().get_all_from_to_message_chains(eid_t{}, *to_activity_id);
|
||||||
|
|
||||||
bool first_separator_skipped{false};
|
bool first_separator_skipped{false};
|
||||||
for (const auto &mc : message_chains_unique) {
|
for (const auto &mc : message_chains_unique) {
|
||||||
@@ -588,7 +589,7 @@ void generator::generate_diagram(std::ostream &ostr) const
|
|||||||
|
|
||||||
for (const auto &sf : config().from()) {
|
for (const auto &sf : config().from()) {
|
||||||
if (sf.location_type == location_t::function) {
|
if (sf.location_type == location_t::function) {
|
||||||
common::id_t start_from{};
|
eid_t start_from{};
|
||||||
for (const auto &[k, v] : model().sequences()) {
|
for (const auto &[k, v] : model().sequences()) {
|
||||||
if (model().participants().count(v.from()) == 0)
|
if (model().participants().count(v.from()) == 0)
|
||||||
continue;
|
continue;
|
||||||
@@ -613,7 +614,7 @@ void generator::generate_diagram(std::ostream &ostr) const
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Use this to break out of recurrent loops
|
// Use this to break out of recurrent loops
|
||||||
std::vector<common::id_t> visited_participants;
|
std::vector<eid_t> visited_participants;
|
||||||
|
|
||||||
const auto &from =
|
const auto &from =
|
||||||
model().get_participant<model::function>(start_from);
|
model().get_participant<model::function>(start_from);
|
||||||
|
|||||||
@@ -35,6 +35,8 @@ namespace sequence_diagram {
|
|||||||
namespace generators {
|
namespace generators {
|
||||||
namespace plantuml {
|
namespace plantuml {
|
||||||
|
|
||||||
|
using clanguml::common::eid_t;
|
||||||
|
|
||||||
using diagram_config = clanguml::config::sequence_diagram;
|
using diagram_config = clanguml::config::sequence_diagram;
|
||||||
using diagram_model = clanguml::sequence_diagram::model::diagram;
|
using diagram_model = clanguml::sequence_diagram::model::diagram;
|
||||||
|
|
||||||
@@ -89,7 +91,7 @@ public:
|
|||||||
* @return Id of the generated participant
|
* @return Id of the generated participant
|
||||||
*/
|
*/
|
||||||
void generate_participant(
|
void generate_participant(
|
||||||
std::ostream &ostr, common::id_t id, bool force = false) const;
|
std::ostream &ostr, eid_t id, bool force = false) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Generate sequence diagram participant by name
|
* @brief Generate sequence diagram participant by name
|
||||||
@@ -111,7 +113,7 @@ public:
|
|||||||
* for breaking infinite recursion on recursive calls
|
* for breaking infinite recursion on recursive calls
|
||||||
*/
|
*/
|
||||||
void generate_activity(const clanguml::sequence_diagram::model::activity &a,
|
void generate_activity(const clanguml::sequence_diagram::model::activity &a,
|
||||||
std::ostream &ostr, std::vector<common::id_t> &visited) const;
|
std::ostream &ostr, std::vector<eid_t> &visited) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
@@ -120,7 +122,7 @@ private:
|
|||||||
* @param id Participant id.
|
* @param id Participant id.
|
||||||
* @return True, if participant has already been generated.
|
* @return True, if participant has already been generated.
|
||||||
*/
|
*/
|
||||||
bool is_participant_generated(common::id_t id) const;
|
bool is_participant_generated(eid_t id) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Generate PlantUML alias for participant
|
* @brief Generate PlantUML alias for participant
|
||||||
@@ -155,7 +157,7 @@ private:
|
|||||||
model::function::message_render_mode
|
model::function::message_render_mode
|
||||||
select_method_arguments_render_mode() const;
|
select_method_arguments_render_mode() const;
|
||||||
|
|
||||||
mutable std::set<common::id_t> generated_participants_;
|
mutable std::set<eid_t> generated_participants_;
|
||||||
mutable std::vector<model::message> already_generated_in_static_context_;
|
mutable std::vector<model::message> already_generated_in_static_context_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
namespace clanguml::sequence_diagram::model {
|
namespace clanguml::sequence_diagram::model {
|
||||||
|
|
||||||
activity::activity(common::id_t id)
|
activity::activity(eid_t id)
|
||||||
: from_{id}
|
: from_{id}
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -31,6 +31,6 @@ std::vector<message> &activity::messages() { return messages_; }
|
|||||||
|
|
||||||
const std::vector<message> &activity::messages() const { return messages_; }
|
const std::vector<message> &activity::messages() const { return messages_; }
|
||||||
|
|
||||||
common::id_t activity::from() const { return from_; }
|
eid_t activity::from() const { return from_; }
|
||||||
|
|
||||||
} // namespace clanguml::sequence_diagram::model
|
} // namespace clanguml::sequence_diagram::model
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ public:
|
|||||||
*
|
*
|
||||||
* @param id Id of the participant parent for the activity
|
* @param id Id of the participant parent for the activity
|
||||||
*/
|
*/
|
||||||
activity(common::id_t id);
|
activity(eid_t id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Add a message call to the activity
|
* @brief Add a message call to the activity
|
||||||
@@ -63,10 +63,10 @@ public:
|
|||||||
*
|
*
|
||||||
* @return Id of activity participant
|
* @return Id of activity participant
|
||||||
*/
|
*/
|
||||||
common::id_t from() const;
|
eid_t from() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
common::id_t from_;
|
eid_t from_;
|
||||||
std::vector<message> messages_;
|
std::vector<message> messages_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ common::optional_ref<common::model::diagram_element> diagram::get(
|
|||||||
}
|
}
|
||||||
|
|
||||||
common::optional_ref<common::model::diagram_element> diagram::get(
|
common::optional_ref<common::model::diagram_element> diagram::get(
|
||||||
const common::id_t id) const
|
const eid_t id) const
|
||||||
{
|
{
|
||||||
if (participants_.find(id) != participants_.end())
|
if (participants_.find(id) != participants_.end())
|
||||||
return {*participants_.at(id)};
|
return {*participants_.at(id)};
|
||||||
@@ -90,22 +90,19 @@ void diagram::add_participant(std::unique_ptr<participant> p)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void diagram::add_active_participant(common::id_t id)
|
void diagram::add_active_participant(eid_t id)
|
||||||
{
|
{
|
||||||
active_participants_.emplace(id);
|
active_participants_.emplace(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
const activity &diagram::get_activity(common::id_t id) const
|
const activity &diagram::get_activity(eid_t id) const
|
||||||
{
|
{
|
||||||
return activities_.at(id);
|
return activities_.at(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool diagram::has_activity(common::id_t id) const
|
bool diagram::has_activity(eid_t id) const { return activities_.count(id) > 0; }
|
||||||
{
|
|
||||||
return activities_.count(id) > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
activity &diagram::get_activity(common::id_t id) { return activities_.at(id); }
|
activity &diagram::get_activity(eid_t id) { return activities_.at(id); }
|
||||||
|
|
||||||
void diagram::add_message(model::message &&message)
|
void diagram::add_message(model::message &&message)
|
||||||
{
|
{
|
||||||
@@ -153,30 +150,27 @@ void diagram::add_case_stmt_message(model::message &&m)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::map<common::id_t, activity> &diagram::sequences() { return activities_; }
|
std::map<eid_t, activity> &diagram::sequences() { return activities_; }
|
||||||
|
|
||||||
const std::map<common::id_t, activity> &diagram::sequences() const
|
const std::map<eid_t, activity> &diagram::sequences() const
|
||||||
{
|
{
|
||||||
return activities_;
|
return activities_;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::map<common::id_t, std::unique_ptr<participant>> &diagram::participants()
|
std::map<eid_t, std::unique_ptr<participant>> &diagram::participants()
|
||||||
{
|
{
|
||||||
return participants_;
|
return participants_;
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::map<common::id_t, std::unique_ptr<participant>> &
|
const std::map<eid_t, std::unique_ptr<participant>> &
|
||||||
diagram::participants() const
|
diagram::participants() const
|
||||||
{
|
{
|
||||||
return participants_;
|
return participants_;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::set<common::id_t> &diagram::active_participants()
|
std::set<eid_t> &diagram::active_participants() { return active_participants_; }
|
||||||
{
|
|
||||||
return active_participants_;
|
|
||||||
}
|
|
||||||
|
|
||||||
const std::set<common::id_t> &diagram::active_participants() const
|
const std::set<eid_t> &diagram::active_participants() const
|
||||||
{
|
{
|
||||||
return active_participants_;
|
return active_participants_;
|
||||||
}
|
}
|
||||||
@@ -228,10 +222,10 @@ std::vector<std::string> diagram::list_to_values() const
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<common::id_t> diagram::get_to_activity_id(
|
std::optional<eid_t> diagram::get_to_activity_id(
|
||||||
const config::source_location &to_location) const
|
const config::source_location &to_location) const
|
||||||
{
|
{
|
||||||
std::optional<common::id_t> to_activity{};
|
std::optional<eid_t> to_activity{};
|
||||||
|
|
||||||
for (const auto &[k, v] : sequences()) {
|
for (const auto &[k, v] : sequences()) {
|
||||||
for (const auto &m : v.messages()) {
|
for (const auto &m : v.messages()) {
|
||||||
@@ -257,10 +251,10 @@ std::optional<common::id_t> diagram::get_to_activity_id(
|
|||||||
return to_activity;
|
return to_activity;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<common::id_t> diagram::get_from_activity_id(
|
std::optional<eid_t> diagram::get_from_activity_id(
|
||||||
const config::source_location &from_location) const
|
const config::source_location &from_location) const
|
||||||
{
|
{
|
||||||
std::optional<common::id_t> from_activity{};
|
std::optional<eid_t> from_activity{};
|
||||||
|
|
||||||
for (const auto &[k, v] : sequences()) {
|
for (const auto &[k, v] : sequences()) {
|
||||||
const auto &caller = *participants().at(v.from());
|
const auto &caller = *participants().at(v.from());
|
||||||
@@ -282,7 +276,7 @@ std::optional<common::id_t> diagram::get_from_activity_id(
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::vector<message_chain_t> diagram::get_all_from_to_message_chains(
|
std::vector<message_chain_t> diagram::get_all_from_to_message_chains(
|
||||||
const common::id_t from_activity, const common::id_t to_activity) const
|
const eid_t from_activity, const eid_t to_activity) const
|
||||||
{
|
{
|
||||||
std::vector<message_chain_t> message_chains_unique{};
|
std::vector<message_chain_t> message_chains_unique{};
|
||||||
|
|
||||||
@@ -414,9 +408,9 @@ bool diagram::is_empty() const
|
|||||||
|
|
||||||
void diagram::inline_lambda_operator_calls()
|
void diagram::inline_lambda_operator_calls()
|
||||||
{
|
{
|
||||||
std::map<common::id_t, activity> activities;
|
std::map<eid_t, activity> activities;
|
||||||
std::map<common::id_t, std::unique_ptr<participant>> participants;
|
std::map<eid_t, std::unique_ptr<participant>> participants;
|
||||||
std::set<common::id_t> active_participants;
|
std::set<eid_t> active_participants;
|
||||||
|
|
||||||
for (auto &[id, act] : sequences()) {
|
for (auto &[id, act] : sequences()) {
|
||||||
model::activity new_activity{id};
|
model::activity new_activity{id};
|
||||||
@@ -488,8 +482,8 @@ void diagram::inline_lambda_operator_calls()
|
|||||||
active_participants_ = std::move(active_participants);
|
active_participants_ = std::move(active_participants);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool diagram::inline_lambda_operator_call(const common::id_t id,
|
bool diagram::inline_lambda_operator_call(
|
||||||
model::activity &new_activity, const model::message &m)
|
const eid_t id, model::activity &new_activity, const model::message &m)
|
||||||
{
|
{
|
||||||
bool message_call_to_lambda{false};
|
bool message_call_to_lambda{false};
|
||||||
auto maybe_lambda_operator = get_participant<model::method>(m.to());
|
auto maybe_lambda_operator = get_participant<model::method>(m.to());
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ public:
|
|||||||
* @return Optional reference to a diagram element.
|
* @return Optional reference to a diagram element.
|
||||||
*/
|
*/
|
||||||
common::optional_ref<common::model::diagram_element> get(
|
common::optional_ref<common::model::diagram_element> get(
|
||||||
common::id_t id) const override;
|
eid_t id) const override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get participant by id
|
* @brief Get participant by id
|
||||||
@@ -76,7 +76,7 @@ public:
|
|||||||
* @return Optional reference to a diagram element.
|
* @return Optional reference to a diagram element.
|
||||||
*/
|
*/
|
||||||
template <typename T>
|
template <typename T>
|
||||||
common::optional_ref<T> get_participant(common::id_t id) const
|
common::optional_ref<T> get_participant(eid_t id) const
|
||||||
{
|
{
|
||||||
if (participants_.find(id) == participants_.end()) {
|
if (participants_.find(id) == participants_.end()) {
|
||||||
return {};
|
return {};
|
||||||
@@ -98,7 +98,7 @@ public:
|
|||||||
*
|
*
|
||||||
* @param id Id of participant to activate
|
* @param id Id of participant to activate
|
||||||
*/
|
*/
|
||||||
void add_active_participant(common::id_t id);
|
void add_active_participant(eid_t id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Check if diagram has activity identified by caller id
|
* @brief Check if diagram has activity identified by caller id
|
||||||
@@ -106,7 +106,7 @@ public:
|
|||||||
* @param id Caller id representing the activity
|
* @param id Caller id representing the activity
|
||||||
* @return True, if an activity already exists
|
* @return True, if an activity already exists
|
||||||
*/
|
*/
|
||||||
bool has_activity(common::id_t id) const;
|
bool has_activity(eid_t id) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get reference to current activity of a participant
|
* @brief Get reference to current activity of a participant
|
||||||
@@ -114,7 +114,7 @@ public:
|
|||||||
* @param id Participant id
|
* @param id Participant id
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
const activity &get_activity(common::id_t id) const;
|
const activity &get_activity(eid_t id) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get reference to current activity of a participant
|
* @brief Get reference to current activity of a participant
|
||||||
@@ -122,7 +122,7 @@ public:
|
|||||||
* @param id Participant id
|
* @param id Participant id
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
activity &get_activity(common::id_t id);
|
activity &get_activity(eid_t id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Add message to current activity
|
* @brief Add message to current activity
|
||||||
@@ -163,43 +163,42 @@ public:
|
|||||||
*
|
*
|
||||||
* @return Map of sequences in the diagram
|
* @return Map of sequences in the diagram
|
||||||
*/
|
*/
|
||||||
std::map<common::id_t, activity> &sequences();
|
std::map<eid_t, activity> &sequences();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get all sequences in the diagram
|
* @brief Get all sequences in the diagram
|
||||||
*
|
*
|
||||||
* @return Map of sequences in the diagram
|
* @return Map of sequences in the diagram
|
||||||
*/
|
*/
|
||||||
const std::map<common::id_t, activity> &sequences() const;
|
const std::map<eid_t, activity> &sequences() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get map of all participants in the diagram
|
* @brief Get map of all participants in the diagram
|
||||||
*
|
*
|
||||||
* @return Map of participants in the diagram
|
* @return Map of participants in the diagram
|
||||||
*/
|
*/
|
||||||
std::map<common::id_t, std::unique_ptr<participant>> &participants();
|
std::map<eid_t, std::unique_ptr<participant>> &participants();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get map of all participants in the diagram
|
* @brief Get map of all participants in the diagram
|
||||||
*
|
*
|
||||||
* @return Map of participants in the diagram
|
* @return Map of participants in the diagram
|
||||||
*/
|
*/
|
||||||
const std::map<common::id_t, std::unique_ptr<participant>> &
|
const std::map<eid_t, std::unique_ptr<participant>> &participants() const;
|
||||||
participants() const;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get all active participants in the diagram
|
* @brief Get all active participants in the diagram
|
||||||
*
|
*
|
||||||
* @return Set of all active participant ids
|
* @return Set of all active participant ids
|
||||||
*/
|
*/
|
||||||
std::set<common::id_t> &active_participants();
|
std::set<eid_t> &active_participants();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get all active participants in the diagram
|
* @brief Get all active participants in the diagram
|
||||||
*
|
*
|
||||||
* @return Set of all active participant ids
|
* @return Set of all active participant ids
|
||||||
*/
|
*/
|
||||||
const std::set<common::id_t> &active_participants() const;
|
const std::set<eid_t> &active_participants() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Convert element full name to PlantUML alias.
|
* @brief Convert element full name to PlantUML alias.
|
||||||
@@ -259,7 +258,7 @@ public:
|
|||||||
* @return List of message chains
|
* @return List of message chains
|
||||||
*/
|
*/
|
||||||
std::vector<message_chain_t> get_all_from_to_message_chains(
|
std::vector<message_chain_t> get_all_from_to_message_chains(
|
||||||
common::id_t from_activity, common::id_t to_activity) const;
|
eid_t from_activity, eid_t to_activity) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get id of a 'to' activity
|
* @brief Get id of a 'to' activity
|
||||||
@@ -267,7 +266,7 @@ public:
|
|||||||
* @param to_location Target activity
|
* @param to_location Target activity
|
||||||
* @return Activity id
|
* @return Activity id
|
||||||
*/
|
*/
|
||||||
std::optional<common::id_t> get_to_activity_id(
|
std::optional<eid_t> get_to_activity_id(
|
||||||
const config::source_location &to_location) const;
|
const config::source_location &to_location) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -276,7 +275,7 @@ public:
|
|||||||
* @param from_location Source activity
|
* @param from_location Source activity
|
||||||
* @return Activity id
|
* @return Activity id
|
||||||
*/
|
*/
|
||||||
std::optional<common::id_t> get_from_activity_id(
|
std::optional<eid_t> get_from_activity_id(
|
||||||
const config::source_location &from_location) const;
|
const config::source_location &from_location) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -344,14 +343,14 @@ private:
|
|||||||
return block_end_types.count(mt) > 0;
|
return block_end_types.count(mt) > 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
bool inline_lambda_operator_call(common::id_t id,
|
bool inline_lambda_operator_call(
|
||||||
model::activity &new_activity, const model::message &m);
|
eid_t id, model::activity &new_activity, const model::message &m);
|
||||||
|
|
||||||
std::map<common::id_t, activity> activities_;
|
std::map<eid_t, activity> activities_;
|
||||||
|
|
||||||
std::map<common::id_t, std::unique_ptr<participant>> participants_;
|
std::map<eid_t, std::unique_ptr<participant>> participants_;
|
||||||
|
|
||||||
std::set<common::id_t> active_participants_;
|
std::set<eid_t> active_participants_;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace clanguml::sequence_diagram::model
|
} // namespace clanguml::sequence_diagram::model
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
namespace clanguml::sequence_diagram::model {
|
namespace clanguml::sequence_diagram::model {
|
||||||
|
|
||||||
message::message(common::model::message_t type, common::id_t from)
|
message::message(common::model::message_t type, eid_t from)
|
||||||
: type_{type}
|
: type_{type}
|
||||||
, from_{from}
|
, from_{from}
|
||||||
{
|
{
|
||||||
@@ -38,13 +38,13 @@ void message::set_type(common::model::message_t t) { type_ = t; }
|
|||||||
|
|
||||||
common::model::message_t message::type() const { return type_; }
|
common::model::message_t message::type() const { return type_; }
|
||||||
|
|
||||||
void message::set_from(common::id_t f) { from_ = f; }
|
void message::set_from(eid_t f) { from_ = f; }
|
||||||
|
|
||||||
common::id_t message::from() const { return from_; }
|
eid_t message::from() const { return from_; }
|
||||||
|
|
||||||
void message::set_to(common::id_t t) { to_ = t; }
|
void message::set_to(eid_t t) { to_ = t; }
|
||||||
|
|
||||||
common::id_t message::to() const { return to_; }
|
eid_t message::to() const { return to_; }
|
||||||
|
|
||||||
void message::set_message_name(std::string name)
|
void message::set_message_name(std::string name)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ public:
|
|||||||
* @param type Message type
|
* @param type Message type
|
||||||
* @param from Id of originating sequence
|
* @param from Id of originating sequence
|
||||||
*/
|
*/
|
||||||
message(common::model::message_t type, common::id_t from);
|
message(common::model::message_t type, eid_t from);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Equality operator
|
* @brief Equality operator
|
||||||
@@ -67,28 +67,28 @@ public:
|
|||||||
*
|
*
|
||||||
* @param f Id of the participant from which message originates
|
* @param f Id of the participant from which message originates
|
||||||
*/
|
*/
|
||||||
void set_from(common::id_t f);
|
void set_from(eid_t f);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get the id of source of message
|
* @brief Get the id of source of message
|
||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
common::id_t from() const;
|
eid_t from() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Set the id of the message target
|
* @brief Set the id of the message target
|
||||||
*
|
*
|
||||||
* @param t Id of the message target
|
* @param t Id of the message target
|
||||||
*/
|
*/
|
||||||
void set_to(common::id_t t);
|
void set_to(eid_t t);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get the id of the message target
|
* @brief Get the id of the message target
|
||||||
*
|
*
|
||||||
* @return Id of the message target
|
* @return Id of the message target
|
||||||
*/
|
*/
|
||||||
common::id_t to() const;
|
eid_t to() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Set the message label
|
* @brief Set the message label
|
||||||
@@ -162,9 +162,9 @@ public:
|
|||||||
private:
|
private:
|
||||||
common::model::message_t type_{common::model::message_t::kNone};
|
common::model::message_t type_{common::model::message_t::kNone};
|
||||||
|
|
||||||
common::id_t from_{};
|
eid_t from_{};
|
||||||
|
|
||||||
common::id_t to_{};
|
eid_t to_{};
|
||||||
|
|
||||||
common::model::message_scope_t scope_{
|
common::model::message_scope_t scope_{
|
||||||
common::model::message_scope_t::kNormal};
|
common::model::message_scope_t::kNormal};
|
||||||
|
|||||||
@@ -197,7 +197,7 @@ void method::is_assignment(bool a) { is_assignment_ = a; }
|
|||||||
|
|
||||||
void method::set_method_name(const std::string &name) { method_name_ = name; }
|
void method::set_method_name(const std::string &name) { method_name_ = name; }
|
||||||
|
|
||||||
void method::set_class_id(common::id_t id) { class_id_ = id; }
|
void method::set_class_id(eid_t id) { class_id_ = id; }
|
||||||
|
|
||||||
void method::set_class_full_name(const std::string &name)
|
void method::set_class_full_name(const std::string &name)
|
||||||
{
|
{
|
||||||
@@ -238,7 +238,7 @@ std::string method::message_name(message_render_mode mode) const
|
|||||||
fmt::join(parameters(), ","), is_const() ? " const" : "", style);
|
fmt::join(parameters(), ","), is_const() ? " const" : "", style);
|
||||||
}
|
}
|
||||||
|
|
||||||
common::id_t method::class_id() const { return class_id_; }
|
eid_t method::class_id() const { return class_id_; }
|
||||||
|
|
||||||
std::string method::to_string() const
|
std::string method::to_string() const
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -27,6 +27,7 @@
|
|||||||
|
|
||||||
namespace clanguml::sequence_diagram::model {
|
namespace clanguml::sequence_diagram::model {
|
||||||
|
|
||||||
|
using clanguml::common::eid_t;
|
||||||
using clanguml::common::model::template_trait;
|
using clanguml::common::model::template_trait;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -190,9 +191,9 @@ public:
|
|||||||
*/
|
*/
|
||||||
void is_lambda(bool is_lambda);
|
void is_lambda(bool is_lambda);
|
||||||
|
|
||||||
void set_lambda_operator_id(common::id_t id) { lambda_operator_id_ = id; }
|
void set_lambda_operator_id(eid_t id) { lambda_operator_id_ = id; }
|
||||||
|
|
||||||
common::id_t lambda_operator_id() const { return lambda_operator_id_; }
|
eid_t lambda_operator_id() const { return lambda_operator_id_; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool is_struct_{false};
|
bool is_struct_{false};
|
||||||
@@ -200,7 +201,7 @@ private:
|
|||||||
bool is_template_instantiation_{false};
|
bool is_template_instantiation_{false};
|
||||||
bool is_alias_{false};
|
bool is_alias_{false};
|
||||||
bool is_lambda_{false};
|
bool is_lambda_{false};
|
||||||
common::id_t lambda_operator_id_{};
|
eid_t lambda_operator_id_{};
|
||||||
|
|
||||||
std::string full_name_;
|
std::string full_name_;
|
||||||
};
|
};
|
||||||
@@ -420,7 +421,7 @@ struct method : public function {
|
|||||||
*
|
*
|
||||||
* @param id Id of the class to which this method belongs to
|
* @param id Id of the class to which this method belongs to
|
||||||
*/
|
*/
|
||||||
void set_class_id(common::id_t id);
|
void set_class_id(eid_t id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Set full qualified name of the class
|
* @brief Set full qualified name of the class
|
||||||
@@ -450,7 +451,7 @@ struct method : public function {
|
|||||||
*
|
*
|
||||||
* @return Class id
|
* @return Class id
|
||||||
*/
|
*/
|
||||||
common::id_t class_id() const;
|
eid_t class_id() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Create a string representation of the participant
|
* @brief Create a string representation of the participant
|
||||||
@@ -502,7 +503,7 @@ struct method : public function {
|
|||||||
void is_assignment(bool a);
|
void is_assignment(bool a);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
common::id_t class_id_{};
|
eid_t class_id_{};
|
||||||
std::string method_name_;
|
std::string method_name_;
|
||||||
std::string class_full_name_;
|
std::string class_full_name_;
|
||||||
bool is_constructor_{false};
|
bool is_constructor_{false};
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ call_expression_context::call_expression_context() = default;
|
|||||||
|
|
||||||
void call_expression_context::reset()
|
void call_expression_context::reset()
|
||||||
{
|
{
|
||||||
current_caller_id_ = common::id_t{};
|
current_caller_id_ = eid_t{};
|
||||||
current_class_decl_ = nullptr;
|
current_class_decl_ = nullptr;
|
||||||
current_class_template_decl_ = nullptr;
|
current_class_template_decl_ = nullptr;
|
||||||
current_class_template_specialization_decl_ = nullptr;
|
current_class_template_specialization_decl_ = nullptr;
|
||||||
@@ -130,7 +130,7 @@ void call_expression_context::update(
|
|||||||
current_function_template_decl_ = function_template;
|
current_function_template_decl_ = function_template;
|
||||||
}
|
}
|
||||||
|
|
||||||
common::id_t call_expression_context::caller_id() const
|
eid_t call_expression_context::caller_id() const
|
||||||
{
|
{
|
||||||
if (lambda_caller_id().has_value())
|
if (lambda_caller_id().has_value())
|
||||||
return *lambda_caller_id(); // NOLINT
|
return *lambda_caller_id(); // NOLINT
|
||||||
@@ -138,7 +138,7 @@ common::id_t call_expression_context::caller_id() const
|
|||||||
return current_caller_id_;
|
return current_caller_id_;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<common::id_t> call_expression_context::lambda_caller_id() const
|
std::optional<eid_t> call_expression_context::lambda_caller_id() const
|
||||||
{
|
{
|
||||||
if (current_lambda_caller_id_.empty())
|
if (current_lambda_caller_id_.empty())
|
||||||
return {};
|
return {};
|
||||||
@@ -146,13 +146,13 @@ std::optional<common::id_t> call_expression_context::lambda_caller_id() const
|
|||||||
return current_lambda_caller_id_.top();
|
return current_lambda_caller_id_.top();
|
||||||
}
|
}
|
||||||
|
|
||||||
void call_expression_context::set_caller_id(common::id_t id)
|
void call_expression_context::set_caller_id(eid_t id)
|
||||||
{
|
{
|
||||||
LOG_DBG("Setting current caller id to {}", id);
|
LOG_DBG("Setting current caller id to {}", id);
|
||||||
current_caller_id_ = id;
|
current_caller_id_ = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
void call_expression_context::enter_lambda_expression(common::id_t id)
|
void call_expression_context::enter_lambda_expression(eid_t id)
|
||||||
{
|
{
|
||||||
LOG_DBG("Setting current lambda caller id to {}", id);
|
LOG_DBG("Setting current lambda caller id to {}", id);
|
||||||
|
|
||||||
|
|||||||
@@ -28,6 +28,8 @@
|
|||||||
|
|
||||||
namespace clanguml::sequence_diagram::visitor {
|
namespace clanguml::sequence_diagram::visitor {
|
||||||
|
|
||||||
|
using clanguml::common::eid_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This class is used to track current context of the call expressions.
|
* @brief This class is used to track current context of the call expressions.
|
||||||
*
|
*
|
||||||
@@ -116,14 +118,14 @@ struct call_expression_context {
|
|||||||
*
|
*
|
||||||
* @param id Set current caller id.
|
* @param id Set current caller id.
|
||||||
*/
|
*/
|
||||||
void set_caller_id(common::id_t id);
|
void set_caller_id(eid_t id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get current caller id
|
* @brief Get current caller id
|
||||||
*
|
*
|
||||||
* @return Id of the current caller participant
|
* @return Id of the current caller participant
|
||||||
*/
|
*/
|
||||||
common::id_t caller_id() const;
|
eid_t caller_id() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get the id of the current lambda caller.
|
* @brief Get the id of the current lambda caller.
|
||||||
@@ -133,14 +135,14 @@ struct call_expression_context {
|
|||||||
*
|
*
|
||||||
* @return Current lambda caller id, or 0 if current caller is not lambda.
|
* @return Current lambda caller id, or 0 if current caller is not lambda.
|
||||||
*/
|
*/
|
||||||
std::optional<common::id_t> lambda_caller_id() const;
|
std::optional<eid_t> lambda_caller_id() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enter a lambda expression
|
* @brief Enter a lambda expression
|
||||||
*
|
*
|
||||||
* @param id Lambda id
|
* @param id Lambda id
|
||||||
*/
|
*/
|
||||||
void enter_lambda_expression(common::id_t id);
|
void enter_lambda_expression(eid_t id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Leave current lambda expression
|
* @brief Leave current lambda expression
|
||||||
@@ -315,8 +317,8 @@ struct call_expression_context {
|
|||||||
clang::FunctionTemplateDecl *current_function_template_decl_{nullptr};
|
clang::FunctionTemplateDecl *current_function_template_decl_{nullptr};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
common::id_t current_caller_id_{};
|
eid_t current_caller_id_{};
|
||||||
std::stack<common::id_t> current_lambda_caller_id_;
|
std::stack<eid_t> current_lambda_caller_id_;
|
||||||
|
|
||||||
std::stack<callexpr_stack_t> call_expr_stack_;
|
std::stack<callexpr_stack_t> call_expr_stack_;
|
||||||
|
|
||||||
|
|||||||
@@ -64,8 +64,7 @@ bool translation_unit_visitor::VisitCXXRecordDecl(
|
|||||||
// Skip this class if it's parent template is already in the model
|
// Skip this class if it's parent template is already in the model
|
||||||
if (declaration->isTemplated() &&
|
if (declaration->isTemplated() &&
|
||||||
declaration->getDescribedTemplate() != nullptr) {
|
declaration->getDescribedTemplate() != nullptr) {
|
||||||
if (get_unique_id(
|
if (get_unique_id(eid_t{declaration->getDescribedTemplate()->getID()}))
|
||||||
common::id_t{declaration->getDescribedTemplate()->getID()}))
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -337,7 +336,7 @@ bool translation_unit_visitor::VisitFunctionDecl(
|
|||||||
// If the described templated of this function is already in the
|
// If the described templated of this function is already in the
|
||||||
// model skip it:
|
// model skip it:
|
||||||
if (get_unique_id(
|
if (get_unique_id(
|
||||||
common::id_t{declaration->getDescribedTemplate()->getID()}))
|
eid_t{declaration->getDescribedTemplate()->getID()}))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1314,10 +1313,10 @@ bool translation_unit_visitor::process_cuda_kernel_call_expression(
|
|||||||
|
|
||||||
auto callee_name = callee_function->getQualifiedNameAsString() + "()";
|
auto callee_name = callee_function->getQualifiedNameAsString() + "()";
|
||||||
|
|
||||||
const auto maybe_id = get_unique_id(common::id_t{callee_function->getID()});
|
const auto maybe_id = get_unique_id(eid_t{callee_function->getID()});
|
||||||
if (!maybe_id.has_value()) {
|
if (!maybe_id.has_value()) {
|
||||||
// This is hopefully not an interesting call...
|
// This is hopefully not an interesting call...
|
||||||
m.set_to(common::id_t{callee_function->getID()});
|
m.set_to(eid_t{callee_function->getID()});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
m.set_to(maybe_id.value());
|
m.set_to(maybe_id.value());
|
||||||
@@ -1352,17 +1351,16 @@ bool translation_unit_visitor::process_operator_call_expression(
|
|||||||
|
|
||||||
auto lambda_name = make_lambda_name(lambda_method->getParent());
|
auto lambda_name = make_lambda_name(lambda_method->getParent());
|
||||||
|
|
||||||
m.set_to(common::id_t{lambda_method->getParent()->getID()});
|
m.set_to(eid_t{lambda_method->getParent()->getID()});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
auto maybe_id = get_unique_id(
|
auto maybe_id =
|
||||||
common::id_t{operator_call_expr->getCalleeDecl()->getID()});
|
get_unique_id(eid_t{operator_call_expr->getCalleeDecl()->getID()});
|
||||||
if (maybe_id.has_value()) {
|
if (maybe_id.has_value()) {
|
||||||
m.set_to(maybe_id.value());
|
m.set_to(maybe_id.value());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
m.set_to(
|
m.set_to(eid_t{operator_call_expr->getCalleeDecl()->getID()});
|
||||||
common::id_t{operator_call_expr->getCalleeDecl()->getID()});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1388,19 +1386,19 @@ bool translation_unit_visitor::process_construct_expression(
|
|||||||
constructor->getID(),
|
constructor->getID(),
|
||||||
construct_expr->getBeginLoc().printToString(source_manager()));
|
construct_expr->getBeginLoc().printToString(source_manager()));
|
||||||
|
|
||||||
auto maybe_id = get_unique_id(common::id_t{constructor->getID()});
|
auto maybe_id = get_unique_id(eid_t{constructor->getID()});
|
||||||
if (maybe_id.has_value()) {
|
if (maybe_id.has_value()) {
|
||||||
m.set_to(maybe_id.value());
|
m.set_to(maybe_id.value());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
m.set_to(common::id_t{constructor->getID()});
|
m.set_to(eid_t{constructor->getID()});
|
||||||
}
|
}
|
||||||
|
|
||||||
m.set_message_name(
|
m.set_message_name(
|
||||||
fmt::format("{}::{}", constructor_parent->getQualifiedNameAsString(),
|
fmt::format("{}::{}", constructor_parent->getQualifiedNameAsString(),
|
||||||
constructor_parent->getNameAsString()));
|
constructor_parent->getNameAsString()));
|
||||||
|
|
||||||
diagram().add_active_participant(common::id_t{constructor->getID()});
|
diagram().add_active_participant(eid_t{constructor->getID()});
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -1425,7 +1423,7 @@ bool translation_unit_visitor::process_class_method_call_expression(
|
|||||||
if (!should_include(callee_decl) || !should_include(method_decl))
|
if (!should_include(callee_decl) || !should_include(method_decl))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
m.set_to(common::id_t{method_decl->getID()});
|
m.set_to(eid_t{method_decl->getID()});
|
||||||
m.set_message_name(method_decl->getNameAsString());
|
m.set_message_name(method_decl->getNameAsString());
|
||||||
m.set_return_type(
|
m.set_return_type(
|
||||||
method_call_expr->getCallReturnType(*context().get_ast_context())
|
method_call_expr->getCallReturnType(*context().get_ast_context())
|
||||||
@@ -1434,7 +1432,7 @@ bool translation_unit_visitor::process_class_method_call_expression(
|
|||||||
LOG_TRACE("Set callee method id {} for method name {}", m.to(),
|
LOG_TRACE("Set callee method id {} for method name {}", m.to(),
|
||||||
method_decl->getQualifiedNameAsString());
|
method_decl->getQualifiedNameAsString());
|
||||||
|
|
||||||
diagram().add_active_participant(common::id_t{method_decl->getID()});
|
diagram().add_active_participant(eid_t{method_decl->getID()});
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -1511,7 +1509,7 @@ bool translation_unit_visitor::process_class_template_method_call_expression(
|
|||||||
dependent_member_callee->getMember().getAsString());
|
dependent_member_callee->getMember().getAsString());
|
||||||
|
|
||||||
if (const auto maybe_id =
|
if (const auto maybe_id =
|
||||||
get_unique_id(common::id_t{template_declaration->getID()});
|
get_unique_id(eid_t{template_declaration->getID()});
|
||||||
maybe_id.has_value())
|
maybe_id.has_value())
|
||||||
diagram().add_active_participant(maybe_id.value());
|
diagram().add_active_participant(maybe_id.value());
|
||||||
}
|
}
|
||||||
@@ -1548,10 +1546,10 @@ bool translation_unit_visitor::process_function_call_expression(
|
|||||||
|
|
||||||
auto callee_name = callee_function->getQualifiedNameAsString() + "()";
|
auto callee_name = callee_function->getQualifiedNameAsString() + "()";
|
||||||
|
|
||||||
const auto maybe_id = get_unique_id(common::id_t{callee_function->getID()});
|
const auto maybe_id = get_unique_id(eid_t{callee_function->getID()});
|
||||||
if (!maybe_id.has_value()) {
|
if (!maybe_id.has_value()) {
|
||||||
// This is hopefully not an interesting call...
|
// This is hopefully not an interesting call...
|
||||||
m.set_to(common::id_t{callee_function->getID()});
|
m.set_to(eid_t{callee_function->getID()});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
m.set_to(maybe_id.value());
|
m.set_to(maybe_id.value());
|
||||||
@@ -1571,8 +1569,7 @@ bool translation_unit_visitor::process_lambda_call_expression(
|
|||||||
if (lambda_expr == nullptr)
|
if (lambda_expr == nullptr)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
const auto lambda_class_id =
|
const auto lambda_class_id = eid_t{lambda_expr->getLambdaClass()->getID()};
|
||||||
common::id_t{lambda_expr->getLambdaClass()->getID()};
|
|
||||||
const auto maybe_id = get_unique_id(lambda_class_id);
|
const auto maybe_id = get_unique_id(lambda_class_id);
|
||||||
if (!maybe_id.has_value())
|
if (!maybe_id.has_value())
|
||||||
m.set_to(lambda_class_id);
|
m.set_to(lambda_class_id);
|
||||||
@@ -1597,9 +1594,9 @@ bool translation_unit_visitor::process_unresolved_lookup_call_expression(
|
|||||||
const auto *ftd =
|
const auto *ftd =
|
||||||
clang::dyn_cast_or_null<clang::FunctionTemplateDecl>(decl);
|
clang::dyn_cast_or_null<clang::FunctionTemplateDecl>(decl);
|
||||||
|
|
||||||
const auto maybe_id = get_unique_id(common::id_t{ftd->getID()});
|
const auto maybe_id = get_unique_id(eid_t{ftd->getID()});
|
||||||
if (!maybe_id.has_value())
|
if (!maybe_id.has_value())
|
||||||
m.set_to(common::id_t{ftd->getID()});
|
m.set_to(eid_t{ftd->getID()});
|
||||||
else {
|
else {
|
||||||
m.set_to(maybe_id.value());
|
m.set_to(maybe_id.value());
|
||||||
}
|
}
|
||||||
@@ -1611,9 +1608,9 @@ bool translation_unit_visitor::process_unresolved_lookup_call_expression(
|
|||||||
const auto *fd =
|
const auto *fd =
|
||||||
clang::dyn_cast_or_null<clang::FunctionDecl>(decl);
|
clang::dyn_cast_or_null<clang::FunctionDecl>(decl);
|
||||||
|
|
||||||
const auto maybe_id = get_unique_id(common::id_t{fd->getID()});
|
const auto maybe_id = get_unique_id(eid_t{fd->getID()});
|
||||||
if (!maybe_id.has_value())
|
if (!maybe_id.has_value())
|
||||||
m.set_to(common::id_t{fd->getID()});
|
m.set_to(eid_t{fd->getID()});
|
||||||
else {
|
else {
|
||||||
m.set_to(maybe_id.value());
|
m.set_to(maybe_id.value());
|
||||||
}
|
}
|
||||||
@@ -1683,13 +1680,13 @@ translation_unit_visitor::create_class_model(clang::CXXRecordDecl *cls)
|
|||||||
// - the parent is a regular C++ class/struct
|
// - the parent is a regular C++ class/struct
|
||||||
// - the parent is a class template declaration/specialization
|
// - the parent is a class template declaration/specialization
|
||||||
// - the parent is a lambda (i.e. this is a nested lambda expression)
|
// - the parent is a lambda (i.e. this is a nested lambda expression)
|
||||||
std::optional<common::id_t> id_opt;
|
std::optional<eid_t> id_opt;
|
||||||
const auto *parent_record_decl =
|
const auto *parent_record_decl =
|
||||||
clang::dyn_cast<clang::RecordDecl>(parent);
|
clang::dyn_cast<clang::RecordDecl>(parent);
|
||||||
|
|
||||||
assert(parent_record_decl != nullptr);
|
assert(parent_record_decl != nullptr);
|
||||||
|
|
||||||
const common::id_t ast_id{parent_record_decl->getID()};
|
const eid_t ast_id{parent_record_decl->getID()};
|
||||||
|
|
||||||
// First check if the parent has been added to the diagram as
|
// First check if the parent has been added to the diagram as
|
||||||
// regular class
|
// regular class
|
||||||
@@ -1774,16 +1771,15 @@ translation_unit_visitor::create_class_model(clang::CXXRecordDecl *cls)
|
|||||||
return c_ptr;
|
return c_ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void translation_unit_visitor::set_unique_id(
|
void translation_unit_visitor::set_unique_id(int64_t local_id, eid_t global_id)
|
||||||
int64_t local_id, common::id_t global_id)
|
|
||||||
{
|
{
|
||||||
LOG_TRACE("Setting local element mapping {} --> {}", local_id, global_id);
|
LOG_TRACE("Setting local element mapping {} --> {}", local_id, global_id);
|
||||||
|
|
||||||
local_ast_id_map_[local_id] = global_id;
|
local_ast_id_map_[local_id] = global_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<common::id_t> translation_unit_visitor::get_unique_id(
|
std::optional<eid_t> translation_unit_visitor::get_unique_id(
|
||||||
common::id_t local_id) const
|
eid_t local_id) const
|
||||||
{
|
{
|
||||||
if (local_ast_id_map_.find(local_id.ast_local_value()) ==
|
if (local_ast_id_map_.find(local_id.ast_local_value()) ==
|
||||||
local_ast_id_map_.end())
|
local_ast_id_map_.end())
|
||||||
@@ -2058,7 +2054,7 @@ void translation_unit_visitor::ensure_lambda_messages_have_operator_as_target()
|
|||||||
|
|
||||||
void translation_unit_visitor::resolve_ids_to_global()
|
void translation_unit_visitor::resolve_ids_to_global()
|
||||||
{
|
{
|
||||||
std::set<common::id_t> active_participants_unique;
|
std::set<eid_t> active_participants_unique;
|
||||||
|
|
||||||
// Change all active participants AST local ids to diagram global ids
|
// Change all active participants AST local ids to diagram global ids
|
||||||
for (auto id : diagram().active_participants()) {
|
for (auto id : diagram().active_participants()) {
|
||||||
@@ -2293,7 +2289,7 @@ bool translation_unit_visitor::should_include(
|
|||||||
|
|
||||||
std::optional<std::string> translation_unit_visitor::get_expression_comment(
|
std::optional<std::string> translation_unit_visitor::get_expression_comment(
|
||||||
const clang::SourceManager &sm, const clang::ASTContext &context,
|
const clang::SourceManager &sm, const clang::ASTContext &context,
|
||||||
const common::id_t caller_id, const clang::Stmt *stmt)
|
const eid_t caller_id, const clang::Stmt *stmt)
|
||||||
{
|
{
|
||||||
const auto *raw_comment =
|
const auto *raw_comment =
|
||||||
clanguml::common::get_expression_raw_comment(sm, context, stmt);
|
clanguml::common::get_expression_raw_comment(sm, context, stmt);
|
||||||
|
|||||||
@@ -166,7 +166,7 @@ public:
|
|||||||
{
|
{
|
||||||
assert(decl != nullptr);
|
assert(decl != nullptr);
|
||||||
|
|
||||||
auto unique_participant_id = get_unique_id(common::id_t{decl->getID()});
|
auto unique_participant_id = get_unique_id(eid_t{decl->getID()});
|
||||||
if (!unique_participant_id.has_value())
|
if (!unique_participant_id.has_value())
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
@@ -185,7 +185,7 @@ public:
|
|||||||
{
|
{
|
||||||
assert(decl != nullptr);
|
assert(decl != nullptr);
|
||||||
|
|
||||||
auto unique_participant_id = get_unique_id(common::id_t{decl->getID()});
|
auto unique_participant_id = get_unique_id(eid_t{decl->getID()});
|
||||||
if (!unique_participant_id.has_value())
|
if (!unique_participant_id.has_value())
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
@@ -200,7 +200,7 @@ public:
|
|||||||
* @return Optional reference to participant diagram element
|
* @return Optional reference to participant diagram element
|
||||||
*/
|
*/
|
||||||
template <typename T = model::participant>
|
template <typename T = model::participant>
|
||||||
common::optional_ref<T> get_participant(const common::id_t id)
|
common::optional_ref<T> get_participant(const eid_t id)
|
||||||
{
|
{
|
||||||
if (diagram().participants().find(id) == diagram().participants().end())
|
if (diagram().participants().find(id) == diagram().participants().end())
|
||||||
return {};
|
return {};
|
||||||
@@ -217,7 +217,7 @@ public:
|
|||||||
* @return Optional reference to participant diagram element
|
* @return Optional reference to participant diagram element
|
||||||
*/
|
*/
|
||||||
template <typename T = model::participant>
|
template <typename T = model::participant>
|
||||||
common::optional_ref<T> get_participant(common::id_t id) const
|
common::optional_ref<T> get_participant(eid_t id) const
|
||||||
{
|
{
|
||||||
if (diagram().participants().find(id) == diagram().participants().end())
|
if (diagram().participants().find(id) == diagram().participants().end())
|
||||||
return {};
|
return {};
|
||||||
@@ -235,7 +235,7 @@ public:
|
|||||||
* @param local_id Local AST element id
|
* @param local_id Local AST element id
|
||||||
* @param global_id Globa diagram element id
|
* @param global_id Globa diagram element id
|
||||||
*/
|
*/
|
||||||
void set_unique_id(int64_t local_id, common::id_t global_id);
|
void set_unique_id(int64_t local_id, eid_t global_id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Retrieve the global `clang-uml` entity id based on the Clang
|
* @brief Retrieve the global `clang-uml` entity id based on the Clang
|
||||||
@@ -243,7 +243,7 @@ public:
|
|||||||
* @param local_id AST local element id
|
* @param local_id AST local element id
|
||||||
* @return Global diagram element id
|
* @return Global diagram element id
|
||||||
*/
|
*/
|
||||||
std::optional<common::id_t> get_unique_id(common::id_t local_id) const;
|
std::optional<eid_t> get_unique_id(eid_t local_id) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Finalize diagram model for this translation unit
|
* @brief Finalize diagram model for this translation unit
|
||||||
@@ -469,7 +469,7 @@ private:
|
|||||||
|
|
||||||
std::optional<std::string> get_expression_comment(
|
std::optional<std::string> get_expression_comment(
|
||||||
const clang::SourceManager &sm, const clang::ASTContext &context,
|
const clang::SourceManager &sm, const clang::ASTContext &context,
|
||||||
common::id_t caller_id, const clang::Stmt *stmt);
|
eid_t caller_id, const clang::Stmt *stmt);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Initializes model message from comment call directive
|
* @brief Initializes model message from comment call directive
|
||||||
@@ -502,15 +502,14 @@ private:
|
|||||||
std::map<clang::CXXConstructExpr *, model::message>
|
std::map<clang::CXXConstructExpr *, model::message>
|
||||||
construct_expr_message_map_;
|
construct_expr_message_map_;
|
||||||
|
|
||||||
std::map<common::id_t,
|
std::map<eid_t, std::unique_ptr<clanguml::sequence_diagram::model::class_>>
|
||||||
std::unique_ptr<clanguml::sequence_diagram::model::class_>>
|
|
||||||
forward_declarations_;
|
forward_declarations_;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @todo Refactor to @ref ast_id_mapper
|
* @todo Refactor to @ref ast_id_mapper
|
||||||
*/
|
*/
|
||||||
std::map</* local id from ->getID() */ int64_t,
|
std::map</* local id from ->getID() */ int64_t,
|
||||||
/* global ID based on full name */ common::id_t>
|
/* global ID based on full name */ eid_t>
|
||||||
local_ast_id_map_;
|
local_ast_id_map_;
|
||||||
|
|
||||||
std::map<int64_t /* local anonymous struct id */,
|
std::map<int64_t /* local anonymous struct id */,
|
||||||
|
|||||||
@@ -21,21 +21,21 @@
|
|||||||
|
|
||||||
#include "doctest/doctest.h"
|
#include "doctest/doctest.h"
|
||||||
|
|
||||||
TEST_CASE("Test common::id_t")
|
TEST_CASE("Test eid_t")
|
||||||
{
|
{
|
||||||
using namespace clanguml;
|
using clanguml::common::eid_t;
|
||||||
|
|
||||||
common::id_t empty{};
|
eid_t empty{};
|
||||||
|
|
||||||
REQUIRE(empty.is_global());
|
REQUIRE(empty.is_global());
|
||||||
REQUIRE_EQ(empty.value(), 0);
|
REQUIRE_EQ(empty.value(), 0);
|
||||||
|
|
||||||
common::id_t local_id{(int64_t)100};
|
eid_t local_id{(int64_t)100};
|
||||||
REQUIRE_EQ(local_id.ast_local_value(), 100);
|
REQUIRE_EQ(local_id.ast_local_value(), 100);
|
||||||
REQUIRE_EQ(local_id.value(), 100);
|
REQUIRE_EQ(local_id.value(), 100);
|
||||||
REQUIRE(!local_id.is_global());
|
REQUIRE(!local_id.is_global());
|
||||||
|
|
||||||
common::id_t global_id{(uint64_t)100};
|
eid_t global_id{(uint64_t)100};
|
||||||
REQUIRE_EQ(global_id.value(), 100);
|
REQUIRE_EQ(global_id.value(), 100);
|
||||||
REQUIRE(global_id.is_global());
|
REQUIRE(global_id.is_global());
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user