ATLAS Offline Software
Loading...
Searching...
No Matches
Logic.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef TRIGCONFDATA_LOGIC_H
6#define TRIGCONFDATA_LOGIC_H
7
8#include <string>
9#include <vector>
10#include <map>
11#include <iostream>
12#include <memory>
13
14namespace TrigConf {
15
17 public:
19 LogicParsingException(const std::string & error) : m_error(error)
20 {}
21 const std::string & msg() const { return m_error; }
22 private:
23 std::string m_error{};
24 };
25
31 class Logic {
32 public:
33 enum NodeType { LEAF, AND, OR };
34 Logic() = delete;
35 virtual ~Logic() = default;
36
37 NodeType nodeType() const { return m_nodeType; }
38
39 void setNegate(bool negate = true);
40 bool negate() const;
41
42 void setExpression(const std::string &);
43 const std::string & expression() const;
44
45 virtual bool evaluate(const std::map<std::string,bool> & elementsState) const = 0;
46 virtual bool evaluate(const std::map<std::string, unsigned int> & elementsCount) const = 0;
47
48 virtual std::map<std::string, bool> elements() const = 0;
49 virtual std::map<std::string, unsigned int> elementsCount() const = 0;
50
51 void print(std::ostream & = std::cout) const;
52
53 virtual void print(std::ostream &, size_t indSize, size_t indLevel) const = 0;
54
55 protected:
57
58 private:
60 bool m_negate { false };
61 std::string m_expression{ "" };
62 };
63
64
65 class LogicLeaf : public Logic {
66 public:
67 LogicLeaf() = delete;
68 LogicLeaf(const std::string & content);
69 virtual ~LogicLeaf() override = default;
70
71 void setContent(const std::string & content);
72
73 bool evaluate(const std::map<std::string,bool> & elements) const override;
74 bool evaluate(const std::map<std::string, unsigned int> & elementsCount) const override;
75
76 std::map<std::string, bool> elements() const override;
77 std::map<std::string, unsigned int> elementsCount() const override;
78
79 private:
80 virtual void print(std::ostream &, size_t indSize, size_t indLevel) const override;
81 std::string m_content { "" };
82 std::string m_name { "" };
83 unsigned int m_count { 1 };
84 };
85
86
87 class LogicOPS : public Logic {
88 public:
90 LogicOPS(NodeType nodeType, std::unique_ptr<Logic>&& left);
91 virtual ~LogicOPS() override = default;
92 void addSubLogic(std::unique_ptr<Logic>&& right);
93 const std::vector<std::unique_ptr<Logic>> & subLogics() const;
94 std::vector<std::unique_ptr<Logic>> takeSubLogics();
95 private:
96 virtual void print(std::ostream &, size_t indSize, size_t indLevel) const override;
97 std::vector<std::unique_ptr<Logic>> m_subs;
98 };
99
100
101 class LogicAND : public LogicOPS {
102 public:
103 LogicAND();
104 LogicAND(std::unique_ptr<Logic>&& left);
105 virtual ~LogicAND() override = default;
106 bool evaluate(const std::map<std::string, bool> & elementsState) const override;
107 bool evaluate(const std::map<std::string, unsigned int> & elementsCount) const override;
108 std::map<std::string, bool> elements() const override;
109 std::map<std::string, unsigned int> elementsCount() const override;
110 };
111
112
113 class LogicOR : public LogicOPS {
114 public:
115 LogicOR();
116 LogicOR(std::unique_ptr<Logic>&& left);
117 virtual ~LogicOR() override = default;
118 bool evaluate(const std::map<std::string,bool> & elementsState) const override;
119 bool evaluate(const std::map<std::string,unsigned int> & elementsCount) const override;
120 std::map<std::string, bool> elements() const override;
121 std::map<std::string, unsigned int> elementsCount() const override;
122 };
123
124}
125
126#endif
std::map< std::string, bool > elements() const override
Definition Logic.cxx:174
bool evaluate(const std::map< std::string, bool > &elementsState) const override
Definition Logic.cxx:154
virtual ~LogicAND() override=default
std::map< std::string, unsigned int > elementsCount() const override
Definition Logic.cxx:185
bool evaluate(const std::map< std::string, bool > &elements) const override
Definition Logic.cxx:64
std::string m_name
Definition Logic.h:82
std::map< std::string, unsigned int > elementsCount() const override
Definition Logic.cxx:90
virtual void print(std::ostream &, size_t indSize, size_t indLevel) const override
Definition Logic.cxx:96
std::map< std::string, bool > elements() const override
Definition Logic.cxx:84
void setContent(const std::string &content)
Definition Logic.cxx:54
std::string m_content
Definition Logic.h:81
virtual ~LogicLeaf() override=default
unsigned int m_count
Definition Logic.h:83
void addSubLogic(std::unique_ptr< Logic > &&right)
Definition Logic.cxx:114
LogicOPS(NodeType nodeType)
Definition Logic.cxx:103
std::vector< std::unique_ptr< Logic > > takeSubLogics()
Definition Logic.cxx:125
virtual void print(std::ostream &, size_t indSize, size_t indLevel) const override
Definition Logic.cxx:132
std::vector< std::unique_ptr< Logic > > m_subs
Definition Logic.h:97
virtual ~LogicOPS() override=default
const std::vector< std::unique_ptr< Logic > > & subLogics() const
Definition Logic.cxx:120
std::map< std::string, bool > elements() const override
Definition Logic.cxx:224
std::map< std::string, unsigned int > elementsCount() const override
Definition Logic.cxx:235
bool evaluate(const std::map< std::string, bool > &elementsState) const override
Definition Logic.cxx:204
virtual ~LogicOR() override=default
LogicParsingException(const std::string &error)
Definition Logic.h:19
const std::string & msg() const
Definition Logic.h:21
NodeType nodeType() const
Definition Logic.h:37
std::string m_expression
Definition Logic.h:61
void setNegate(bool negate=true)
Definition Logic.cxx:17
bool negate() const
Definition Logic.cxx:22
virtual void print(std::ostream &, size_t indSize, size_t indLevel) const =0
virtual std::map< std::string, bool > elements() const =0
virtual bool evaluate(const std::map< std::string, unsigned int > &elementsCount) const =0
void setExpression(const std::string &)
Definition Logic.cxx:27
NodeType m_nodeType
Definition Logic.h:59
const std::string & expression() const
Definition Logic.cxx:32
void print(std::ostream &=std::cout) const
Definition Logic.cxx:37
virtual bool evaluate(const std::map< std::string, bool > &elementsState) const =0
virtual ~Logic()=default
bool m_negate
Definition Logic.h:60
virtual std::map< std::string, unsigned int > elementsCount() const =0
Forward iterator to traverse the main components of the trigger configuration.
Definition Config.h:22