helics  3.6.1
FilterOperations.hpp
Go to the documentation of this file.
1 /*
2 Copyright (c) 2017-2025,
3 Battelle Memorial Institute; Lawrence Livermore National Security, LLC; Alliance for Sustainable
4 Energy, LLC. See the top-level NOTICE for additional details. All rights reserved.
5 SPDX-License-Identifier: BSD-3-Clause
6 */
7 #pragma once
8 
13 #include "../common/GuardedTypes.hpp"
14 #include "../core/helicsTime.hpp"
15 #include "gmlc/libguarded/cow_guarded.hpp"
16 
17 #include <atomic>
18 #include <memory>
19 #include <set>
20 #include <string>
21 #include <string_view>
22 #include <vector>
23 
24 namespace helics {
25 class Core;
26 class FilterOperator;
27 class MessageTimeOperator;
28 class Message;
29 class MessageConditionalOperator;
30 class MessageDestOperator;
31 class CloneOperator;
32 class FirewallOperator;
35  public:
36  FilterOperations() = default;
37  virtual ~FilterOperations() = default;
38  // still figuring out if these functions have a use or not
39  FilterOperations(const FilterOperations& fo) = delete;
40  FilterOperations(FilterOperations&& fo) = delete;
41  FilterOperations& operator=(const FilterOperations& fo) = delete;
42  FilterOperations& operator=(FilterOperations&& fo) = delete;
43 
48  virtual void set(std::string_view property, double val);
53  virtual void setString(std::string_view property, std::string_view val);
54 
58  virtual double getProperty(std::string_view property);
62  virtual std::string getString(std::string_view property);
63 
65  virtual std::shared_ptr<FilterOperator> getOperator() = 0;
66 };
67 
70  private:
71  std::atomic<Time> delay{timeZero};
72  std::shared_ptr<MessageTimeOperator> td;
73 
74  public:
75  explicit DelayFilterOperation(Time delayTime = timeZero);
76  virtual void set(std::string_view property, double val) override;
77  virtual void setString(std::string_view property, std::string_view val) override;
78  virtual double getProperty(std::string_view property) override;
79  virtual std::string getString(std::string_view property) override;
80  virtual std::shared_ptr<FilterOperator> getOperator() override;
81 };
82 
83 class RandomDelayGenerator;
84 
87  private:
88  std::shared_ptr<MessageTimeOperator> td;
89  std::unique_ptr<RandomDelayGenerator> rdelayGen;
90 
91  public:
94  // the destructor is defined mainly to prevent the need to define the RandomDelayGenerator
95  // object here
98  virtual void set(std::string_view property, double val) override;
99  virtual void setString(std::string_view property, std::string_view val) override;
100  virtual double getProperty(std::string_view property) override;
101  virtual std::string getString(std::string_view property) override;
102  virtual std::shared_ptr<FilterOperator> getOperator() override;
103 };
104 
107  private:
108  std::atomic<double> dropProb{0.0};
109  std::shared_ptr<MessageConditionalOperator> tcond;
110 
111  public:
114  virtual void set(std::string_view property, double val) override;
115  virtual void setString(std::string_view property, std::string_view val) override;
116  virtual double getProperty(std::string_view property) override;
117  virtual std::string getString(std::string_view property) override;
118  virtual std::shared_ptr<FilterOperator> getOperator() override;
119 };
120 
123  private:
124  std::shared_ptr<MessageDestOperator> op;
125  atomic_guarded<std::string> newDest;
127  conditions;
128 
129  public:
132  virtual void set(std::string_view property, double val) override;
133  virtual void setString(std::string_view property, std::string_view val) override;
134  virtual double getProperty(std::string_view property) override;
135  virtual std::string getString(std::string_view property) override;
136  virtual std::shared_ptr<FilterOperator> getOperator() override;
137 
138  private:
140  std::string rerouteOperation(const std::string& src, const std::string& dest) const;
141 };
142 
145  private:
146  std::shared_ptr<FirewallOperator> op;
148  gmlc::libguarded::cow_guarded<std::vector<std::string>> allowed;
150  gmlc::libguarded::cow_guarded<std::vector<std::string>> blocked;
151 
152  public:
155  virtual void set(std::string_view property, double val) override;
156  virtual void setString(std::string_view property, std::string_view val) override;
157  virtual double getProperty(std::string_view property) override;
158  virtual std::string getString(std::string_view property) override;
159  virtual std::shared_ptr<FilterOperator> getOperator() override;
160 
161  private:
163  bool allowPassed(const Message* mess) const;
164 };
165 
168  private:
169  std::shared_ptr<CloneOperator> op;
171  shared_guarded<std::vector<std::string>> deliveryAddresses;
172 
173  public:
174  explicit CloneFilterOperation();
175 
177  virtual void set(std::string_view property, double val) override;
178  virtual void setString(std::string_view property, std::string_view val) override;
179  virtual double getProperty(std::string_view property) override;
180  virtual std::string getString(std::string_view property) override;
181  virtual std::shared_ptr<FilterOperator> getOperator() override;
182 
183  private:
186  std::vector<std::unique_ptr<Message>> sendMessage(const Message* mess) const;
187 };
188 
189 } // namespace helics
Definition: application_api/Federate.hpp:27
Definition: FilterOperations.hpp:167
virtual std::string getString(std::string_view property) override
Definition: FilterOperations.cpp:506
virtual void setString(std::string_view property, std::string_view val) override
Definition: FilterOperations.cpp:473
virtual void set(std::string_view property, double val) override
Definition: FilterOperations.cpp:467
virtual double getProperty(std::string_view property) override
Definition: FilterOperations.cpp:501
virtual std::shared_ptr< FilterOperator > getOperator() override
Definition: FilterOperations.cpp:530
Definition: FilterOperations.hpp:69
virtual double getProperty(std::string_view property) override
Definition: FilterOperations.cpp:69
virtual std::string getString(std::string_view property) override
Definition: FilterOperations.cpp:77
virtual std::shared_ptr< FilterOperator > getOperator() override
Definition: FilterOperations.cpp:85
virtual void set(std::string_view property, double val) override
Definition: FilterOperations.cpp:48
virtual void setString(std::string_view property, std::string_view val) override
Definition: FilterOperations.cpp:57
Definition: FilterOperations.hpp:34
virtual void setString(std::string_view property, std::string_view val)
Definition: FilterOperations.cpp:28
virtual void set(std::string_view property, double val)
Definition: FilterOperations.cpp:27
virtual std::shared_ptr< FilterOperator > getOperator()=0
virtual std::string getString(std::string_view property)
Definition: FilterOperations.cpp:34
virtual double getProperty(std::string_view property)
Definition: FilterOperations.cpp:30
Definition: FilterOperations.hpp:144
virtual void setString(std::string_view property, std::string_view val) override
Definition: FilterOperations.cpp:436
virtual std::string getString(std::string_view property) override
Definition: FilterOperations.cpp:443
virtual double getProperty(std::string_view property) override
Definition: FilterOperations.cpp:438
virtual void set(std::string_view property, double val) override
Definition: FilterOperations.cpp:434
virtual std::shared_ptr< FilterOperator > getOperator() override
Definition: FilterOperations.cpp:448
Definition: core-data.hpp:29
Definition: FilterOperations.hpp:86
virtual void set(std::string_view property, double val) override
Definition: FilterOperations.cpp:224
virtual std::shared_ptr< FilterOperator > getOperator() override
Definition: FilterOperations.cpp:284
RandomDelayFilterOperation()
Definition: FilterOperations.cpp:216
virtual void setString(std::string_view property, std::string_view val) override
Definition: FilterOperations.cpp:234
virtual double getProperty(std::string_view property) override
Definition: FilterOperations.cpp:252
virtual std::string getString(std::string_view property) override
Definition: FilterOperations.cpp:265
Definition: FilterOperations.hpp:106
virtual void setString(std::string_view property, std::string_view val) override
Definition: FilterOperations.cpp:303
virtual std::string getString(std::string_view property) override
Definition: FilterOperations.cpp:315
virtual double getProperty(std::string_view property) override
Definition: FilterOperations.cpp:307
virtual void set(std::string_view property, double val) override
Definition: FilterOperations.cpp:297
virtual std::shared_ptr< FilterOperator > getOperator() override
Definition: FilterOperations.cpp:323
Definition: FilterOperations.hpp:122
virtual double getProperty(std::string_view property) override
Definition: FilterOperations.cpp:360
virtual std::string getString(std::string_view property) override
Definition: FilterOperations.cpp:365
virtual std::shared_ptr< FilterOperator > getOperator() override
Definition: FilterOperations.cpp:392
virtual void set(std::string_view property, double val) override
Definition: FilterOperations.cpp:338
virtual void setString(std::string_view property, std::string_view val) override
Definition: FilterOperations.cpp:340
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
constexpr Time timeZero
Definition: helicsTime.hpp:31
TimeRepresentation< count_time< 9 > > Time
Definition: helicsTime.hpp:27