5#ifndef TrigConf_LogicExpression
6#define TrigConf_LogicExpression
25 typedef std::vector<std::shared_ptr<LogicExpression>>
LogicV_t;
32 static const char kAND =
'&';
33 static const char kOR =
'|';
34 static const char kNOT =
'!';
51 virtual int parse(
const std::string& expr,
bool enclosed=
false);
52 virtual std::string
logicRep()
const;
57 m_SubLogics.emplace_back(std::make_shared<LogicExpression>(sub));
73 void printError(
const std::string& message,
int i);
75 void print(
const std::string& indent=
"");
LogicExpression(std::ostream &o=std::cout)
constructor
std::ostream & m_ostream
output stream for all messages
static const char kAND
AND of sub-logics.
static const char kOPEN
empty logic but may have sub-logics.
const std::string & element() const
bool isPlaceHolder() const
virtual std::string logicRep() const
static const char kNOT
NOT of a sub-logic. (only one sub-logic)
void addSubLogic(const LogicExpression &sub)
static const char kCLOSE
')' is a valid symbol, but not allowed as a state.
static const char kELEMENT
simple element.
static bool isValidElementChar(char c)
const LogicV_t & subLogics() const
void setElement(const std::string &e)
int totalNumberOfElements() const
virtual ~LogicExpression()=default
destructor
static const char kOR
OR of sub-logics.
const std::shared_ptr< LogicExpression > subLogic(int i) const
static std::string extractElementName(const std::string &expr)
void print(const std::string &indent="")
virtual int parse(const std::string &expr, bool enclosed=false)
Forward iterator to traverse the main components of the trigger configuration.
std::vector< std::shared_ptr< LogicExpression > > LogicV_t