Skip to content

Commit

Permalink
Added initial version of advanced diagram filter config (#289)
Browse files Browse the repository at this point in the history
  • Loading branch information
bkryza committed Jun 25, 2024
1 parent 19bb8ae commit 40851b3
Show file tree
Hide file tree
Showing 11 changed files with 584 additions and 78 deletions.
119 changes: 111 additions & 8 deletions src/common/model/filters/diagram_filter.cc
Original file line number Diff line number Diff line change
Expand Up @@ -169,22 +169,116 @@ anyof_filter::anyof_filter(
tvl::value_t anyof_filter::match(
const diagram &d, const common::model::element &e) const
{
return tvl::any_of(filters_.begin(), filters_.end(),
[&d, &e](const auto &f) { return f->match(d, e); });
return match_anyof(d, e);
}

tvl::value_t anyof_filter::match(
const diagram &d, const sequence_diagram::model::participant &p) const
const diagram &d, const common::model::relationship_t &r) const
{
return match_anyof(d, r);
}

tvl::value_t anyof_filter::match(
const diagram &d, const common::model::access_t &a) const
{
return match_anyof(d, a);
}

tvl::value_t anyof_filter::match(
const diagram &d, const common::model::namespace_ &ns) const
{
return match_anyof(d, ns);
}

tvl::value_t anyof_filter::match(
const diagram &d, const common::model::source_file &f) const
{
return match_anyof(d, f);
}

tvl::value_t anyof_filter::match(
const diagram &d, const common::model::source_location &f) const
{
return tvl::any_of(filters_.begin(), filters_.end(),
[&d, &p](const auto &f) { return f->match(d, p); });
return match_anyof(d, f);
}

tvl::value_t anyof_filter::match(
const diagram &d, const common::model::source_file &e) const
const diagram &d, const class_diagram::model::class_method &m) const
{
return match_anyof(d, m);
}

tvl::value_t anyof_filter::match(
const diagram &d, const class_diagram::model::class_member &m) const
{
return match_anyof(d, m);
}

tvl::value_t anyof_filter::match(
const diagram &d, const sequence_diagram::model::participant &p) const
{
return match_anyof(d, p);
}

allof_filter::allof_filter(
filter_t type, std::vector<std::unique_ptr<filter_visitor>> filters)
: filter_visitor{type}
, filters_{std::move(filters)}
{
return tvl::any_of(filters_.begin(), filters_.end(),
[&d, &e](const auto &f) { return f->match(d, e); });
}

tvl::value_t allof_filter::match(
const diagram &d, const common::model::element &e) const
{
return match_allof(d, e);
}

tvl::value_t allof_filter::match(
const diagram &d, const common::model::relationship_t &r) const
{
return match_allof(d, r);
}

tvl::value_t allof_filter::match(
const diagram &d, const common::model::access_t &a) const
{
return match_allof(d, a);
}

tvl::value_t allof_filter::match(
const diagram &d, const common::model::namespace_ &ns) const
{
return match_allof(d, ns);
}

tvl::value_t allof_filter::match(
const diagram &d, const common::model::source_file &f) const
{
return match_allof(d, f);
}

tvl::value_t allof_filter::match(
const diagram &d, const common::model::source_location &f) const
{
return match_allof(d, f);
}

tvl::value_t allof_filter::match(
const diagram &d, const class_diagram::model::class_method &m) const
{
return match_allof(d, m);
}

tvl::value_t allof_filter::match(
const diagram &d, const class_diagram::model::class_member &m) const
{
return match_allof(d, m);
}

tvl::value_t allof_filter::match(
const diagram &d, const sequence_diagram::model::participant &p) const
{
return match_allof(d, p);
}

namespace_filter::namespace_filter(
Expand Down Expand Up @@ -978,6 +1072,15 @@ diagram_filter::diagram_filter(const common::model::diagram &d,
{
}

void diagram_filter::add_filter(
filter_t filter_type, std::unique_ptr<filter_visitor> fv)
{
if (filter_type == filter_t::kInclusive)
add_inclusive_filter(std::move(fv));
else
add_exclusive_filter(std::move(fv));
}

void diagram_filter::add_inclusive_filter(std::unique_ptr<filter_visitor> fv)
{
inclusive_.emplace_back(std::move(fv));
Expand Down
73 changes: 72 additions & 1 deletion src/common/model/filters/diagram_filter.h
Original file line number Diff line number Diff line change
Expand Up @@ -127,13 +127,82 @@ struct anyof_filter : public filter_visitor {
tvl::value_t match(
const diagram &d, const common::model::element &e) const override;

tvl::value_t match(const diagram &d,
const common::model::relationship_t &r) const override;

tvl::value_t match(
const diagram &d, const common::model::access_t &a) const override;

tvl::value_t match(
const diagram &d, const common::model::namespace_ &ns) const override;

tvl::value_t match(
const diagram &d, const common::model::source_file &f) const override;

tvl::value_t match(const diagram &d,
const common::model::source_location &f) const override;

tvl::value_t match(const diagram &d,
const class_diagram::model::class_method &m) const override;

tvl::value_t match(const diagram &d,
const class_diagram::model::class_member &m) const override;

tvl::value_t match(const diagram &d,
const sequence_diagram::model::participant &p) const override;

private:
template <typename E>
tvl::value_t match_anyof(const diagram &d, const E &element) const
{
return tvl::any_of(filters_.begin(), filters_.end(),
[&d, &element](const auto &f) { return f->match(d, element); });
}

std::vector<std::unique_ptr<filter_visitor>> filters_;
};

struct allof_filter : public filter_visitor {
allof_filter(
filter_t type, std::vector<std::unique_ptr<filter_visitor>> filters);

~allof_filter() override = default;

tvl::value_t match(
const diagram &d, const common::model::source_file &e) const override;
const diagram &d, const common::model::element &e) const override;

tvl::value_t match(const diagram &d,
const common::model::relationship_t &r) const override;

tvl::value_t match(
const diagram &d, const common::model::access_t &a) const override;

tvl::value_t match(
const diagram &d, const common::model::namespace_ &ns) const override;

tvl::value_t match(
const diagram &d, const common::model::source_file &f) const override;

tvl::value_t match(const diagram &d,
const common::model::source_location &f) const override;

tvl::value_t match(const diagram &d,
const class_diagram::model::class_method &m) const override;

tvl::value_t match(const diagram &d,
const class_diagram::model::class_member &m) const override;

tvl::value_t match(const diagram &d,
const sequence_diagram::model::participant &p) const override;

private:
template <typename E>
tvl::value_t match_allof(const diagram &d, const E &element) const
{
return tvl::all_of(filters_.begin(), filters_.end(),
[&d, &element](const auto &f) { return f->match(d, element); });
}

std::vector<std::unique_ptr<filter_visitor>> filters_;
};

Expand Down Expand Up @@ -681,6 +750,8 @@ class diagram_filter {
diagram_filter(const common::model::diagram &d, const config::diagram &c,
private_constructor_tag_t unused);

void add_filter(filter_t filter_type, std::unique_ptr<filter_visitor> fv);

/**
* Add inclusive filter.
*
Expand Down
Loading

0 comments on commit 40851b3

Please sign in to comment.