From 8aec4a4d190b5041209a01c1d758443e4b199a8d Mon Sep 17 00:00:00 2001 From: Bartek Kryza Date: Sat, 29 Jan 2022 20:50:03 +0100 Subject: [PATCH] Fixed package diagram unique packages generation --- src/decorators/decorators.h | 2 ++ src/package_diagram/model/package.h | 3 ++- src/util/util.h | 15 +++++++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/decorators/decorators.h b/src/decorators/decorators.h index a080ce61..554759c0 100644 --- a/src/decorators/decorators.h +++ b/src/decorators/decorators.h @@ -21,6 +21,8 @@ #include #include #include +#include +#include namespace clanguml { namespace decorators { diff --git a/src/package_diagram/model/package.h b/src/package_diagram/model/package.h index ca4a0e2d..eec76aca 100644 --- a/src/package_diagram/model/package.h +++ b/src/package_diagram/model/package.h @@ -37,7 +37,8 @@ class package_trait { public: void add_package(std::unique_ptr p) { - packages_.emplace_back(std::move(p)); + if (!contains(packages_, p.get())) + packages_.emplace_back(std::move(p)); } void add_package(std::vector path, std::unique_ptr p) diff --git a/src/util/util.h b/src/util/util.h index e00396f3..d49c05e0 100644 --- a/src/util/util.h +++ b/src/util/util.h @@ -156,4 +156,19 @@ void remove_prefix(std::vector &col, const std::vector &prefix) col = std::vector(col.begin() + prefix.size(), col.end()); } + +template +bool contains(const T &container, const E &element) +{ + if constexpr (std::is_pointer_v) { + return std::find_if(container.begin(), container.end(), + [&element](const auto &e) { + return *e == *element; + }) != container.end(); + } + else { + return std::find(container.cbegin(), container.cend(), element) != + container.cend(); + } +} }