helics  3.0.1
FilterOperations.hpp
Go to the documentation of this file.
1 /*
2 Copyright (c) 2017-2021,
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 <vector>
22 
23 namespace helics {
24 class Core;
25 class FilterOperator;
26 class MessageTimeOperator;
27 class Message;
28 class MessageConditionalOperator;
29 class MessageDestOperator;
30 class CloneOperator;
31 class FirewallOperator;
34  public:
35  FilterOperations() = default;
36  virtual ~FilterOperations() = default;
37  // still figuring out if these functions have a use or not
38  FilterOperations(const FilterOperations& fo) = delete;
39  FilterOperations(FilterOperations&& fo) = delete;
40  FilterOperations& operator=(const FilterOperations& fo) = delete;
41  FilterOperations& operator=(FilterOperations&& fo) = delete;
42 
47  virtual void set(const std::string& property, double val);
52  virtual void setString(const std::string& property, const std::string& val);
53  virtual std::shared_ptr<FilterOperator> getOperator() = 0;
54 };
55 
58  private:
59  std::atomic<Time> delay{timeZero};
60  std::shared_ptr<MessageTimeOperator> td;
61 
62  public:
63  explicit DelayFilterOperation(Time delayTime = timeZero);
64  virtual void set(const std::string& property, double val) override;
65  virtual void setString(const std::string& property, const std::string& val) override;
66  virtual std::shared_ptr<FilterOperator> getOperator() override;
67 };
68 
69 class randomDelayGenerator;
70 
73  private:
74  std::shared_ptr<MessageTimeOperator> td;
75  std::unique_ptr<randomDelayGenerator> rdelayGen;
76 
77  public:
80  // the destructor is defined mainly to prevent the need to define the randomDelayGenerator
81  // object here
84  virtual void set(const std::string& property, double val) override;
85  virtual void setString(const std::string& property, const std::string& val) override;
86  virtual std::shared_ptr<FilterOperator> getOperator() override;
87 };
88 
91  private:
92  std::atomic<double> dropProb{0.0};
93  std::shared_ptr<MessageConditionalOperator> tcond;
94 
95  public:
98  virtual void set(const std::string& property, double val) override;
99  virtual void setString(const std::string& property, const std::string& val) override;
100  virtual std::shared_ptr<FilterOperator> getOperator() override;
101 };
102 
105  private:
106  std::shared_ptr<MessageDestOperator> op;
107  atomic_guarded<std::string> newDest;
109  conditions;
110 
111  public:
114  virtual void set(const std::string& property, double val) override;
115  virtual void setString(const std::string& property, const std::string& val) override;
116  virtual std::shared_ptr<FilterOperator> getOperator() override;
117 
118  private:
120  std::string rerouteOperation(const std::string& src, const std::string& dest) const;
121 };
122 
125  private:
126  std::shared_ptr<FirewallOperator> op;
127  gmlc::libguarded::cow_guarded<std::vector<std::string>>
128  allowed;
129  gmlc::libguarded::cow_guarded<std::vector<std::string>>
130  blocked;
131  public:
134  virtual void set(const std::string& property, double val) override;
135  virtual void setString(const std::string& property, const std::string& val) override;
136  virtual std::shared_ptr<FilterOperator> getOperator() override;
137 
138  private:
140  bool allowPassed(const Message* mess) const;
141 };
142 
145  private:
146  std::shared_ptr<CloneOperator> op;
148  deliveryAddresses;
149 
150  public:
151  explicit CloneFilterOperation();
152 
154  virtual void set(const std::string& property, double val) override;
155  virtual void setString(const std::string& property, const std::string& val) override;
156  virtual std::shared_ptr<FilterOperator> getOperator() override;
157 
158  private:
161  std::vector<std::unique_ptr<Message>> sendMessage(const Message* mess) const;
162 };
163 
164 } // namespace helics
helics::timeZero
constexpr Time timeZero
Definition: helicsTime.hpp:31
helics::FilterOperations
Definition: FilterOperations.hpp:33
helics::RandomDropFilterOperation::setString
virtual void setString(const std::string &property, const std::string &val) override
Definition: FilterOperations.cpp:265
helics::CloneFilterOperation::set
virtual void set(const std::string &property, double val) override
Definition: FilterOperations.cpp:374
helics::MessageTimeOperator
Definition: MessageOperators.hpp:24
helics::Time
TimeRepresentation< count_time< 9 > > Time
Definition: helicsTime.hpp:27
helics::DelayFilterOperation::setString
virtual void setString(const std::string &property, const std::string &val) override
Definition: FilterOperations.cpp:45
helics::RandomDelayFilterOperation::RandomDelayFilterOperation
RandomDelayFilterOperation()
Definition: FilterOperations.cpp:210
FilterOperations.hpp
helics::FirewallFilterOperation::set
virtual void set(const std::string &property, double val) override
Definition: FilterOperations.cpp:351
helics::RerouteFilterOperation::setString
virtual void setString(const std::string &property, const std::string &val) override
Definition: FilterOperations.cpp:287
helics::RandomDelayFilterOperation::~RandomDelayFilterOperation
~RandomDelayFilterOperation()
helics::RandomDelayFilterOperation::setString
virtual void setString(const std::string &property, const std::string &val) override
Definition: FilterOperations.cpp:228
helics::FirewallFilterOperation::setString
virtual void setString(const std::string &property, const std::string &val) override
Definition: FilterOperations.cpp:353
helics::InvalidParameter
Definition: core-exceptions.hpp:47
helics::CloneFilterOperation
Definition: FilterOperations.hpp:144
helics::RandomDropFilterOperation
Definition: FilterOperations.hpp:90
helics::RandomDelayFilterOperation
Definition: FilterOperations.hpp:72
helics::RerouteFilterOperation::set
virtual void set(const std::string &property, double val) override
Definition: FilterOperations.cpp:285
helics::FilterOperations::setString
virtual void setString(const std::string &property, const std::string &val)
Definition: FilterOperations.cpp:25
helics::DelayFilterOperation::set
virtual void set(const std::string &property, double val) override
Definition: FilterOperations.cpp:36
helics::RandomDropFilterOperation::set
virtual void set(const std::string &property, double val) override
Definition: FilterOperations.cpp:259
MessageOperators.hpp
define helper classes to scope filter operations
helics::RerouteFilterOperation
Definition: FilterOperations.hpp:104
helics
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
helics::FunctionExecutionFailure
Definition: core-exceptions.hpp:29
helics::DelayFilterOperation
Definition: FilterOperations.hpp:57
helics::FirewallFilterOperation
Definition: FilterOperations.hpp:124
gmlc::libguarded::shared_guarded
Definition: application_api/Federate.hpp:28
helics::FilterOperations::set
virtual void set(const std::string &property, double val)
Definition: FilterOperations.cpp:24
helics::RandomDelayFilterOperation::set
virtual void set(const std::string &property, double val) override
Definition: FilterOperations.cpp:218
helics::CloneFilterOperation::setString
virtual void setString(const std::string &property, const std::string &val) override
Definition: FilterOperations.cpp:380
helics::random_dists_t
random_dists_t
Definition: FilterOperations.cpp:63
helics::Message
Definition: core-data.hpp:29