helics  3.0.1
core/Core.hpp
Go to the documentation of this file.
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 "LocalFederateId.hpp"
10 #include "core-data.hpp"
11 
12 #include <functional>
13 #include <memory>
14 #include <string>
15 #include <utility>
16 #include <vector>
17 
38 namespace helics {
39 class CoreFederateInfo;
40 
42 class Core {
43  public:
45  Core() = default;
47  virtual ~Core() = default;
48 
55  virtual void configure(const std::string& configureString) = 0;
62  virtual void configureFromArgs(int argc, char* argv[]) = 0;
69  virtual void configureFromVector(std::vector<std::string> args) = 0;
73  virtual bool isConfigured() const = 0;
74 
79  virtual bool connect() = 0;
83  virtual bool isConnected() const = 0;
84 
88  virtual void disconnect() = 0;
89 
90  /*return true if the core has an error*/
91  virtual bool hasError() const = 0;
95  virtual bool waitForDisconnect(
96  std::chrono::milliseconds msToWait = std::chrono::milliseconds(0)) const = 0;
97 
100  virtual bool isOpenToNewFederates() const = 0;
103  virtual const std::string& getIdentifier() const = 0;
105  virtual const std::string& getAddress() const = 0;
106 
113  virtual void globalError(LocalFederateId federateID,
114  int32_t errorCode,
115  const std::string& errorString) = 0;
116 
123  virtual void localError(LocalFederateId federateID,
124  int32_t errorCode,
125  const std::string& errorString) = 0;
126 
128  virtual int getErrorCode() const = 0;
130  virtual std::string getErrorMessage() const = 0;
137  virtual void finalize(LocalFederateId federateID) = 0;
138 
162  virtual void enterInitializingMode(LocalFederateId federateID) = 0;
163 
167  virtual void setCoreReadyToInit() = 0;
168 
180  IterationRequest iterate = NO_ITERATION) = 0;
181 
190  virtual LocalFederateId registerFederate(const std::string& name,
191  const CoreFederateInfo& info) = 0;
192 
197  virtual const std::string& getFederateName(LocalFederateId federateID) const = 0;
198 
203  virtual LocalFederateId getFederateId(const std::string& name) const = 0;
204 
209  virtual int32_t getFederationSize() = 0;
210 
231  virtual Time timeRequest(LocalFederateId federateID, Time next) = 0;
232 
261  virtual iteration_time
262  requestTimeIterative(LocalFederateId federateID, Time next, IterationRequest iterate) = 0;
263 
267  virtual uint64_t getCurrentReiteration(LocalFederateId federateID) const = 0;
268 
274  virtual void setTimeProperty(LocalFederateId federateID, int32_t property, Time timeValue) = 0;
280  virtual Time getTimeProperty(LocalFederateId federateID, int32_t property) const = 0;
286  virtual void
287  setIntegerProperty(LocalFederateId federateID, int32_t property, int16_t propValue) = 0;
293  virtual int16_t getIntegerProperty(LocalFederateId federateID, int32_t property) const = 0;
298  virtual Time getCurrentTime(LocalFederateId federateID) const = 0;
299 
306  virtual void setFlagOption(LocalFederateId federateID, int32_t flag, bool flagValue) = 0;
307 
314  virtual bool getFlagOption(LocalFederateId federateID, int32_t flag) const = 0;
330  const std::string& key,
331  const std::string& type,
332  const std::string& units) = 0;
333 
339  const std::string& key) const = 0;
340 
350  virtual InterfaceHandle registerInput(LocalFederateId federateID,
351  const std::string& key,
352  const std::string& type,
353  const std::string& units) = 0;
358  virtual InterfaceHandle getInput(LocalFederateId federateID, const std::string& key) const = 0;
359 
363  virtual const std::string& getHandleName(InterfaceHandle handle) const = 0;
368  virtual void removeTarget(InterfaceHandle handle, std::string_view targetToRemove) = 0;
369 
373  virtual const std::string& getExtractionUnits(InterfaceHandle handle) const = 0;
382  virtual const std::string& getInjectionUnits(InterfaceHandle handle) const = 0;
383 
391  virtual const std::string& getInjectionType(InterfaceHandle handle) const = 0;
392 
399  virtual const std::string& getExtractionType(InterfaceHandle handle) const = 0;
400 
406  virtual void setHandleOption(InterfaceHandle handle, int32_t option, int32_t option_value) = 0;
407 
412  virtual int32_t getHandleOption(InterfaceHandle handle, int32_t option) const = 0;
413 
417  virtual void closeHandle(InterfaceHandle handle) = 0;
425  virtual void setValue(InterfaceHandle handle, const char* data, uint64_t len) = 0;
426 
433  virtual const std::shared_ptr<const SmallBuffer>& getValue(InterfaceHandle handle,
434  uint32_t* inputIndex = nullptr) = 0;
435 
440  virtual const std::vector<std::shared_ptr<const SmallBuffer>>&
441  getAllValues(InterfaceHandle handle) = 0;
442 
451  virtual const std::vector<InterfaceHandle>& getValueUpdates(LocalFederateId federateID) = 0;
452 
465  const std::string& name,
466  const std::string& type) = 0;
467 
475  const std::string& name,
476  const std::string& type) = 0;
477 
482  virtual InterfaceHandle getEndpoint(LocalFederateId federateID,
483  const std::string& name) const = 0;
484 
496  virtual InterfaceHandle registerCloningFilter(const std::string& filterName,
497  const std::string& type_in,
498  const std::string& type_out) = 0;
499 
511  virtual InterfaceHandle registerFilter(const std::string& filterName,
512  const std::string& type_in,
513  const std::string& type_out) = 0;
524  virtual void addDestinationTarget(InterfaceHandle handle,
525  std::string_view dest,
526  InterfaceType hint = InterfaceType::UNKNOWN) = 0;
527 
536  virtual void addSourceTarget(InterfaceHandle handle,
537  std::string_view name,
538  InterfaceType hint = InterfaceType::UNKNOWN) = 0;
539 
544  virtual const std::string& getDestinationTargets(InterfaceHandle handle) const = 0;
545 
549  virtual const std::string& getSourceTargets(InterfaceHandle handle) const = 0;
550 
555  virtual InterfaceHandle getFilter(const std::string& name) const = 0;
556 
566  virtual void addDependency(LocalFederateId federateID, const std::string& federateName) = 0;
567 
574  virtual void linkEndpoints(const std::string& source, const std::string& dest) = 0;
575 
578  virtual void makeConnections(const std::string& file) = 0;
579 
583  virtual void dataLink(const std::string& source, const std::string& target) = 0;
588  virtual void addSourceFilterToEndpoint(const std::string& filter,
589  const std::string& target) = 0;
594  virtual void addDestinationFilterToEndpoint(const std::string& filter,
595  const std::string& target) = 0;
596 
609  virtual void send(InterfaceHandle sourceHandle, const void* data, uint64_t length) = 0;
622  virtual void sendTo(InterfaceHandle sourceHandle,
623  const void* data,
624  uint64_t length,
625  std::string_view destination) = 0;
626 
642  virtual void
643  sendAt(InterfaceHandle sourceHandle, const void* data, uint64_t length, Time time) = 0;
644 
661  virtual void sendToAt(InterfaceHandle sourceHandle,
662  const void* data,
663  uint64_t length,
664  std::string_view destination,
665  Time time) = 0;
666 
673  virtual void sendMessage(InterfaceHandle sourceHandle, std::unique_ptr<Message> message) = 0;
674 
678  virtual uint64_t receiveCount(InterfaceHandle destination) = 0;
679 
684  virtual std::unique_ptr<Message> receive(InterfaceHandle destination) = 0;
685 
692  virtual std::unique_ptr<Message> receiveAny(LocalFederateId federateID,
693  InterfaceHandle& endpoint_id) = 0;
694 
698  virtual uint64_t receiveCountAny(LocalFederateId federateID) = 0;
699 
705  virtual void
706  logMessage(LocalFederateId federateID, int logLevel, const std::string& messageToLog) = 0;
707 
712  virtual void setFilterOperator(InterfaceHandle filter,
713  std::shared_ptr<FilterOperator> callback) = 0;
714 
722  virtual void setLoggingCallback(
723  LocalFederateId federateID,
724  std::function<void(int, std::string_view, std::string_view)> logFunction) = 0;
725 
727  virtual void setLoggingLevel(int logLevel) = 0;
728 
730  virtual void setLogFile(const std::string& lfile) = 0;
731 
737  virtual void setGlobal(const std::string& valueName, const std::string& value) = 0;
738 
747  virtual void sendCommand(const std::string& target,
748  const std::string& commandStr,
749  const std::string& source,
750  HelicsSequencingModes mode) = 0;
751 
754  virtual std::pair<std::string, std::string> getCommand(LocalFederateId federateID) = 0;
755 
758  virtual std::pair<std::string, std::string> waitCommand(LocalFederateId federateID) = 0;
759 
771  virtual std::string query(const std::string& target,
772  const std::string& queryStr,
773  HelicsSequencingModes mode) = 0;
774 
784  virtual void setQueryCallback(LocalFederateId federateID,
785  std::function<std::string(std::string_view)> queryFunction) = 0;
786 
792  virtual void setInterfaceInfo(InterfaceHandle handle, std::string info) = 0;
793 
799  virtual const std::string& getInterfaceInfo(InterfaceHandle handle) const = 0;
806  virtual void setInterfaceTag(InterfaceHandle handle,
807  const std::string& tag,
808  const std::string& value) = 0;
814  virtual const std::string& getInterfaceTag(InterfaceHandle handle,
815  const std::string& tag) const = 0;
816 
823  virtual void
824  setFederateTag(LocalFederateId fid, const std::string& tag, const std::string& value) = 0;
831  virtual const std::string& getFederateTag(LocalFederateId fid,
832  const std::string& tag) const = 0;
833 };
834 
835 } // namespace helics
helics::Core::getCurrentTime
virtual Time getCurrentTime(LocalFederateId federateID) const =0
helics::Core::getAllValues
virtual const std::vector< std::shared_ptr< const SmallBuffer > > & getAllValues(InterfaceHandle handle)=0
helics::Core::enterExecutingMode
virtual IterationResult enterExecutingMode(LocalFederateId federateID, IterationRequest iterate=NO_ITERATION)=0
helics::Core::setTimeProperty
virtual void setTimeProperty(LocalFederateId federateID, int32_t property, Time timeValue)=0
helics::Core::receiveCountAny
virtual uint64_t receiveCountAny(LocalFederateId federateID)=0
NO_ITERATION
constexpr auto NO_ITERATION
Definition: CoreTypes.hpp:109
helics::Core::setCoreReadyToInit
virtual void setCoreReadyToInit()=0
helics::Core::finalize
virtual void finalize(LocalFederateId federateID)=0
helics::Core::getValueUpdates
virtual const std::vector< InterfaceHandle > & getValueUpdates(LocalFederateId federateID)=0
helics::Core::getEndpoint
virtual InterfaceHandle getEndpoint(LocalFederateId federateID, const std::string &name) const =0
helics::Core::getFederateId
virtual LocalFederateId getFederateId(const std::string &name) const =0
helics::Core::isOpenToNewFederates
virtual bool isOpenToNewFederates() const =0
helics::Core::closeHandle
virtual void closeHandle(InterfaceHandle handle)=0
helics::Core::getErrorCode
virtual int getErrorCode() const =0
helics::Core::send
virtual void send(InterfaceHandle sourceHandle, const void *data, uint64_t length)=0
helics::Core::registerPublication
virtual InterfaceHandle registerPublication(LocalFederateId federateID, const std::string &key, const std::string &type, const std::string &units)=0
helics::Core::getHandleOption
virtual int32_t getHandleOption(InterfaceHandle handle, int32_t option) const =0
helics::Core::sendCommand
virtual void sendCommand(const std::string &target, const std::string &commandStr, const std::string &source, HelicsSequencingModes mode)=0
helics::Core::addSourceFilterToEndpoint
virtual void addSourceFilterToEndpoint(const std::string &filter, const std::string &target)=0
helics::Core::getSourceTargets
virtual const std::string & getSourceTargets(InterfaceHandle handle) const =0
helics::Core::configureFromArgs
virtual void configureFromArgs(int argc, char *argv[])=0
core-data.hpp
helics::InterfaceType
InterfaceType
Definition: CoreTypes.hpp:96
helics::Core::setIntegerProperty
virtual void setIntegerProperty(LocalFederateId federateID, int32_t property, int16_t propValue)=0
helics::Core::query
virtual std::string query(const std::string &target, const std::string &queryStr, HelicsSequencingModes mode)=0
helics::Core::localError
virtual void localError(LocalFederateId federateID, int32_t errorCode, const std::string &errorString)=0
helics::Core::getFilter
virtual InterfaceHandle getFilter(const std::string &name) const =0
helics::InterfaceHandle
Definition: LocalFederateId.hpp:65
helics::Core::isConfigured
virtual bool isConfigured() const =0
helics::Time
TimeRepresentation< count_time< 9 > > Time
Definition: helicsTime.hpp:27
helics::Core::receive
virtual std::unique_ptr< Message > receive(InterfaceHandle destination)=0
helics::Core::setFederateTag
virtual void setFederateTag(LocalFederateId fid, const std::string &tag, const std::string &value)=0
helics::Core::addSourceTarget
virtual void addSourceTarget(InterfaceHandle handle, std::string_view name, InterfaceType hint=InterfaceType::UNKNOWN)=0
helics::Core::getValue
virtual const std::shared_ptr< const SmallBuffer > & getValue(InterfaceHandle handle, uint32_t *inputIndex=nullptr)=0
helics::Core::getTimeProperty
virtual Time getTimeProperty(LocalFederateId federateID, int32_t property) const =0
helics::Core::sendToAt
virtual void sendToAt(InterfaceHandle sourceHandle, const void *data, uint64_t length, std::string_view destination, Time time)=0
helics::Core::linkEndpoints
virtual void linkEndpoints(const std::string &source, const std::string &dest)=0
helics::Core::getFederationSize
virtual int32_t getFederationSize()=0
helics::Core::getPublication
virtual InterfaceHandle getPublication(LocalFederateId federateID, const std::string &key) const =0
helics::Core::setValue
virtual void setValue(InterfaceHandle handle, const char *data, uint64_t len)=0
helics::Core::setInterfaceTag
virtual void setInterfaceTag(InterfaceHandle handle, const std::string &tag, const std::string &value)=0
helics::Core::getAddress
virtual const std::string & getAddress() const =0
helics::Core::getInterfaceTag
virtual const std::string & getInterfaceTag(InterfaceHandle handle, const std::string &tag) const =0
helics::Core::setQueryCallback
virtual void setQueryCallback(LocalFederateId federateID, std::function< std::string(std::string_view)> queryFunction)=0
helics::Core
Definition: core/Core.hpp:42
helics::Core::addDestinationFilterToEndpoint
virtual void addDestinationFilterToEndpoint(const std::string &filter, const std::string &target)=0
helics::Core::registerEndpoint
virtual InterfaceHandle registerEndpoint(LocalFederateId federateID, const std::string &name, const std::string &type)=0
helics::Core::getDestinationTargets
virtual const std::string & getDestinationTargets(InterfaceHandle handle) const =0
helics::Core::getExtractionType
virtual const std::string & getExtractionType(InterfaceHandle handle) const =0
helics::Core::getFederateTag
virtual const std::string & getFederateTag(LocalFederateId fid, const std::string &tag) const =0
helics::Core::isConnected
virtual bool isConnected() const =0
helics::Core::sendMessage
virtual void sendMessage(InterfaceHandle sourceHandle, std::unique_ptr< Message > message)=0
helics::Core::registerFederate
virtual LocalFederateId registerFederate(const std::string &name, const CoreFederateInfo &info)=0
helics::Core::configureFromVector
virtual void configureFromVector(std::vector< std::string > args)=0
helics::Core::receiveAny
virtual std::unique_ptr< Message > receiveAny(LocalFederateId federateID, InterfaceHandle &endpoint_id)=0
helics::Core::getCurrentReiteration
virtual uint64_t getCurrentReiteration(LocalFederateId federateID) const =0
helics::IterationRequest
IterationRequest
Definition: CoreTypes.hpp:89
helics::Core::setInterfaceInfo
virtual void setInterfaceInfo(InterfaceHandle handle, std::string info)=0
helics::Core::timeRequest
virtual Time timeRequest(LocalFederateId federateID, Time next)=0
helics::Core::getCommand
virtual std::pair< std::string, std::string > getCommand(LocalFederateId federateID)=0
helics::Core::registerFilter
virtual InterfaceHandle registerFilter(const std::string &filterName, const std::string &type_in, const std::string &type_out)=0
helics::Core::setGlobal
virtual void setGlobal(const std::string &valueName, const std::string &value)=0
helics::Core::globalError
virtual void globalError(LocalFederateId federateID, int32_t errorCode, const std::string &errorString)=0
helics::Core::getInjectionType
virtual const std::string & getInjectionType(InterfaceHandle handle) const =0
helics::Core::configure
virtual void configure(const std::string &configureString)=0
helics::Core::setFlagOption
virtual void setFlagOption(LocalFederateId federateID, int32_t flag, bool flagValue)=0
helics::Core::logMessage
virtual void logMessage(LocalFederateId federateID, int logLevel, const std::string &messageToLog)=0
helics::Core::sendAt
virtual void sendAt(InterfaceHandle sourceHandle, const void *data, uint64_t length, Time time)=0
helics::IterationResult
IterationResult
Definition: CoreTypes.hpp:80
helics::Core::Core
Core()=default
helics::Core::getInjectionUnits
virtual const std::string & getInjectionUnits(InterfaceHandle handle) const =0
helics::Core::requestTimeIterative
virtual iteration_time requestTimeIterative(LocalFederateId federateID, Time next, IterationRequest iterate)=0
HelicsSequencingModes
HelicsSequencingModes
Definition: helics_enums.h:363
helics::Core::getFlagOption
virtual bool getFlagOption(LocalFederateId federateID, int32_t flag) const =0
helics::Core::setFilterOperator
virtual void setFilterOperator(InterfaceHandle filter, std::shared_ptr< FilterOperator > callback)=0
helics::Core::getInterfaceInfo
virtual const std::string & getInterfaceInfo(InterfaceHandle handle) const =0
helics::Core::registerInput
virtual InterfaceHandle registerInput(LocalFederateId federateID, const std::string &key, const std::string &type, const std::string &units)=0
helics::Core::registerTargetedEndpoint
virtual InterfaceHandle registerTargetedEndpoint(LocalFederateId federateID, const std::string &name, const std::string &type)=0
helics::Core::getIdentifier
virtual const std::string & getIdentifier() const =0
helics::Core::addDestinationTarget
virtual void addDestinationTarget(InterfaceHandle handle, std::string_view dest, InterfaceType hint=InterfaceType::UNKNOWN)=0
helics::Core::receiveCount
virtual uint64_t receiveCount(InterfaceHandle destination)=0
helics::Core::sendTo
virtual void sendTo(InterfaceHandle sourceHandle, const void *data, uint64_t length, std::string_view destination)=0
helics::Core::getFederateName
virtual const std::string & getFederateName(LocalFederateId federateID) const =0
helics::Core::setLoggingLevel
virtual void setLoggingLevel(int logLevel)=0
helics::Core::getInput
virtual InterfaceHandle getInput(LocalFederateId federateID, const std::string &key) const =0
helics::Core::connect
virtual bool connect()=0
helics::Core::disconnect
virtual void disconnect()=0
helics
the main namespace for the helics co-simulation library User functions will be in the helics namespac...
Definition: AsyncFedCallInfo.hpp:14
helics::Core::setLogFile
virtual void setLogFile(const std::string &lfile)=0
helics::Core::getHandleName
virtual const std::string & getHandleName(InterfaceHandle handle) const =0
helics::Core::setHandleOption
virtual void setHandleOption(InterfaceHandle handle, int32_t option, int32_t option_value)=0
helics::CoreFederateInfo
Definition: CoreFederateInfo.hpp:16
helics::Core::addDependency
virtual void addDependency(LocalFederateId federateID, const std::string &federateName)=0
helics::iteration_time
Definition: helicsTime.hpp:47
helics::Core::dataLink
virtual void dataLink(const std::string &source, const std::string &target)=0
helics::LocalFederateId
Definition: LocalFederateId.hpp:22
helics::Core::registerCloningFilter
virtual InterfaceHandle registerCloningFilter(const std::string &filterName, const std::string &type_in, const std::string &type_out)=0
helics::Core::getExtractionUnits
virtual const std::string & getExtractionUnits(InterfaceHandle handle) const =0
helics::Core::getErrorMessage
virtual std::string getErrorMessage() const =0
helics::Core::waitForDisconnect
virtual bool waitForDisconnect(std::chrono::milliseconds msToWait=std::chrono::milliseconds(0)) const =0
helics::Core::~Core
virtual ~Core()=default
helics::Core::getIntegerProperty
virtual int16_t getIntegerProperty(LocalFederateId federateID, int32_t property) const =0
helics::Core::setLoggingCallback
virtual void setLoggingCallback(LocalFederateId federateID, std::function< void(int, std::string_view, std::string_view)> logFunction)=0
helics::Core::makeConnections
virtual void makeConnections(const std::string &file)=0
helics::Core::enterInitializingMode
virtual void enterInitializingMode(LocalFederateId federateID)=0
helics::Core::removeTarget
virtual void removeTarget(InterfaceHandle handle, std::string_view targetToRemove)=0
helics::Core::waitCommand
virtual std::pair< std::string, std::string > waitCommand(LocalFederateId federateID)=0