helics 3.7.0
Loading...
Searching...
No Matches
MessageOperators.hpp
Go to the documentation of this file.
1/*
2Copyright (c) 2017-2026,
3Battelle Memorial Institute; Lawrence Livermore National Security, LLC; Alliance for Energy
4Innovation LLC. See the top-level NOTICE for additional details. All rights reserved.
5SPDX-License-Identifier: BSD-3-Clause
6*/
7#pragma once
8
9#include "../core/core-data.hpp"
10#include "data_view.hpp"
11#include "helics_cxx_export.h"
12
13#include <atomic>
14#include <functional>
15#include <memory>
16#include <string>
17#include <vector>
22namespace helics {
24class HELICS_CXX_EXPORT MessageTimeOperator: public FilterOperator {
25 public:
29 explicit MessageTimeOperator(std::function<Time(Time)> userTimeFunction);
31 void setTimeFunction(std::function<Time(Time)> userTimeFunction);
32
33 private:
34 std::function<Time(Time)> TimeFunction;
35 virtual std::unique_ptr<Message> process(std::unique_ptr<Message> message) override;
36};
37
39class HELICS_CXX_EXPORT MessageDestOperator: public FilterOperator {
40 public:
44 explicit MessageDestOperator(
45 std::function<std::string(const std::string&, const std::string&)> userDestFunction);
47 void setDestFunction(
48 std::function<std::string(const std::string&, const std::string&)> userDestFunction);
49 virtual bool isMessageGenerating() const override { return true; }
50
51 private:
52 std::function<std::string(const std::string&, const std::string&)>
53 DestUpdateFunction;
54 virtual std::unique_ptr<Message> process(std::unique_ptr<Message> message) override;
55};
56
58class HELICS_CXX_EXPORT MessageDataOperator: public FilterOperator {
59 public:
63 explicit MessageDataOperator(std::function<void(SmallBuffer&)> userDataFunction);
65 void setDataFunction(std::function<void(SmallBuffer&)> userDataFunction);
66
67 private:
68 std::function<void(SmallBuffer&)> dataFunction;
69 virtual std::unique_ptr<Message> process(std::unique_ptr<Message> message) override;
70};
71
76class HELICS_CXX_EXPORT MessageConditionalOperator: public FilterOperator {
77 public:
82 std::function<bool(const Message*)> userConditionalFunction);
84 void setConditionFunction(std::function<bool(const Message*)> userConditionFunction);
85
86 private:
87 std::function<bool(const Message*)>
88 evalFunction;
89 virtual std::unique_ptr<Message> process(std::unique_ptr<Message> message) override;
90};
91
96class HELICS_CXX_EXPORT CloneOperator: public FilterOperator {
97 public:
99 CloneOperator() = default;
101 explicit CloneOperator(
102 std::function<std::vector<std::unique_ptr<Message>>(const Message*)> userCloneFunction);
104 void setCloneFunction(
105 std::function<std::vector<std::unique_ptr<Message>>(const Message*)> userCloneFunction);
106 virtual bool isMessageGenerating() const override { return true; }
107
108 private:
109 std::function<std::vector<std::unique_ptr<Message>>(const Message*)>
110 evalFunction;
111 virtual std::unique_ptr<Message> process(std::unique_ptr<Message> message) override;
112 virtual std::vector<std::unique_ptr<Message>>
113 processVector(std::unique_ptr<Message> message) override;
114};
115
120class HELICS_CXX_EXPORT FirewallOperator: public FilterOperator {
121 public:
123 enum class operations : int {
124 none = -1,
125 drop = 0,
126 pass = 1,
127 set_flag1 = 2,
128 set_flag2 = 3,
129 set_flag3 = 4
130 };
132 FirewallOperator() = default;
134 explicit FirewallOperator(std::function<bool(const Message*)> userCheckFunction);
136 void setCheckFunction(std::function<bool(const Message*)> userCheckFunction);
138 void setOperation(operations newop) { operation.store(newop); }
139
140 private:
141 std::function<bool(const Message*)>
142 checkFunction;
143 std::atomic<operations> operation{
144 operations::drop};
145 virtual std::unique_ptr<Message> process(std::unique_ptr<Message> message) override;
146};
147
149class HELICS_CXX_EXPORT CustomMessageOperator: public FilterOperator {
150 public:
154 explicit CustomMessageOperator(
155 std::function<std::unique_ptr<Message>(std::unique_ptr<Message>)> userMessageFunction);
157 void setMessageFunction(
158 std::function<std::unique_ptr<Message>(std::unique_ptr<Message>)> userMessageFunction);
159
160 private:
161 std::function<std::unique_ptr<Message>(std::unique_ptr<Message>)>
162 messageFunction;
163 virtual std::unique_ptr<Message> process(std::unique_ptr<Message> message) override;
164};
165} // namespace helics
Definition MessageOperators.hpp:96
virtual bool isMessageGenerating() const override
Definition MessageOperators.hpp:106
Definition MessageOperators.hpp:149
Definition core-data.hpp:85
Definition MessageOperators.hpp:120
operations
Definition MessageOperators.hpp:123
void setOperation(operations newop)
Definition MessageOperators.hpp:138
Definition MessageOperators.hpp:76
Definition MessageOperators.hpp:58
Definition MessageOperators.hpp:39
virtual bool isMessageGenerating() const override
Definition MessageOperators.hpp:49
Definition MessageOperators.hpp:24
Definition core-data.hpp:29
Definition SmallBuffer.hpp:25
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition AsyncFedCallInfo.hpp:14
TimeRepresentation< count_time< 9 > > Time
Definition helicsTime.hpp:27