helics 3.7.0
Loading...
Searching...
No Matches
Filters.hpp
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.hpp"
10#include "Federate.hpp"
11#include "helics/helics_enums.h"
12
13#include <memory>
14#include <string>
15
16namespace helics {
17class FilterOperations;
18class FilterOperator;
19class CoreApp;
21enum class FilterTypes {
29 UNRECOGNIZED = 7
30
31};
32
33#define EMPTY_STRING std::string_view()
34
36HELICS_CXX_EXPORT FilterTypes filterTypeFromString(std::string_view filterType) noexcept;
37
39class HELICS_CXX_EXPORT Filter: public Interface {
40 protected:
41 bool cloning = false;
42 bool disableAssign = false;
43 private:
44 std::shared_ptr<FilterOperations>
45 filtOp;
46 public:
48 Filter() = default;
50 explicit Filter(Federate* ffed, std::string_view filtName = EMPTY_STRING);
52 Filter(Federate* ffed, std::string_view filtName, InterfaceHandle ihandle);
54 Filter(Core* core, std::string_view filtName, InterfaceHandle ihandle);
56 Filter(InterfaceVisibility locality, Federate* ffed, std::string_view filtName = EMPTY_STRING);
58 explicit Filter(Core* core, std::string_view filtName = EMPTY_STRING);
60 virtual ~Filter() = default;
61
62 Filter(Filter&& filt) = default;
64 Filter(const Filter& filt) = default;
65 Filter& operator=(Filter&& filt) = default;
67 Filter& operator=(const Filter& filt) = default;
69 bool isCloningFilter() const { return cloning; }
71 void setOperator(std::shared_ptr<FilterOperator> filterOp);
72
73 virtual const std::string& getDisplayName() const override { return getName(); }
74
79 virtual void set(std::string_view property, double val);
80
85 virtual void setString(std::string_view property, std::string_view val);
86
90 virtual std::string getString(std::string_view property);
91
95 virtual double getProperty(std::string_view property);
96
98 void addTarget(std::string_view target) { addSourceTarget(target); }
99
101 void setFilterType(std::int32_t type);
102
103 protected:
105 void setFilterOperations(std::shared_ptr<FilterOperations> filterOps);
107 friend void addOperations(Filter* filt, FilterTypes type, Core* cptr);
108};
109
111class HELICS_CXX_EXPORT CloningFilter: public Filter {
112 public:
114 CloningFilter() = default;
117 explicit CloningFilter(Core* core, std::string_view filtName = EMPTY_STRING);
120 explicit CloningFilter(Federate* ffed, std::string_view filtName = EMPTY_STRING);
124 Federate* ffed,
125 std::string_view filtName = EMPTY_STRING);
126
128 CloningFilter(Federate* ffed, std::string_view filtName, InterfaceHandle handle);
130 CloningFilter(CloningFilter&& filt) = default;
132 CloningFilter(const CloningFilter& filt) = default;
136 CloningFilter& operator=(const CloningFilter& filt) = default;
138 ~CloningFilter() = default;
140 void addDeliveryEndpoint(std::string_view endpoint);
141
143 void removeDeliveryEndpoint(std::string_view endpoint);
144
145 virtual void setString(std::string_view property, std::string_view val) override;
146
147 private:
148 friend class FilterFederateManager;
149};
150
158HELICS_CXX_EXPORT Filter&
159 make_filter(FilterTypes type, Federate* fed, std::string_view name = EMPTY_STRING);
160
169HELICS_CXX_EXPORT Filter& make_filter(InterfaceVisibility locality,
170 FilterTypes type,
171 Federate* fed,
172 std::string_view name = EMPTY_STRING);
173
181HELICS_CXX_EXPORT std::unique_ptr<Filter>
182 make_filter(FilterTypes type, Core* core, std::string_view name = EMPTY_STRING);
183
191HELICS_CXX_EXPORT std::unique_ptr<Filter>
192 make_filter(FilterTypes type, CoreApp& core, std::string_view name = EMPTY_STRING);
193
202HELICS_CXX_EXPORT CloningFilter& make_cloning_filter(FilterTypes type,
203 Federate* fed,
204 std::string_view delivery,
205 std::string_view name = EMPTY_STRING);
206
216HELICS_CXX_EXPORT CloningFilter& make_cloning_filter(InterfaceVisibility locality,
217 FilterTypes type,
218 Federate* fed,
219 std::string_view delivery,
220 std::string_view name = EMPTY_STRING);
221
230HELICS_CXX_EXPORT std::unique_ptr<CloningFilter>
232 Core* core,
233 std::string_view delivery,
234 std::string_view name = EMPTY_STRING);
235
244HELICS_CXX_EXPORT std::unique_ptr<CloningFilter>
246 CoreApp& core,
247 std::string_view delivery,
248 std::string_view name = EMPTY_STRING);
249
250} // namespace helics
Definition Filters.hpp:111
CloningFilter & operator=(CloningFilter &&filt)=default
CloningFilter & operator=(const CloningFilter &filt)=default
CloningFilter(const CloningFilter &filt)=default
CloningFilter(CloningFilter &&filt)=default
Definition application_api/CoreApp.hpp:25
Definition core/Core.hpp:41
Definition application_api/Federate.hpp:48
Definition Filters.hpp:39
Filter(const Filter &filt)=default
virtual ~Filter()=default
Filter & operator=(const Filter &filt)=default
void addTarget(std::string_view target)
Definition Filters.hpp:98
bool isCloningFilter() const
Definition Filters.hpp:69
Filter()=default
virtual const std::string & getDisplayName() const override
Definition Filters.hpp:73
Definition LocalFederateId.hpp:65
Definition application_api/Federate.hpp:880
base helics enumerations for C and C++ API's
@ HELICS_FILTER_TYPE_FIREWALL
Definition helics_enums.h:410
@ HELICS_FILTER_TYPE_RANDOM_DELAY
Definition helics_enums.h:399
@ HELICS_FILTER_TYPE_REROUTE
Definition helics_enums.h:404
@ HELICS_FILTER_TYPE_CLONE
Definition helics_enums.h:407
@ HELICS_FILTER_TYPE_CUSTOM
Definition helics_enums.h:395
@ HELICS_FILTER_TYPE_RANDOM_DROP
Definition helics_enums.h:401
@ HELICS_FILTER_TYPE_DELAY
Definition helics_enums.h:397
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition AsyncFedCallInfo.hpp:14
Filter & make_filter(FilterTypes type, Federate *mFed, std::string_view name)
Definition Filters.cpp:224
void addOperations(Filter *filt, FilterTypes type, Core *)
Definition Filters.cpp:54
CloningFilter & make_cloning_filter(FilterTypes type, Federate *mFed, std::string_view delivery, std::string_view name)
Definition Filters.cpp:274
FilterTypes
Definition Filters.hpp:21
FilterTypes filterTypeFromString(std::string_view filterType) noexcept
Definition Filters.cpp:34
InterfaceVisibility
Definition helicsTypes.hpp:40