helics  3.3.0
Filters.hpp
1 /*
2 Copyright (c) 2017-2022,
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> mo);
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 
89  protected:
91  void setFilterOperations(std::shared_ptr<FilterOperations> filterOps);
93  friend void addOperations(Filter* filt, FilterTypes type, Core* cptr);
94 };
95 
97 class HELICS_CXX_EXPORT CloningFilter: public Filter {
98  public:
100  CloningFilter() = default;
103  explicit CloningFilter(Core* core, std::string_view filtName = EMPTY_STRING);
106  explicit CloningFilter(Federate* ffed, std::string_view filtName = EMPTY_STRING);
110  Federate* ffed,
111  std::string_view filtName = EMPTY_STRING);
112 
114  CloningFilter(Federate* ffed, std::string_view filtName, InterfaceHandle handle);
116  CloningFilter(CloningFilter&& filt) = default;
118  CloningFilter(const CloningFilter& filt) = default;
120  CloningFilter& operator=(CloningFilter&& filt) = default;
122  CloningFilter& operator=(const CloningFilter& filt) = default;
124  ~CloningFilter() = default;
126  void addDeliveryEndpoint(std::string_view endpoint);
127 
129  void removeDeliveryEndpoint(std::string_view endpoint);
130 
131  virtual void setString(std::string_view property, std::string_view val) override;
132 
133  private:
134  friend class FilterFederateManager;
135 };
136 
144 HELICS_CXX_EXPORT Filter&
145  make_filter(FilterTypes type, Federate* fed, std::string_view name = EMPTY_STRING);
146 
155 HELICS_CXX_EXPORT Filter& make_filter(InterfaceVisibility locality,
156  FilterTypes type,
157  Federate* fed,
158  std::string_view name = EMPTY_STRING);
159 
167 HELICS_CXX_EXPORT std::unique_ptr<Filter>
168  make_filter(FilterTypes type, Core* cr, std::string_view name = EMPTY_STRING);
169 
177 HELICS_CXX_EXPORT std::unique_ptr<Filter>
178  make_filter(FilterTypes type, CoreApp& cr, std::string_view name = EMPTY_STRING);
179 
188 HELICS_CXX_EXPORT CloningFilter& make_cloning_filter(FilterTypes type,
189  Federate* fed,
190  std::string_view delivery,
191  std::string_view name = EMPTY_STRING);
192 
202 HELICS_CXX_EXPORT CloningFilter& make_cloning_filter(InterfaceVisibility locality,
203  FilterTypes type,
204  Federate* fed,
205  std::string_view delivery,
206  std::string_view name = EMPTY_STRING);
207 
216 HELICS_CXX_EXPORT std::unique_ptr<CloningFilter>
218  Core* cr,
219  std::string_view delivery,
220  std::string_view name = EMPTY_STRING);
221 
230 HELICS_CXX_EXPORT std::unique_ptr<CloningFilter>
232  CoreApp& cr,
233  std::string_view delivery,
234  std::string_view name = EMPTY_STRING);
235 
236 } // namespace helics
helics::Interface::cr
Core * cr
pointer to the core object
Definition: application_api/Federate.hpp:769
helics::CloningFilter
Definition: Filters.hpp:97
helics::Federate::registerGlobalCloningFilter
CloningFilter & registerGlobalCloningFilter(std::string_view filterName, std::string_view inputType=std::string_view{}, std::string_view outputType=std::string_view{})
Definition: Federate.cpp:1473
helics::InterfaceVisibility
InterfaceVisibility
Definition: helicsTypes.hpp:40
HELICS_FILTER_TYPE_CLONE
@ HELICS_FILTER_TYPE_CLONE
Definition: helics_enums.h:373
helics::make_cloning_filter
CloningFilter & make_cloning_filter(FilterTypes type, Federate *mFed, std::string_view delivery, std::string_view name)
Definition: Filters.cpp:252
helics::CloningFilter::operator=
CloningFilter & operator=(CloningFilter &&filt)=default
helics::addOperations
void addOperations(Filter *filt, FilterTypes type, Core *)
Definition: Filters.cpp:47
HELICS_FILTER_TYPE_DELAY
@ HELICS_FILTER_TYPE_DELAY
Definition: helics_enums.h:363
helics::Federate::registerCloningFilter
CloningFilter & registerCloningFilter(std::string_view filterName, std::string_view inputType=std::string_view{}, std::string_view outputType=std::string_view{})
Definition: Federate.cpp:1459
helics::filterTypeFromString
FilterTypes filterTypeFromString(std::string_view filterType) noexcept
Definition: Filters.cpp:32
helics::Filter::Filter
Filter()=default
helics::InterfaceHandle
Definition: LocalFederateId.hpp:65
helics::Interface::addSourceTarget
void addSourceTarget(std::string_view newTarget, InterfaceType hint=InterfaceType::UNKNOWN)
Definition: Federate.cpp:1590
helics::Core::registerCloningFilter
virtual InterfaceHandle registerCloningFilter(std::string_view filterName, std::string_view type_in, std::string_view type_out)=0
helics::Filter
Definition: Filters.hpp:39
FilterOperations.hpp
helics::Filter::set
virtual void set(std::string_view property, double val)
Definition: Filters.cpp:123
helics::Interface
Definition: application_api/Federate.hpp:767
helics::Core
Definition: core/Core.hpp:41
helics::Filter::setString
virtual void setString(std::string_view property, std::string_view val)
Definition: Filters.cpp:130
helics::CoreApp
Definition: application_api/CoreApp.hpp:25
helics::Interface::removeTarget
void removeTarget(std::string_view targetToRemove)
Definition: Federate.cpp:1600
helics::Federate::registerFilter
Filter & registerFilter(std::string_view filterName, std::string_view inputType=std::string_view{}, std::string_view outputType=std::string_view{})
Definition: Federate.cpp:1452
helics_enums.h
base helics enumerations for C and C++ API's
helics::Federate::registerGlobalFilter
Filter & registerGlobalFilter(std::string_view filterName, std::string_view inputType=std::string_view{}, std::string_view outputType=std::string_view{})
Definition: Federate.cpp:1466
HELICS_FILTER_TYPE_CUSTOM
@ HELICS_FILTER_TYPE_CUSTOM
Definition: helics_enums.h:361
helics::Interface::handle
InterfaceHandle handle
the id as generated by the Federate
Definition: application_api/Federate.hpp:770
helics::CloningFilter::CloningFilter
CloningFilter()=default
helics::CoreApp::getCopyofCorePointer
std::shared_ptr< Core > getCopyofCorePointer() const
Definition: application_api/CoreApp.hpp:184
helics::Interface::addDestinationTarget
void addDestinationTarget(std::string_view newTarget, InterfaceType hint=InterfaceType::UNKNOWN)
Definition: Federate.cpp:1595
helics::Filter::setOperator
void setOperator(std::shared_ptr< FilterOperator > mo)
Definition: Filters.cpp:112
helics::Filter::getDisplayName
virtual const std::string & getDisplayName() const override
Definition: Filters.hpp:73
helics::CloningFilter::removeDeliveryEndpoint
void removeDeliveryEndpoint(std::string_view endpoint)
Definition: Filters.cpp:179
helics::Core::setFilterOperator
virtual void setFilterOperator(InterfaceHandle filter, std::shared_ptr< FilterOperator > callback)=0
HELICS_FILTER_TYPE_RANDOM_DELAY
@ HELICS_FILTER_TYPE_RANDOM_DELAY
Definition: helics_enums.h:365
HELICS_FILTER_TYPE_REROUTE
@ HELICS_FILTER_TYPE_REROUTE
Definition: helics_enums.h:370
helics
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
helics::make_filter
Filter & make_filter(FilterTypes type, Federate *mFed, std::string_view name)
Definition: Filters.cpp:202
helics::Core::registerFilter
virtual InterfaceHandle registerFilter(std::string_view filterName, std::string_view type_in, std::string_view type_out)=0
HELICS_FILTER_TYPE_RANDOM_DROP
@ HELICS_FILTER_TYPE_RANDOM_DROP
Definition: helics_enums.h:367
helics::Federate
Definition: application_api/Federate.hpp:48
helics::Federate::getCorePointer
const std::shared_ptr< Core > & getCorePointer()
Definition: application_api/Federate.hpp:710
helics::CloningFilter::setString
virtual void setString(std::string_view property, std::string_view val) override
Definition: Filters.cpp:184
helics::CloningFilter::addDeliveryEndpoint
void addDeliveryEndpoint(std::string_view endpoint)
Definition: Filters.cpp:174
helics::Filter::isCloningFilter
bool isCloningFilter() const
Definition: Filters.hpp:69
helics::Filter::setFilterOperations
void setFilterOperations(std::shared_ptr< FilterOperations > filterOps)
Definition: Filters.cpp:117
HELICS_FILTER_TYPE_FIREWALL
@ HELICS_FILTER_TYPE_FIREWALL
Definition: helics_enums.h:376
helics::FilterTypes
FilterTypes
Definition: Filters.hpp:21