0.6.1
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 349 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 class_diagram::model::objc_method &m) const
 
virtual tvl::value_t match (const diagram &d, const class_diagram::model::objc_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)
 
virtual void reset ()
 

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 818 of file diagram_filter.cc.

821 , roots_{std::move(roots)}
822{
823}

◆ ~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 825 of file diagram_filter.cc.

826{
827 if (d.type() != diagram_t::kClass)
828 return {};
829
830 if (roots_.empty())
831 return {};
832
833 if (!d.complete())
834 return {};
835
836 const auto &cd = dynamic_cast<const class_diagram::model::diagram &>(d);
837
838 // First get all parents of element e
840
841 const auto &fn = e.full_name(false);
842 auto class_ref = cd.find<class_diagram::model::class_>(fn);
843
844 if (!class_ref.has_value())
845 return false;
846
847 parents.emplace(class_ref.value());
848
849 cd.get_parents(parents);
850
851 std::vector<std::string> parents_names;
852 for (const auto p : parents)
853 parents_names.push_back(p.get().full_name(false));
854
855 // Now check if any of the parents matches the roots specified in the
856 // filter config
857 for (const auto &root : roots_) {
858 for (const auto &parent : parents) {
859 auto full_name = parent.get().full_name(false);
860 if (root == full_name) {
861 if (type() == filter_t::kExclusive)
862 LOG_TRACE("Element {} rejected by subclass_filter",
863 e.full_name(false));
864
865 return true;
866 }
867 }
868 }
869
870 if (type() == filter_t::kInclusive)
871 LOG_TRACE("Element {} rejected by subclass_filter", e.full_name(false));
872
873 return false;
874}

Member Data Documentation

◆ roots_

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

Definition at line 357 of file diagram_filter.h.


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