DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
dunedaq::confmodel::ExcludedEntities Class Reference

#include <ExcludedEntities.hpp>

Public Member Functions

 ExcludedEntities ()=default
 ExcludedEntities (const ExcludableEntitySet *root, std::vector< const ExcludableEntity * > initial_list)
 ~ExcludedEntities ()=default
void update (const ExcludableEntitySet *root, std::vector< const ExcludableEntity * > initial_list)
bool is_included (const ExcludableEntity *component) const
bool initialised () const

Private Member Functions

void fill (const ExcludableEntitySet &rs, std::vector< const ExcludableEntitySet * > &all_resource_sets, std::set< const ExcludableEntity * > &simple_resources, TestCircularDependency &cd_fuse)
void exclude (const ExcludableEntity &component)
void exclude_children (const ExcludableEntitySet &)
size_t size () noexcept

Private Attributes

std::set< std::string > m_excluded
bool m_initialised { false }

Friends

class Session
class ExcludableEntity

Detailed Description

Definition at line 15 of file ExcludedEntities.hpp.

Constructor & Destructor Documentation

◆ ExcludedEntities() [1/2]

dunedaq::confmodel::ExcludedEntities::ExcludedEntities ( )
default

◆ ExcludedEntities() [2/2]

ExcludedEntities::ExcludedEntities ( const ExcludableEntitySet * root,
std::vector< const ExcludableEntity * > initial_list )

Definition at line 18 of file ExcludedEntities.cpp.

19{
20 TLOG_DEBUG(2) << "construct the object from ExcludableEntity " << root->UID();
21 update(root, initial_list);
22}
const std::string & UID() const noexcept
void update(const ExcludableEntitySet *root, std::vector< const ExcludableEntity * > initial_list)
#define TLOG_DEBUG(lvl,...)
Definition Logging.hpp:116

◆ ~ExcludedEntities()

dunedaq::confmodel::ExcludedEntities::~ExcludedEntities ( )
default

Member Function Documentation

◆ exclude()

void dunedaq::confmodel::ExcludedEntities::exclude ( const ExcludableEntity & component)
inlineprivate

Definition at line 29 of file ExcludedEntities.hpp.

29{ m_excluded.insert(component.UID()); }

◆ exclude_children()

void ExcludedEntities::exclude_children ( const ExcludableEntitySet & rs)
private

Definition at line 106 of file ExcludedEntities.cpp.

107{
108 TLOG_DEBUG(6) << "Excluding children of " << rs.UID();
109 for (auto& res : rs.contained_excludable_entities()) {
110 TLOG_DEBUG(6) << "Excluding child " << res->UID();
111 exclude(*res);
112 if (const auto* rs2 = res->cast<ExcludableEntitySet>()) {
113 exclude_children(*rs2);
114 }
115 }
116}
virtual std::vector< const ExcludableEntity * > contained_excludable_entities() const =0
void exclude_children(const ExcludableEntitySet &)
void exclude(const ExcludableEntity &component)

◆ fill()

void ExcludedEntities::fill ( const ExcludableEntitySet & rs,
std::vector< const ExcludableEntitySet * > & all_resource_sets,
std::set< const ExcludableEntity * > & simple_resources,
TestCircularDependency & cd_fuse )
private

Definition at line 84 of file ExcludedEntities.cpp.

88{
89 TLOG_DEBUG(6) << "es.UID=" << es.UID() << ", class=" << es.class_name();
90 all_sets.push_back(&es);
91 auto rptr = &es;
92 if (rptr->cast<ExcludableEntity>() == nullptr) {
93 throw(MissingConstructor(ERS_HERE, "ExcludableEntity", es.full_name()));
94 }
95 for (auto& res : es.contained_excludable_entities()) {
96 AddTestOnCircularDependency add_fuse_test(cd_fuse, res);
97 if (const ExcludableEntitySet* es2 = res->cast<ExcludableEntitySet>()) {
98 fill(*es2, all_sets, simple_entities, cd_fuse);
99 } else {
100 simple_entities.insert(res);
101 }
102 }
103}
#define ERS_HERE
void fill(const ExcludableEntitySet &rs, std::vector< const ExcludableEntitySet * > &all_resource_sets, std::set< const ExcludableEntity * > &simple_resources, TestCircularDependency &cd_fuse)

◆ initialised()

bool dunedaq::confmodel::ExcludedEntities::initialised ( ) const
inlinenodiscard

Definition at line 45 of file ExcludedEntities.hpp.

◆ is_included()

bool dunedaq::confmodel::ExcludedEntities::is_included ( const ExcludableEntity * component) const
inline

Definition at line 43 of file ExcludedEntities.hpp.

43{ return !m_excluded.contains(component->UID()); }

◆ size()

size_t dunedaq::confmodel::ExcludedEntities::size ( )
inlineprivatenoexcept

Definition at line 33 of file ExcludedEntities.hpp.

33{ return m_excluded.size(); }

◆ update()

void ExcludedEntities::update ( const ExcludableEntitySet * root,
std::vector< const ExcludableEntity * > initial_list )

Definition at line 25 of file ExcludedEntities.cpp.

26{
27
28 m_excluded.clear();
29
30 m_initialised = true;
31
32 // get list of all root's entities-sets also test any
33 // circular dependencies between segments and entity sets
34 TestCircularDependency cd_fuse("component \'is-excluded\' status", root);
35 std::vector<const ExcludableEntitySet*> sets;
36 std::set<const ExcludableEntity*> simple_entities;
37 fill(*root, sets, simple_entities, cd_fuse);
38
39 for (auto& comp : initial_list) {
40 exclude(*comp);
41 TLOG_DEBUG(6) << comp->UID() << " is excluded in session";
42 if (const ExcludableEntitySet* rs = comp->cast<ExcludableEntitySet>()) {
44 }
45 }
46
47 for (unsigned long count = 1; true; ++count) {
48 const unsigned long num(size()); // Remember current size
49
50 TLOG_DEBUG(6) << "before auto-exclusion iteration " << count << " the number of excluded components is " << num;
51 for (const auto& set : sets) {
52 if (is_included(set)) {
53 if (set->compute_excluded_state(m_excluded)) {
54 TLOG_DEBUG(6) << "Exclude custom entity-set- " << set->UID() << " because children are excluded";
55 exclude(*set);
56 exclude_children(*set);
57 }
58 }
59 }
60
61 for (auto& en : simple_entities) {
62 if (is_included(en) && en->compute_excluded_state(m_excluded)) {
63 TLOG_DEBUG(6) << "Marking " << en->UID() << " as excluded\n";
64 exclude(*en);
65 }
66 }
67
68 if (size() == num) {
69 TLOG_DEBUG(6) << "after " << count
70 << " iteration(s) auto-exclusion algorithm found no newly excluded sets, exiting loop ...";
71 break;
72 }
73
74 unsigned int iLimit(1000);
75 if (count > iLimit) {
76 ers::error(ReadMaxAllowedIterations(ERS_HERE, iLimit));
77 break;
78 }
79 }
80}
bool is_included(const ExcludableEntity *component) const
std::unordered_set< std::string > set
Definition set.hpp:16
void error(const Issue &issue)
Definition ers.hpp:101

◆ ExcludableEntity

friend class ExcludableEntity
friend

Definition at line 19 of file ExcludedEntities.hpp.

◆ Session

friend class Session
friend

Definition at line 18 of file ExcludedEntities.hpp.

Member Data Documentation

◆ m_excluded

std::set<std::string> dunedaq::confmodel::ExcludedEntities::m_excluded
private

Definition at line 22 of file ExcludedEntities.hpp.

◆ m_initialised

bool dunedaq::confmodel::ExcludedEntities::m_initialised { false }
private

Definition at line 23 of file ExcludedEntities.hpp.


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