Fixed package diagram unique packages generation
This commit is contained in:
@@ -21,6 +21,8 @@
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <string_view>
|
||||
#include <vector>
|
||||
|
||||
namespace clanguml {
|
||||
namespace decorators {
|
||||
|
||||
@@ -37,7 +37,8 @@ class package_trait {
|
||||
public:
|
||||
void add_package(std::unique_ptr<T> p)
|
||||
{
|
||||
packages_.emplace_back(std::move(p));
|
||||
if (!contains(packages_, p.get()))
|
||||
packages_.emplace_back(std::move(p));
|
||||
}
|
||||
|
||||
void add_package(std::vector<std::string> path, std::unique_ptr<T> p)
|
||||
|
||||
@@ -156,4 +156,19 @@ void remove_prefix(std::vector<T> &col, const std::vector<T> &prefix)
|
||||
|
||||
col = std::vector<T>(col.begin() + prefix.size(), col.end());
|
||||
}
|
||||
|
||||
template <typename T, typename E>
|
||||
bool contains(const T &container, const E &element)
|
||||
{
|
||||
if constexpr (std::is_pointer_v<E>) {
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user