helics  3.0.1
Filters.hpp
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 
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()
34 
36 HELICS_CXX_EXPORT FilterTypes filterTypeFromString(const std::string& 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, const std::string& filtName = EMPTY_STRING);
52  Filter(Federate* ffed, const std::string& filtName, InterfaceHandle ihandle);
54  Filter(Core* core, const std::string& filtName, InterfaceHandle ihandle);
56  Filter(InterfaceVisibility locality,
57  Federate* ffed,
58  const std::string& filtName = EMPTY_STRING);
60  explicit Filter(Core* cr, const std::string& filtName = EMPTY_STRING);
62  virtual ~Filter() = default;
63 
64  Filter(Filter&& filt) = default;
66  Filter(const Filter& filt) = default;
67  Filter& operator=(Filter&& filt) = default;
69  Filter& operator=(const Filter& filt) = default;
71  bool isCloningFilter() const { return cloning; }
73  void setOperator(std::shared_ptr<FilterOperator> mo);
74 
75  virtual const std::string& getDisplayName() const override { return getName(); }
76 
81  virtual void set(const std::string& property, double val);
82 
87  virtual void setString(const std::string& property, const std::string& val);
88 
89  void addTarget(const std::string& target) { addSourceTarget(target); }
90 
91  protected:
93  void setFilterOperations(std::shared_ptr<FilterOperations> filterOps);
95  friend void addOperations(Filter* filt, FilterTypes type, Core* cptr);
96 };
97 
99 class HELICS_CXX_EXPORT CloningFilter: public Filter {
100  public:
102  CloningFilter() = default;
105  explicit CloningFilter(Core* cr, const std::string& filtName = EMPTY_STRING);
108  explicit CloningFilter(Federate* ffed, const std::string& filtName = EMPTY_STRING);
112  Federate* ffed,
113  const std::string& filtName = EMPTY_STRING);
114 
116  CloningFilter(Federate* ffed, const std::string& filtName, InterfaceHandle handle);
118  CloningFilter(CloningFilter&& filt) = default;
120  CloningFilter(const CloningFilter& filt) = default;
122  CloningFilter& operator=(CloningFilter&& filt) = default;
124  CloningFilter& operator=(const CloningFilter& filt) = default;
126  ~CloningFilter() = default;
128  void addDeliveryEndpoint(const std::string& endpoint);
129 
131  void removeDeliveryEndpoint(const std::string& endpoint);
132 
133  virtual void setString(const std::string& property, const std::string& val) override;
134 
135  private:
136  friend class FilterFederateManager;
137 };
138 
146 HELICS_CXX_EXPORT Filter&
147  make_filter(FilterTypes type, Federate* fed, const std::string& name = EMPTY_STRING);
148 
157 HELICS_CXX_EXPORT Filter& make_filter(InterfaceVisibility locality,
158  FilterTypes type,
159  Federate* fed,
160  const std::string& name = EMPTY_STRING);
161 
169 HELICS_CXX_EXPORT std::unique_ptr<Filter>
170  make_filter(FilterTypes type, Core* cr, const std::string& name = EMPTY_STRING);
171 
179 HELICS_CXX_EXPORT std::unique_ptr<Filter>
180  make_filter(FilterTypes type, CoreApp& cr, const std::string& name = EMPTY_STRING);
181 
190 HELICS_CXX_EXPORT CloningFilter& make_cloning_filter(FilterTypes type,
191  Federate* fed,
192  const std::string& delivery,
193  const std::string& name = EMPTY_STRING);
194 
204 HELICS_CXX_EXPORT CloningFilter& make_cloning_filter(InterfaceVisibility locality,
205  FilterTypes type,
206  Federate* fed,
207  const std::string& delivery,
208  const std::string& name = EMPTY_STRING);
209 
218 HELICS_CXX_EXPORT std::unique_ptr<CloningFilter>
220  Core* cr,
221  const std::string& delivery,
222  const std::string& name = EMPTY_STRING);
223 
232 HELICS_CXX_EXPORT std::unique_ptr<CloningFilter>
234  CoreApp& cr,
235  const std::string& delivery,
236  const std::string& name = EMPTY_STRING);
237 
238 } // namespace helics
helics::Interface::cr
Core * cr
pointer to the core object
Definition: application_api/Federate.hpp:629
helics::CloningFilter
Definition: Filters.hpp:99
helics::Federate::registerFilter
Filter & registerFilter(const std::string &filterName, const std::string &inputType=std::string(), const std::string &outputType=std::string())
Definition: Federate.cpp:1269
helics::InterfaceVisibility
InterfaceVisibility
Definition: helicsTypes.hpp:39
helics::Interface::addSourceTarget
void addSourceTarget(std::string_view newTarget)
Definition: Federate.cpp:1365
HELICS_FILTER_TYPE_CLONE
@ HELICS_FILTER_TYPE_CLONE
Definition: helics_enums.h:352
helics::CloningFilter::operator=
CloningFilter & operator=(CloningFilter &&filt)=default
helics::addOperations
void addOperations(Filter *filt, FilterTypes type, Core *)
Definition: Filters.cpp:47
helics::Interface::addDestinationTarget
void addDestinationTarget(std::string_view newTarget)
Definition: Federate.cpp:1375
HELICS_FILTER_TYPE_DELAY
@ HELICS_FILTER_TYPE_DELAY
Definition: helics_enums.h:343
helics::Filter::Filter
Filter()=default
helics::InterfaceHandle
Definition: LocalFederateId.hpp:65
helics::Filter::set
virtual void set(const std::string &property, double val)
Definition: Filters.cpp:132
helics::filterTypeFromString
FilterTypes filterTypeFromString(const std::string &filterType) noexcept
Definition: Filters.cpp:32
helics::Filter
Definition: Filters.hpp:39
FilterOperations.hpp
helics::CloningFilter::setString
virtual void setString(const std::string &property, const std::string &val) override
Definition: Filters.cpp:197
helics::Interface
Definition: application_api/Federate.hpp:627
helics::Core
Definition: core/Core.hpp:42
helics::CoreApp
Definition: application_api/CoreApp.hpp:25
helics::Interface::removeTarget
void removeTarget(std::string_view targetToRemove)
Definition: Federate.cpp:1385
helics_enums.h
base helics enumerations for C and C++ API's
HELICS_FILTER_TYPE_CUSTOM
@ HELICS_FILTER_TYPE_CUSTOM
Definition: helics_enums.h:341
helics::Interface::handle
InterfaceHandle handle
the id as generated by the Federate
Definition: application_api/Federate.hpp:630
helics::CloningFilter::CloningFilter
CloningFilter()=default
helics::CoreApp::getCopyofCorePointer
std::shared_ptr< Core > getCopyofCorePointer() const
Definition: application_api/CoreApp.hpp:173
helics::Core::registerFilter
virtual InterfaceHandle registerFilter(const std::string &filterName, const std::string &type_in, const std::string &type_out)=0
helics::Filter::setOperator
void setOperator(std::shared_ptr< FilterOperator > mo)
Definition: Filters.cpp:115
helics::Filter::getDisplayName
virtual const std::string & getDisplayName() const override
Definition: Filters.hpp:75
helics::Federate::registerGlobalCloningFilter
CloningFilter & registerGlobalCloningFilter(const std::string &filterName, const std::string &inputType=std::string(), const std::string &outputType=std::string())
Definition: Federate.cpp:1298
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:345
helics::CloningFilter::removeDeliveryEndpoint
void removeDeliveryEndpoint(const std::string &endpoint)
Definition: Filters.cpp:192
helics::Federate::registerCloningFilter
CloningFilter & registerCloningFilter(const std::string &filterName, const std::string &inputType=std::string(), const std::string &outputType=std::string())
Definition: Federate.cpp:1280
HELICS_FILTER_TYPE_REROUTE
@ HELICS_FILTER_TYPE_REROUTE
Definition: helics_enums.h:350
helics::FilterFederateManager
Definition: FilterFederateManager.hpp:23
helics::make_cloning_filter
CloningFilter & make_cloning_filter(FilterTypes type, Federate *mFed, const std::string &delivery, const std::string &name)
Definition: Filters.cpp:265
helics::make_filter
Filter & make_filter(FilterTypes type, Federate *mFed, const std::string &name)
Definition: Filters.cpp:215
helics
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
helics::CloningFilter::addDeliveryEndpoint
void addDeliveryEndpoint(const std::string &endpoint)
Definition: Filters.cpp:187
helics::Filter::setString
virtual void setString(const std::string &property, const std::string &val)
Definition: Filters.cpp:139
HELICS_FILTER_TYPE_RANDOM_DROP
@ HELICS_FILTER_TYPE_RANDOM_DROP
Definition: helics_enums.h:347
helics::Federate
Definition: application_api/Federate.hpp:47
helics::Federate::getCorePointer
const std::shared_ptr< Core > & getCorePointer()
Definition: application_api/Federate.hpp:572
helics::Core::registerCloningFilter
virtual InterfaceHandle registerCloningFilter(const std::string &filterName, const std::string &type_in, const std::string &type_out)=0
helics::Federate::registerGlobalFilter
Filter & registerGlobalFilter(const std::string &filterName, const std::string &inputType=std::string(), const std::string &outputType=std::string())
Definition: Federate.cpp:1291
helics::Filter::isCloningFilter
bool isCloningFilter() const
Definition: Filters.hpp:71
helics::Filter::setFilterOperations
void setFilterOperations(std::shared_ptr< FilterOperations > filterOps)
Definition: Filters.cpp:122
HELICS_FILTER_TYPE_FIREWALL
@ HELICS_FILTER_TYPE_FIREWALL
Definition: helics_enums.h:355
helics::FilterTypes
FilterTypes
Definition: Filters.hpp:21