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::namespace_filter Struct Reference

Detailed Description

Match namespace or diagram element to a set of specified namespaces or regex patterns.

Definition at line 225 of file diagram_filter.h.

#include <diagram_filter.h>

Public Member Functions

 namespace_filter (filter_t type, std::vector< common::namespace_or_regex > namespaces)
 
 ~namespace_filter () override=default
 
tvl::value_t match (const diagram &d, const namespace_ &ns) const override
 
tvl::value_t match (const diagram &d, const element &e) const override
 
tvl::value_t match (const diagram &d, const sequence_diagram::model::participant &p) 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::namespace_or_regexnamespaces_
 

Constructor & Destructor Documentation

◆ namespace_filter()

clanguml::common::model::namespace_filter::namespace_filter ( filter_t  type,
std::vector< common::namespace_or_regex namespaces 
)

Definition at line 294 of file diagram_filter.cc.

297 , namespaces_{std::move(namespaces)}
298{
299}

◆ ~namespace_filter()

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

Member Function Documentation

◆ match() [1/3]

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

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

Definition at line 323 of file diagram_filter.cc.

324{
325 if (d.type() != diagram_t::kPackage &&
326 dynamic_cast<const package *>(&e) != nullptr) {
327 auto result = tvl::any_of(namespaces_.begin(), namespaces_.end(),
328 [&e, is_inclusive = is_inclusive()](const auto &nsit) {
329 if (std::holds_alternative<namespace_>(nsit.value())) {
330 const auto &ns_pattern = std::get<namespace_>(nsit.value());
331
332 auto element_full_name_starts_with_namespace =
333 namespace_{e.name_and_ns()}.starts_with(ns_pattern);
334
335 auto element_full_name_equals_pattern =
336 namespace_{e.name_and_ns()} == ns_pattern;
337
338 auto pattern_starts_with_element_full_name =
339 ns_pattern.starts_with(namespace_{e.name_and_ns()});
340
341 auto result = element_full_name_starts_with_namespace ||
342 element_full_name_equals_pattern;
343
344 if (is_inclusive)
345 result =
346 result || pattern_starts_with_element_full_name;
347
348 return result;
349 }
350
351 return std::get<common::regex>(nsit.value()) %=
352 e.full_name(false);
353 });
354
355 return result;
356 }
357
358 if (d.type() == diagram_t::kPackage) {
359 auto result = tvl::any_of(namespaces_.begin(), namespaces_.end(),
360 [&e, is_inclusive = is_inclusive()](const auto &nsit) {
361 if (std::holds_alternative<namespace_>(nsit.value())) {
362 auto e_ns = namespace_{e.full_name(false)};
363 auto nsit_ns = std::get<namespace_>(nsit.value());
364
365 if (is_inclusive)
366 return e_ns.starts_with(nsit_ns) ||
367 nsit_ns.starts_with(e_ns) || e_ns == nsit_ns;
368
369 return e_ns.starts_with(nsit_ns) || e_ns == nsit_ns;
370 }
371
372 return std::get<common::regex>(nsit.value()) %=
373 e.full_name(false);
374 });
375
376 return result;
377 }
378
379 auto result = tvl::any_of(
380 namespaces_.begin(), namespaces_.end(), [&e](const auto &nsit) {
381 if (std::holds_alternative<namespace_>(nsit.value())) {
382 return e.get_namespace().starts_with(
383 std::get<namespace_>(nsit.value()));
384 }
385
386 return std::get<common::regex>(nsit.value()) %= e.full_name(false);
387 });
388
389 return result;
390}

◆ match() [2/3]

tvl::value_t clanguml::common::model::namespace_filter::match ( const diagram d,
const namespace_ ns 
) const
overridevirtual

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

Definition at line 301 of file diagram_filter.cc.

303{
304 if (ns.is_empty())
305 return {};
306
307 return tvl::any_of(namespaces_.begin(), namespaces_.end(),
308 [&ns, is_inclusive = is_inclusive()](const auto &nsit) {
309 if (std::holds_alternative<namespace_>(nsit.value())) {
310 const auto &ns_pattern = std::get<namespace_>(nsit.value());
311 if (is_inclusive)
312 return ns.starts_with(ns_pattern) ||
313 ns_pattern.starts_with(ns);
314
315 return ns.starts_with(ns_pattern);
316 }
317
318 const auto &regex = std::get<common::regex>(nsit.value());
319 return regex %= ns.to_string();
320 });
321}

◆ match() [3/3]

tvl::value_t clanguml::common::model::namespace_filter::match ( const diagram d,
const sequence_diagram::model::participant p 
) const
overridevirtual

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

Definition at line 392 of file diagram_filter.cc.

394{
395 return match(d, dynamic_cast<const element &>(p));
396}

Member Data Documentation

◆ namespaces_

std::vector<common::namespace_or_regex> clanguml::common::model::namespace_filter::namespaces_
private

Definition at line 239 of file diagram_filter.h.


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