C++ Device API Reference Manual
Reference documentation for the Simics C++ Device API.
 
Loading...
Searching...
No Matches
I_pattern_rule.h
Go to the documentation of this file.
1/*
2 © 2023 Intel Corporation
3
4 This software and the related documents are Intel copyrighted materials, and
5 your use of them is governed by the express license under which they were
6 provided to you ("License"). Unless the License provides otherwise, you may
7 not use, modify, copy, publish, distribute, disclose or transmit this software
8 or the related documents without Intel's prior written permission.
9
10 This software and the related documents are provided as is, with no express or
11 implied warranties, other than those that are expressly stated in the License.
12*/
13
14// -*- C++ -*-
15
16#ifndef CPP_API_EXTENSIONS_SRC_SME_PATTERN_RULES_I_PATTERN_RULE_H
17#define CPP_API_EXTENSIONS_SRC_SME_PATTERN_RULES_I_PATTERN_RULE_H
18
19#include <cstdint>
20#include <functional>
22
23namespace sme
24{
25class pattern_rule_container;
26
32{
33protected:
39
40public:
45
50 virtual ~I_pattern_rule() {;}
51
58 virtual void process_rule( std::uint64_t _old_value, std::uint64_t & _new_value) = 0;
59
65 virtual void action( std::function<void()> _action) = 0;
66 virtual void action( std::function<void(uint64_t , uint64_t )> _action) = 0;
67
74
80 virtual _always_inline bool is_bound() = 0;
81
83};
84
86{
87protected:
88 std::function<void()> m_lambda;
89public:
92 virtual void action( std::function<void()> _action) {
93 m_lambda = _action;
94 m_is_active = true;
95 }
96 virtual void action( std::function<void(uint64_t , uint64_t )> _action) {
97 m_is_active = false;
98 }
99 virtual _always_inline bool is_bound() { return( m_lambda != nullptr); }
100};
101
103{
104protected:
105 std::function<void( uint64_t _old, uint64_t _new)> m_lambda;
106public:
109 virtual void action( std::function<void()> _action) {
110 m_is_active = false;
111 }
112 virtual void action( std::function<void(uint64_t , uint64_t )> _action) {
113 m_lambda = _action;
114 m_is_active = true;
115 }
116 virtual _always_inline bool is_bound() { return( m_lambda != nullptr); }
117};
118
119}
120
121#endif /* I_PATTERN_RULE_H */
#define _always_inline
Definition: _inline.h:30
Definition: I_pattern_rule.h:86
virtual void action(std::function< void(uint64_t, uint64_t)> _action)
Definition: I_pattern_rule.h:96
virtual void action(std::function< void()> _action)
Binds a void(void) lambda as the callback action to this rule.
Definition: I_pattern_rule.h:92
std::function< void()> m_lambda
Definition: I_pattern_rule.h:88
virtual _always_inline bool is_bound()
has the lambda callback been bound.
Definition: I_pattern_rule.h:99
virtual ~I_no_params_pattern_rule()
Definition: I_pattern_rule.h:91
I_no_params_pattern_rule()
Definition: I_pattern_rule.h:90
Definition: I_pattern_rule.h:103
virtual _always_inline bool is_bound()
has the lambda callback been bound.
Definition: I_pattern_rule.h:116
virtual void action(std::function< void(uint64_t, uint64_t)> _action)
Definition: I_pattern_rule.h:112
virtual void action(std::function< void()> _action)
Binds a void(void) lambda as the callback action to this rule.
Definition: I_pattern_rule.h:109
virtual ~I_params_pattern_rule()
Definition: I_pattern_rule.h:108
std::function< void(uint64_t _old, uint64_t _new)> m_lambda
Definition: I_pattern_rule.h:105
I_params_pattern_rule()
Definition: I_pattern_rule.h:107
Interface and base class for all notification rule types.
Definition: I_pattern_rule.h:32
bool m_is_active
stores is active
Definition: I_pattern_rule.h:38
_always_inline bool is_active()
reports if rule is active for processing.
Definition: I_pattern_rule.h:73
virtual void process_rule(std::uint64_t _old_value, std::uint64_t &_new_value)=0
process rule evaluation between old and new values.
virtual _always_inline bool is_bound()=0
has the lambda callback been bound.
I_pattern_rule()
Interface parent constructor for a new i pattern rule object.
Definition: I_pattern_rule.h:44
virtual void action(std::function< void()> _action)=0
Binds a void(void) lambda as the callback action to this rule.
virtual ~I_pattern_rule()
Destroy the i pattern rule object.
Definition: I_pattern_rule.h:50
virtual void action(std::function< void(uint64_t, uint64_t)> _action)=0
tracks all rules of a single type for a particular target.
Definition: pattern_rule_container.h:38
Definition: expression_vector.h:25