helics  3.5.2
CallbackFederate.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 "CombinationFederate.hpp"
10 
11 #include <memory>
12 #include <string>
13 #include <utility>
14 
15 namespace helics {
16 class CallbackFederateOperator;
17 
19 class HELICS_CXX_EXPORT CallbackFederate: public CombinationFederate {
20  public:
23 
28  explicit CallbackFederate(std::string_view fedName, const FederateInfo& fedInfo);
29 
35  CallbackFederate(std::string_view fedName,
36  const std::shared_ptr<Core>& core,
37  const FederateInfo& fedInfo = FederateInfo{});
38 
44  CallbackFederate(std::string_view fedName,
45  CoreApp& core,
46  const FederateInfo& fedInfo = FederateInfo{});
47 
53  CallbackFederate(std::string_view fedName, const std::string& configString);
54 
59  explicit CallbackFederate(const std::string& configString);
60 
64  virtual ~CallbackFederate();
68  CallbackFederate(const CallbackFederate& fed) = delete;
71  void setInitializeCallback(std::function<IterationRequest()> initializeCallback)
72  {
73  initializationOperation = std::move(initializeCallback);
74  }
75  void setNextTimeIterativeCallback(
76  std::function<std::pair<Time, IterationRequest>(iteration_time)> nextTimeCallback)
77  {
78  nextTimeOperation1 = std::move(nextTimeCallback);
79  }
80  void setNextTimeCallback(std::function<Time(Time)> nextTimeCallback)
81  {
82  nextTimeOperation2 = std::move(nextTimeCallback);
83  nextTimeOperation1 = nullptr;
84  }
85  void clearNextTimeCallback()
86  {
87  nextTimeOperation1 = nullptr;
88  nextTimeOperation2 = nullptr;
89  }
90  virtual void setFlagOption(int32_t property, bool val) override;
91 
92  private:
93  void loadOperator();
94  // pointer for the
95  std::shared_ptr<CallbackFederateOperator> op;
96  friend CallbackFederateOperator;
97  bool mEventTriggered{false};
98  std::function<IterationRequest()> initializationOperation;
99  std::function<std::pair<Time, IterationRequest>(iteration_time)> nextTimeOperation1;
100  std::function<Time(Time)> nextTimeOperation2;
102  IterationRequest initializeOperationsCallback();
103 
104  std::pair<Time, IterationRequest> operateCallback(iteration_time newTime);
105 
106  void finalizeCallback();
107  void errorHandlerCallback(int errorCode, std::string_view errorString);
108 };
109 } // namespace helics
Definition: CallbackFederate.hpp:19
CallbackFederate & operator=(const CallbackFederate &fed)=delete
CallbackFederate & operator=(CallbackFederate &&fed) noexcept
CallbackFederate(const CallbackFederate &fed)=delete
CallbackFederate(CallbackFederate &&fed) noexcept
Definition: application_api/CombinationFederate.hpp:18
Definition: application_api/CoreApp.hpp:25
Definition: FederateInfo.hpp:29
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
IterationRequest
Definition: CoreTypes.hpp:102
TimeRepresentation< count_time< 9 > > Time
Definition: helicsTime.hpp:27
Definition: helicsTime.hpp:43