helics  2.8.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 filter_types {
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 filter_types filterTypeFromString(const std::string& filterType) noexcept;
37 
39 class HELICS_CXX_EXPORT Filter {
40  protected:
41  Core* corePtr = nullptr;
42  Federate* fed = nullptr;
44  bool cloning = false;
45  bool disableAssign = false;
46  std::string name;
47  private:
48  std::shared_ptr<FilterOperations>
49  filtOp;
50  public:
52  Filter() = default;
54  explicit Filter(Federate* ffed, const std::string& filtName = EMPTY_STRING);
56  Filter(Federate* ffed, const std::string& filtName, interface_handle ihandle);
59  Federate* ffed,
60  const std::string& filtName = EMPTY_STRING);
62  explicit Filter(Core* cr, const std::string& filtName = EMPTY_STRING);
64  virtual ~Filter() = default;
65 
66  Filter(Filter&& filt) = default;
68  Filter(const Filter& filt) = default;
69  Filter& operator=(Filter&& filt) = default;
71  Filter& operator=(const Filter& filt) = default;
73  bool isValid() const { return handle.isValid(); }
75  bool isCloningFilter() const { return cloning; }
77  void setOperator(std::shared_ptr<FilterOperator> mo);
78 
80  interface_handle getHandle() const { return handle; }
82  operator interface_handle() const { return handle; }
84  const std::string& getName() const { return name; }
86  const std::string& getKey() const;
88  const std::string& getInjectionType() const;
90  const std::string& getExtractionType() const;
91 
93  const std::string& getInfo() const;
95  void setInfo(const std::string& info);
96 
101  virtual void set(const std::string& property, double val);
102 
107  virtual void setString(const std::string& property, const std::string& val);
109  virtual void addSourceTarget(const std::string& sourceName);
111  virtual void addDestinationTarget(const std::string& destinationName);
113  void addTarget(const std::string& target) { addSourceTarget(target); }
114 
116  virtual void removeTarget(const std::string& sourceName);
118  void setOption(int32_t option, int32_t value);
122  void close();
123 
125  int32_t getOption(int32_t option) const;
126 
127  protected:
129  void setFilterOperations(std::shared_ptr<FilterOperations> filterOps);
131  friend void addOperations(Filter* filt, filter_types type, Core* cptr);
132 };
133 
135 class HELICS_CXX_EXPORT CloningFilter: public Filter {
136  public:
138  CloningFilter() = default;
141  explicit CloningFilter(Core* cr, const std::string& filtName = EMPTY_STRING);
144  explicit CloningFilter(Federate* ffed, const std::string& filtName = EMPTY_STRING);
148  Federate* ffed,
149  const std::string& filtName = EMPTY_STRING);
150 
152  CloningFilter(Federate* ffed, const std::string& filtName, interface_handle handle);
154  CloningFilter(CloningFilter&& filt) = default;
156  CloningFilter(const CloningFilter& filt) = default;
158  CloningFilter& operator=(CloningFilter&& filt) = default;
160  CloningFilter& operator=(const CloningFilter& filt) = default;
162  ~CloningFilter() = default;
164  void addDeliveryEndpoint(const std::string& endpoint);
165 
167  void removeDeliveryEndpoint(const std::string& endpoint);
168 
169  virtual void setString(const std::string& property, const std::string& val) override;
170 
171  private:
172  friend class FilterFederateManager;
173 };
174 
182 HELICS_CXX_EXPORT Filter&
183  make_filter(filter_types type, Federate* fed, const std::string& name = EMPTY_STRING);
184 
193 HELICS_CXX_EXPORT Filter& make_filter(interface_visibility locality,
194  filter_types type,
195  Federate* fed,
196  const std::string& name = EMPTY_STRING);
197 
205 HELICS_CXX_EXPORT std::unique_ptr<Filter>
206  make_filter(filter_types type, Core* cr, const std::string& name = EMPTY_STRING);
207 
215 HELICS_CXX_EXPORT std::unique_ptr<Filter>
216  make_filter(filter_types type, CoreApp& cr, const std::string& name = EMPTY_STRING);
217 
226 HELICS_CXX_EXPORT CloningFilter& make_cloning_filter(filter_types type,
227  Federate* fed,
228  const std::string& delivery,
229  const std::string& name = EMPTY_STRING);
230 
240 HELICS_CXX_EXPORT CloningFilter& make_cloning_filter(interface_visibility locality,
241  filter_types type,
242  Federate* fed,
243  const std::string& delivery,
244  const std::string& name = EMPTY_STRING);
245 
254 HELICS_CXX_EXPORT std::unique_ptr<CloningFilter>
256  Core* cr,
257  const std::string& delivery,
258  const std::string& name = EMPTY_STRING);
259 
268 HELICS_CXX_EXPORT std::unique_ptr<CloningFilter>
270  CoreApp& cr,
271  const std::string& delivery,
272  const std::string& name = EMPTY_STRING);
273 
274 } // namespace helics
helics_filter_type_reroute
@ helics_filter_type_reroute
Definition: helics_enums.h:319
helics::CloningFilter
Definition: Filters.hpp:135
helics::Filter::fed
Federate * fed
pointer to fed
Definition: Filters.hpp:42
helics::Federate::registerFilter
Filter & registerFilter(const std::string &filterName, const std::string &inputType=std::string(), const std::string &outputType=std::string())
Definition: Federate.cpp:1241
helics::Core::setHandleOption
virtual void setHandleOption(interface_handle handle, int32_t option, int32_t option_value)=0
helics::Core::getInterfaceInfo
virtual const std::string & getInterfaceInfo(interface_handle handle) const =0
helics::CloningFilter::operator=
CloningFilter & operator=(CloningFilter &&filt)=default
helics_filter_type_clone
@ helics_filter_type_clone
Definition: helics_enums.h:321
helics::Core::addDestinationTarget
virtual void addDestinationTarget(interface_handle handle, const std::string &dest)=0
helics::Core::getExtractionType
virtual const std::string & getExtractionType(interface_handle handle) const =0
helics::Filter::Filter
Filter()=default
helics::Filter::setInfo
void setInfo(const std::string &info)
Definition: Filters.cpp:163
helics::Filter::getHandle
interface_handle getHandle() const
Definition: Filters.hpp:80
helics::Filter::set
virtual void set(const std::string &property, double val)
Definition: Filters.cpp:168
helics::Core::addSourceTarget
virtual void addSourceTarget(interface_handle handle, const std::string &name)=0
helics_filter_type_random_drop
@ helics_filter_type_random_drop
Definition: helics_enums.h:316
helics::Core::getInjectionType
virtual const std::string & getInjectionType(interface_handle handle) const =0
helics::Filter
Definition: Filters.hpp:39
FilterOperations.hpp
getKey
std::string getKey(const Json::Value &element)
Definition: JsonProcessingFunctions.cpp:90
helics::Filter::getOption
int32_t getOption(int32_t option) const
Definition: Filters.cpp:256
helics::CloningFilter::setString
virtual void setString(const std::string &property, const std::string &val) override
Definition: Filters.cpp:266
helics_filter_type_random_delay
@ helics_filter_type_random_delay
Definition: helics_enums.h:314
helics::filter_types
filter_types
Definition: Filters.hpp:21
helics::Core::removeTarget
virtual void removeTarget(interface_handle handle, const std::string &targetToRemove)=0
helics::Core
Definition: core/Core.hpp:42
helics::Core::closeHandle
virtual void closeHandle(interface_handle handle)=0
helics::CoreApp
Definition: application_api/CoreApp.hpp:25
helics::Filter::getName
const std::string & getName() const
Definition: Filters.hpp:84
helics_enums.h
base helics enumerations for C and C++ API's
helics::Core::registerFilter
virtual interface_handle registerFilter(const std::string &filterName, const std::string &type_in, const std::string &type_out)=0
helics::Filter::isValid
bool isValid() const
Definition: Filters.hpp:73
helics::Filter::corePtr
Core * corePtr
the Core to use
Definition: Filters.hpp:41
helics::Filter::addSourceTarget
virtual void addSourceTarget(const std::string &sourceName)
Definition: Filters.cpp:221
helics_filter_type_delay
@ helics_filter_type_delay
Definition: helics_enums.h:312
helics::CloningFilter::CloningFilter
CloningFilter()=default
helics::Filter::removeTarget
virtual void removeTarget(const std::string &sourceName)
Definition: Filters.cpp:238
helics::filterTypeFromString
filter_types filterTypeFromString(const std::string &filterType) noexcept
Definition: Filters.cpp:37
helics::CoreApp::getCopyofCorePointer
std::shared_ptr< Core > getCopyofCorePointer() const
Definition: application_api/CoreApp.hpp:144
helics::Filter::setOperator
void setOperator(std::shared_ptr< FilterOperator > mo)
Definition: Filters.cpp:117
fed
@ fed
special logging command for message coming from a fed
Definition: loggingHelper.hpp:32
helics::interface_handle
Definition: federate_id.hpp:65
helics::make_cloning_filter
CloningFilter & make_cloning_filter(filter_types type, Federate *mFed, const std::string &delivery, const std::string &name)
Definition: Filters.cpp:339
helics::Federate::registerGlobalCloningFilter
CloningFilter & registerGlobalCloningFilter(const std::string &filterName, const std::string &inputType=std::string(), const std::string &outputType=std::string())
Definition: Federate.cpp:1270
helics::Filter::name
std::string name
The name of the filter.
Definition: Filters.hpp:46
helics::CloningFilter::removeDeliveryEndpoint
void removeDeliveryEndpoint(const std::string &endpoint)
Definition: Filters.cpp:261
helics::Filter::getInjectionType
const std::string & getInjectionType() const
Definition: Filters.cpp:142
helics::Filter::handle
interface_handle handle
the handle as generated by the Federate
Definition: Filters.hpp:43
helics::Filter::getKey
const std::string & getKey() const
Definition: Filters.cpp:134
helics::Core::getHandleName
virtual const std::string & getHandleName(interface_handle handle) const =0
helics::Federate::registerCloningFilter
CloningFilter & registerCloningFilter(const std::string &filterName, const std::string &inputType=std::string(), const std::string &outputType=std::string())
Definition: Federate.cpp:1252
helics::FilterFederateManager
Definition: FilterFederateManager.hpp:23
helics::addOperations
void addOperations(Filter *filt, filter_types type, Core *)
Definition: Filters.cpp:52
helics
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
helics::Filter::addTarget
void addTarget(const std::string &target)
Definition: Filters.hpp:113
helics::Filter::close
void close()
Definition: Filters.cpp:250
helics::CloningFilter::addDeliveryEndpoint
void addDeliveryEndpoint(const std::string &endpoint)
Definition: Filters.cpp:233
helics::Filter::setString
virtual void setString(const std::string &property, const std::string &val)
Definition: Filters.cpp:175
helics::Filter::getExtractionType
const std::string & getExtractionType() const
Definition: Filters.cpp:150
helics::Federate
Definition: application_api/Federate.hpp:44
helics::Federate::getCorePointer
const std::shared_ptr< Core > & getCorePointer()
Definition: application_api/Federate.hpp:548
helics::Core::setFilterOperator
virtual void setFilterOperator(interface_handle filter, std::shared_ptr< FilterOperator > callback)=0
helics::Filter::addDestinationTarget
virtual void addDestinationTarget(const std::string &destinationName)
Definition: Filters.cpp:227
helics::Federate::registerGlobalFilter
Filter & registerGlobalFilter(const std::string &filterName, const std::string &inputType=std::string(), const std::string &outputType=std::string())
Definition: Federate.cpp:1263
helics::Core::setInterfaceInfo
virtual void setInterfaceInfo(interface_handle handle, std::string info)=0
helics::Filter::setOption
void setOption(int32_t option, int32_t value)
Definition: Filters.cpp:243
helics_filter_type_custom
@ helics_filter_type_custom
Definition: helics_enums.h:310
helics::interface_visibility
interface_visibility
Definition: helicsTypes.hpp:38
helics::make_filter
Filter & make_filter(filter_types type, Federate *mFed, const std::string &name)
Definition: Filters.cpp:287
helics::Filter::getInfo
const std::string & getInfo() const
Definition: Filters.cpp:158
helics_filter_type_firewall
@ helics_filter_type_firewall
Definition: helics_enums.h:324
helics::Core::getHandleOption
virtual int32_t getHandleOption(interface_handle handle, int32_t option) const =0
helics::Core::registerCloningFilter
virtual interface_handle registerCloningFilter(const std::string &filterName, const std::string &type_in, const std::string &type_out)=0
helics::Filter::isCloningFilter
bool isCloningFilter() const
Definition: Filters.hpp:75
helics::Filter::setFilterOperations
void setFilterOperations(std::shared_ptr< FilterOperations > filterOps)
Definition: Filters.cpp:124