helics  3.5.2
Filters.hpp
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 
9 #include "../core/Core.hpp"
10 #include "Federate.hpp"
11 #include "helics/helics_enums.h"
12 
13 #include <memory>
14 #include <string>
15 
16 namespace helics {
17 class FilterOperations;
18 class FilterOperator;
19 class CoreApp;
21 enum class FilterTypes {
24  RANDOM_DELAY = HELICS_FILTER_TYPE_RANDOM_DELAY,
25  RANDOM_DROP = HELICS_FILTER_TYPE_RANDOM_DROP,
28  FIREWALL = HELICS_FILTER_TYPE_FIREWALL,
29  UNRECOGNIZED = 7
30 
31 };
32 
33 #define EMPTY_STRING std::string_view()
34 
36 HELICS_CXX_EXPORT FilterTypes filterTypeFromString(std::string_view filterType) noexcept;
37 
39 class 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 
87  void addTarget(std::string_view target) { addSourceTarget(target); }
88 
90  void setFilterType(std::int32_t type);
91 
92  protected:
94  void setFilterOperations(std::shared_ptr<FilterOperations> filterOps);
96  friend void addOperations(Filter* filt, FilterTypes type, Core* cptr);
97 };
98 
100 class HELICS_CXX_EXPORT CloningFilter: public Filter {
101  public:
103  CloningFilter() = default;
106  explicit CloningFilter(Core* core, std::string_view filtName = EMPTY_STRING);
109  explicit CloningFilter(Federate* ffed, std::string_view filtName = EMPTY_STRING);
113  Federate* ffed,
114  std::string_view filtName = EMPTY_STRING);
115 
117  CloningFilter(Federate* ffed, std::string_view filtName, InterfaceHandle handle);
119  CloningFilter(CloningFilter&& filt) = default;
121  CloningFilter(const CloningFilter& filt) = default;
125  CloningFilter& operator=(const CloningFilter& filt) = default;
127  ~CloningFilter() = default;
129  void addDeliveryEndpoint(std::string_view endpoint);
130 
132  void removeDeliveryEndpoint(std::string_view endpoint);
133 
134  virtual void setString(std::string_view property, std::string_view val) override;
135 
136  private:
137  friend class FilterFederateManager;
138 };
139 
147 HELICS_CXX_EXPORT Filter&
148  make_filter(FilterTypes type, Federate* fed, std::string_view name = EMPTY_STRING);
149 
158 HELICS_CXX_EXPORT Filter& make_filter(InterfaceVisibility locality,
159  FilterTypes type,
160  Federate* fed,
161  std::string_view name = EMPTY_STRING);
162 
170 HELICS_CXX_EXPORT std::unique_ptr<Filter>
171  make_filter(FilterTypes type, Core* core, std::string_view name = EMPTY_STRING);
172 
180 HELICS_CXX_EXPORT std::unique_ptr<Filter>
181  make_filter(FilterTypes type, CoreApp& core, std::string_view name = EMPTY_STRING);
182 
191 HELICS_CXX_EXPORT CloningFilter& make_cloning_filter(FilterTypes type,
192  Federate* fed,
193  std::string_view delivery,
194  std::string_view name = EMPTY_STRING);
195 
205 HELICS_CXX_EXPORT CloningFilter& make_cloning_filter(InterfaceVisibility locality,
206  FilterTypes type,
207  Federate* fed,
208  std::string_view delivery,
209  std::string_view name = EMPTY_STRING);
210 
219 HELICS_CXX_EXPORT std::unique_ptr<CloningFilter>
221  Core* core,
222  std::string_view delivery,
223  std::string_view name = EMPTY_STRING);
224 
233 HELICS_CXX_EXPORT std::unique_ptr<CloningFilter>
235  CoreApp& core,
236  std::string_view delivery,
237  std::string_view name = EMPTY_STRING);
238 
239 } // namespace helics
Definition: Filters.hpp:100
CloningFilter & operator=(CloningFilter &&filt)=default
CloningFilter(const CloningFilter &filt)=default
CloningFilter(CloningFilter &&filt)=default
CloningFilter & operator=(const 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
Filter & operator=(const Filter &filt)=default
virtual ~Filter()=default
virtual const std::string & getDisplayName() const override
Definition: Filters.hpp:73
bool isCloningFilter() const
Definition: Filters.hpp:69
Filter()=default
Definition: LocalFederateId.hpp:65
Definition: application_api/Federate.hpp:875
base helics enumerations for C and C++ API's
@ HELICS_FILTER_TYPE_FIREWALL
Definition: helics_enums.h:406
@ HELICS_FILTER_TYPE_RANDOM_DELAY
Definition: helics_enums.h:395
@ HELICS_FILTER_TYPE_REROUTE
Definition: helics_enums.h:400
@ HELICS_FILTER_TYPE_CLONE
Definition: helics_enums.h:403
@ HELICS_FILTER_TYPE_CUSTOM
Definition: helics_enums.h:391
@ HELICS_FILTER_TYPE_RANDOM_DROP
Definition: helics_enums.h:397
@ HELICS_FILTER_TYPE_DELAY
Definition: helics_enums.h:393
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:206
void addOperations(Filter *filt, FilterTypes type, Core *)
Definition: Filters.cpp:52
CloningFilter & make_cloning_filter(FilterTypes type, Federate *mFed, std::string_view delivery, std::string_view name)
Definition: Filters.cpp:256
FilterTypes
Definition: Filters.hpp:21
FilterTypes filterTypeFromString(std::string_view filterType) noexcept
Definition: Filters.cpp:32
InterfaceVisibility
Definition: helicsTypes.hpp:40