0.5.4
C++ to UML diagram generator based on Clang
Loading...
Searching...
No Matches
Public Member Functions | Private Attributes | List of all members
clanguml::common::model::subclass_filter Struct Reference

Detailed Description

Match element based on whether it is a subclass of a set of base classes, or one of them.

Definition at line 324 of file diagram_filter.h.

#include <diagram_filter.h>

Public Member Functions

 subclass_filter (filter_t type, std::vector< common::string_or_regex > roots)
 
 ~subclass_filter () override=default
 
tvl::value_t match (const diagram &d, const element &e) const override
 
- Public Member Functions inherited from clanguml::common::model::filter_visitor
 filter_visitor (filter_t type)
 
virtual ~filter_visitor ()=default
 
virtual tvl::value_t match (const diagram &d, const common::model::element &e) const
 
virtual tvl::value_t match (const diagram &d, const common::model::relationship &r) const
 
virtual tvl::value_t match (const diagram &d, const common::model::relationship_t &r) const
 
virtual tvl::value_t match (const diagram &d, const common::model::access_t &a) const
 
virtual tvl::value_t match (const diagram &d, const common::model::namespace_ &ns) const
 
virtual tvl::value_t match (const diagram &d, const common::model::source_file &f) const
 
virtual tvl::value_t match (const diagram &d, const common::model::source_location &f) const
 
virtual tvl::value_t match (const diagram &d, const class_diagram::model::class_method &m) const
 
virtual tvl::value_t match (const diagram &d, const class_diagram::model::class_member &m) const
 
virtual tvl::value_t match (const diagram &d, const sequence_diagram::model::participant &p) const
 
bool is_inclusive () const
 
bool is_exclusive () const
 
filter_t type () const
 
filter_mode_t mode () const
 
void set_mode (filter_mode_t mode)
 

Private Attributes

std::vector< common::string_or_regexroots_
 

Constructor & Destructor Documentation

◆ subclass_filter()

clanguml::common::model::subclass_filter::subclass_filter ( filter_t  type,
std::vector< common::string_or_regex roots 
)

Definition at line 612 of file diagram_filter.cc.

615 , roots_{std::move(roots)}
616{
617}

◆ ~subclass_filter()

clanguml::common::model::subclass_filter::~subclass_filter ( )
overridedefault

Member Function Documentation

◆ match()

tvl::value_t clanguml::common::model::subclass_filter::match ( const diagram d,
const element e 
) const
overridevirtual

Reimplemented from clanguml::common::model::filter_visitor.

Definition at line 619 of file diagram_filter.cc.

620{
621 if (d.type() != diagram_t::kClass)
622 return {};
623
624 if (roots_.empty())
625 return {};
626
627 if (!d.complete())
628 return {};
629
630 const auto &cd = dynamic_cast<const class_diagram::model::diagram &>(d);
631
632 // First get all parents of element e
634
635 const auto &fn = e.full_name(false);
636 auto class_ref = cd.find<class_diagram::model::class_>(fn);
637
638 if (!class_ref.has_value())
639 return false;
640
641 parents.emplace(class_ref.value());
642
643 cd.get_parents(parents);
644
645 std::vector<std::string> parents_names;
646 for (const auto p : parents)
647 parents_names.push_back(p.get().full_name(false));
648
649 // Now check if any of the parents matches the roots specified in the
650 // filter config
651 for (const auto &root : roots_) {
652 for (const auto &parent : parents) {
653 auto full_name = parent.get().full_name(false);
654 if (root == full_name) {
655 return true;
656 }
657 }
658 }
659
660 return false;
661}

Member Data Documentation

◆ roots_

std::vector<common::string_or_regex> clanguml::common::model::subclass_filter::roots_
private

Definition at line 332 of file diagram_filter.h.


The documentation for this struct was generated from the following files: