helics  3.5.2
FilterOperations.hpp
Go to the documentation of this file.
1 /*
2 Copyright (c) 2017-2024,
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  virtual std::shared_ptr<FilterOperator> getOperator() = 0;
55 };
56 
59  private:
60  std::atomic<Time> delay{timeZero};
61  std::shared_ptr<MessageTimeOperator> td;
62 
63  public:
64  explicit DelayFilterOperation(Time delayTime = timeZero);
65  virtual void set(std::string_view property, double val) override;
66  virtual void setString(std::string_view property, std::string_view val) override;
67  virtual std::shared_ptr<FilterOperator> getOperator() override;
68 };
69 
70 class RandomDelayGenerator;
71 
74  private:
75  std::shared_ptr<MessageTimeOperator> td;
76  std::unique_ptr<RandomDelayGenerator> rdelayGen;
77 
78  public:
81  // the destructor is defined mainly to prevent the need to define the RandomDelayGenerator
82  // object here
85  virtual void set(std::string_view property, double val) override;
86  virtual void setString(std::string_view property, std::string_view val) override;
87  virtual std::shared_ptr<FilterOperator> getOperator() override;
88 };
89 
92  private:
93  std::atomic<double> dropProb{0.0};
94  std::shared_ptr<MessageConditionalOperator> tcond;
95 
96  public:
99  virtual void set(std::string_view property, double val) override;
100  virtual void setString(std::string_view property, std::string_view val) override;
101  virtual std::shared_ptr<FilterOperator> getOperator() override;
102 };
103 
106  private:
107  std::shared_ptr<MessageDestOperator> op;
108  atomic_guarded<std::string> newDest;
110  conditions;
111 
112  public:
115  virtual void set(std::string_view property, double val) override;
116  virtual void setString(std::string_view property, std::string_view val) override;
117  virtual std::shared_ptr<FilterOperator> getOperator() override;
118 
119  private:
121  std::string rerouteOperation(const std::string& src, const std::string& dest) const;
122 };
123 
126  private:
127  std::shared_ptr<FirewallOperator> op;
129  gmlc::libguarded::cow_guarded<std::vector<std::string>> allowed;
131  gmlc::libguarded::cow_guarded<std::vector<std::string>> blocked;
132 
133  public:
136  virtual void set(std::string_view property, double val) override;
137  virtual void setString(std::string_view property, std::string_view val) override;
138  virtual std::shared_ptr<FilterOperator> getOperator() override;
139 
140  private:
142  bool allowPassed(const Message* mess) const;
143 };
144 
147  private:
148  std::shared_ptr<CloneOperator> op;
150  shared_guarded<std::vector<std::string>> deliveryAddresses;
151 
152  public:
153  explicit CloneFilterOperation();
154 
156  virtual void set(std::string_view property, double val) override;
157  virtual void setString(std::string_view property, std::string_view val) override;
158  virtual std::shared_ptr<FilterOperator> getOperator() override;
159 
160  private:
163  std::vector<std::unique_ptr<Message>> sendMessage(const Message* mess) const;
164 };
165 
166 } // namespace helics
Definition: application_api/Federate.hpp:27
Definition: FilterOperations.hpp:146
virtual void setString(std::string_view property, std::string_view val) override
Definition: FilterOperations.cpp:352
virtual void set(std::string_view property, double val) override
Definition: FilterOperations.cpp:346
Definition: FilterOperations.hpp:58
virtual void set(std::string_view property, double val) override
Definition: FilterOperations.cpp:36
virtual void setString(std::string_view property, std::string_view val) override
Definition: FilterOperations.cpp:45
Definition: FilterOperations.hpp:34
virtual void setString(std::string_view property, std::string_view val)
Definition: FilterOperations.cpp:25
virtual void set(std::string_view property, double val)
Definition: FilterOperations.cpp:24
Definition: FilterOperations.hpp:125
virtual void setString(std::string_view property, std::string_view val) override
Definition: FilterOperations.cpp:325
virtual void set(std::string_view property, double val) override
Definition: FilterOperations.cpp:323
Definition: core-data.hpp:29
Definition: FilterOperations.hpp:73
virtual void set(std::string_view property, double val) override
Definition: FilterOperations.cpp:193
RandomDelayFilterOperation()
Definition: FilterOperations.cpp:185
virtual void setString(std::string_view property, std::string_view val) override
Definition: FilterOperations.cpp:203
Definition: FilterOperations.hpp:91
virtual void setString(std::string_view property, std::string_view val) override
Definition: FilterOperations.cpp:240
virtual void set(std::string_view property, double val) override
Definition: FilterOperations.cpp:234
Definition: FilterOperations.hpp:105
virtual void set(std::string_view property, double val) override
Definition: FilterOperations.cpp:259
virtual void setString(std::string_view property, std::string_view val) override
Definition: FilterOperations.cpp:261
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