helics  3.3.0
core/Core.hpp
Go to the documentation of this file.
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 "LocalFederateId.hpp"
10 #include "core-data.hpp"
11 
12 #include <functional>
13 #include <memory>
14 #include <string>
15 #include <utility>
16 #include <vector>
17 
37 namespace helics {
38 class CoreFederateInfo;
39 
41 class Core {
42  public:
44  Core() = default;
46  virtual ~Core() = default;
47 
54  virtual void configure(std::string_view configureString) = 0;
61  virtual void configureFromArgs(int argc, char* argv[]) = 0;
68  virtual void configureFromVector(std::vector<std::string> args) = 0;
72  virtual bool isConfigured() const = 0;
73 
78  virtual bool connect() = 0;
82  virtual bool isConnected() const = 0;
83 
87  virtual void disconnect() = 0;
88 
89  /*return true if the core has an error*/
90  virtual bool hasError() const = 0;
94  virtual bool waitForDisconnect(
95  std::chrono::milliseconds msToWait = std::chrono::milliseconds(0)) const = 0;
96 
99  virtual bool isOpenToNewFederates() const = 0;
102  virtual const std::string& getIdentifier() const = 0;
104  virtual const std::string& getAddress() const = 0;
105 
112  virtual void globalError(LocalFederateId federateID,
113  int32_t errorCode,
114  std::string_view errorString) = 0;
115 
122  virtual void
123  localError(LocalFederateId federateID, int32_t errorCode, std::string_view errorString) = 0;
124 
126  virtual int getErrorCode() const = 0;
128  virtual std::string getErrorMessage() const = 0;
135  virtual void finalize(LocalFederateId federateID) = 0;
136 
160  virtual void enterInitializingMode(LocalFederateId federateID) = 0;
161 
165  virtual void setCoreReadyToInit() = 0;
166 
178  IterationRequest iterate = NO_ITERATION) = 0;
179 
188  virtual LocalFederateId registerFederate(std::string_view name,
189  const CoreFederateInfo& info) = 0;
190 
195  virtual const std::string& getFederateName(LocalFederateId federateID) const = 0;
196 
201  virtual LocalFederateId getFederateId(std::string_view name) const = 0;
202 
207  virtual int32_t getFederationSize() = 0;
208 
229  virtual Time timeRequest(LocalFederateId federateID, Time next) = 0;
230 
259  virtual iteration_time
260  requestTimeIterative(LocalFederateId federateID, Time next, IterationRequest iterate) = 0;
261 
265  virtual uint64_t getCurrentReiteration(LocalFederateId federateID) const = 0;
274  virtual void processCommunications(LocalFederateId fedId,
275  std::chrono::milliseconds msToWait) = 0;
281  virtual void setTimeProperty(LocalFederateId federateID, int32_t property, Time timeValue) = 0;
287  virtual Time getTimeProperty(LocalFederateId federateID, int32_t property) const = 0;
293  virtual void
294  setIntegerProperty(LocalFederateId federateID, int32_t property, int16_t propValue) = 0;
300  virtual int16_t getIntegerProperty(LocalFederateId federateID, int32_t property) const = 0;
305  virtual Time getCurrentTime(LocalFederateId federateID) const = 0;
306 
313  virtual void setFlagOption(LocalFederateId federateID, int32_t flag, bool flagValue) = 0;
314 
321  virtual bool getFlagOption(LocalFederateId federateID, int32_t flag) const = 0;
337  std::string_view key,
338  std::string_view type,
339  std::string_view units) = 0;
340 
346  std::string_view key) const = 0;
347 
357  virtual InterfaceHandle registerInput(LocalFederateId federateID,
358  std::string_view key,
359  std::string_view type,
360  std::string_view units) = 0;
365  virtual InterfaceHandle getInput(LocalFederateId federateID, std::string_view key) const = 0;
366 
370  virtual const std::string& getHandleName(InterfaceHandle handle) const = 0;
375  virtual void removeTarget(InterfaceHandle handle, std::string_view targetToRemove) = 0;
376 
380  virtual const std::string& getExtractionUnits(InterfaceHandle handle) const = 0;
389  virtual const std::string& getInjectionUnits(InterfaceHandle handle) const = 0;
390 
398  virtual const std::string& getInjectionType(InterfaceHandle handle) const = 0;
399 
406  virtual const std::string& getExtractionType(InterfaceHandle handle) const = 0;
407 
413  virtual void setHandleOption(InterfaceHandle handle, int32_t option, int32_t option_value) = 0;
414 
419  virtual int32_t getHandleOption(InterfaceHandle handle, int32_t option) const = 0;
420 
424  virtual void closeHandle(InterfaceHandle handle) = 0;
432  virtual void setValue(InterfaceHandle handle, const char* data, uint64_t len) = 0;
433 
440  virtual const std::shared_ptr<const SmallBuffer>& getValue(InterfaceHandle handle,
441  uint32_t* inputIndex = nullptr) = 0;
442 
447  virtual const std::vector<std::shared_ptr<const SmallBuffer>>&
448  getAllValues(InterfaceHandle handle) = 0;
449 
458  virtual const std::vector<InterfaceHandle>& getValueUpdates(LocalFederateId federateID) = 0;
459 
472  std::string_view name,
473  std::string_view type) = 0;
474 
482  std::string_view name,
483  std::string_view type) = 0;
484 
489  virtual InterfaceHandle getEndpoint(LocalFederateId federateID,
490  std::string_view name) const = 0;
491 
503  virtual InterfaceHandle registerCloningFilter(std::string_view filterName,
504  std::string_view type_in,
505  std::string_view type_out) = 0;
506 
518  virtual InterfaceHandle registerFilter(std::string_view filterName,
519  std::string_view type_in,
520  std::string_view type_out) = 0;
521 
531  virtual InterfaceHandle registerTranslator(std::string_view translatorName,
532  std::string_view endpointType,
533  std::string_view units) = 0;
534 
546  virtual void addDestinationTarget(InterfaceHandle handle,
547  std::string_view dest,
548  InterfaceType hint = InterfaceType::UNKNOWN) = 0;
549 
559  virtual void addSourceTarget(InterfaceHandle handle,
560  std::string_view name,
561  InterfaceType hint = InterfaceType::UNKNOWN) = 0;
562 
567  virtual const std::string& getDestinationTargets(InterfaceHandle handle) const = 0;
568 
572  virtual const std::string& getSourceTargets(InterfaceHandle handle) const = 0;
573 
578  virtual InterfaceHandle getFilter(std::string_view name) const = 0;
579 
584  virtual InterfaceHandle getTranslator(std::string_view name) const = 0;
585 
595  virtual void addDependency(LocalFederateId federateID, std::string_view federateName) = 0;
596 
603  virtual void linkEndpoints(std::string_view source, std::string_view dest) = 0;
604 
610  virtual void addAlias(std::string_view interfaceKey, std::string_view alias) = 0;
611 
614  virtual void makeConnections(const std::string& file) = 0;
615 
619  virtual void dataLink(std::string_view source, std::string_view target) = 0;
624  virtual void addSourceFilterToEndpoint(std::string_view filter, std::string_view target) = 0;
629  virtual void addDestinationFilterToEndpoint(std::string_view filter,
630  std::string_view target) = 0;
631 
644  virtual void send(InterfaceHandle sourceHandle, const void* data, uint64_t length) = 0;
657  virtual void sendTo(InterfaceHandle sourceHandle,
658  const void* data,
659  uint64_t length,
660  std::string_view destination) = 0;
661 
677  virtual void
678  sendAt(InterfaceHandle sourceHandle, const void* data, uint64_t length, Time time) = 0;
679 
696  virtual void sendToAt(InterfaceHandle sourceHandle,
697  const void* data,
698  uint64_t length,
699  std::string_view destination,
700  Time time) = 0;
701 
708  virtual void sendMessage(InterfaceHandle sourceHandle, std::unique_ptr<Message> message) = 0;
709 
713  virtual uint64_t receiveCount(InterfaceHandle destination) = 0;
714 
719  virtual std::unique_ptr<Message> receive(InterfaceHandle destination) = 0;
720 
727  virtual std::unique_ptr<Message> receiveAny(LocalFederateId federateID,
728  InterfaceHandle& endpoint_id) = 0;
729 
733  virtual uint64_t receiveCountAny(LocalFederateId federateID) = 0;
734 
740  virtual void
741  logMessage(LocalFederateId federateID, int logLevel, std::string_view messageToLog) = 0;
742 
747  virtual void setFilterOperator(InterfaceHandle filter,
748  std::shared_ptr<FilterOperator> callback) = 0;
749 
754  virtual void setTranslatorOperator(InterfaceHandle translator,
755  std::shared_ptr<TranslatorOperator> callback) = 0;
756 
764  virtual void setLoggingCallback(
765  LocalFederateId federateID,
766  std::function<void(int, std::string_view, std::string_view)> logFunction) = 0;
767 
769  virtual void setLoggingLevel(int logLevel) = 0;
770 
772  virtual void setLogFile(std::string_view lfile) = 0;
773 
779  virtual void setGlobal(std::string_view valueName, std::string_view value) = 0;
780 
789  virtual void sendCommand(std::string_view target,
790  std::string_view commandStr,
791  std::string_view source,
792  HelicsSequencingModes mode) = 0;
793 
796  virtual std::pair<std::string, std::string> getCommand(LocalFederateId federateID) = 0;
797 
800  virtual std::pair<std::string, std::string> waitCommand(LocalFederateId federateID) = 0;
801 
813  virtual std::string
814  query(std::string_view target, std::string_view queryStr, HelicsSequencingModes mode) = 0;
815 
825  virtual void setQueryCallback(LocalFederateId federateID,
826  std::function<std::string(std::string_view)> queryFunction) = 0;
827 
833  virtual void setInterfaceInfo(InterfaceHandle handle, std::string_view info) = 0;
834 
840  virtual const std::string& getInterfaceInfo(InterfaceHandle handle) const = 0;
847  virtual void
848  setInterfaceTag(InterfaceHandle handle, std::string_view tag, std::string_view value) = 0;
854  virtual const std::string& getInterfaceTag(InterfaceHandle handle,
855  std::string_view tag) const = 0;
856 
863  virtual void
864  setFederateTag(LocalFederateId fid, std::string_view tag, std::string_view value) = 0;
871  virtual const std::string& getFederateTag(LocalFederateId fid, std::string_view tag) const = 0;
872 };
873 
874 } // 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::processCommunications
virtual void processCommunications(LocalFederateId fedId, std::chrono::milliseconds msToWait)=0
helics::Core::setTimeProperty
virtual void setTimeProperty(LocalFederateId federateID, int32_t property, Time timeValue)=0
helics::Core::getEndpoint
virtual InterfaceHandle getEndpoint(LocalFederateId federateID, std::string_view name) const =0
helics::Core::receiveCountAny
virtual uint64_t receiveCountAny(LocalFederateId federateID)=0
NO_ITERATION
constexpr auto NO_ITERATION
simplified alias to indicate that no iterations are needed
Definition: CoreTypes.hpp:112
helics::Core::getPublication
virtual InterfaceHandle getPublication(LocalFederateId federateID, std::string_view key) const =0
helics::Core::setCoreReadyToInit
virtual void setCoreReadyToInit()=0
helics::Core::finalize
virtual void finalize(LocalFederateId federateID)=0
helics::Core::setInterfaceTag
virtual void setInterfaceTag(InterfaceHandle handle, std::string_view tag, std::string_view value)=0
helics::Core::getInput
virtual InterfaceHandle getInput(LocalFederateId federateID, std::string_view key) const =0
helics::Core::getValueUpdates
virtual const std::vector< InterfaceHandle > & getValueUpdates(LocalFederateId federateID)=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::getHandleOption
virtual int32_t getHandleOption(InterfaceHandle handle, int32_t option) const =0
helics::Core::query
virtual std::string query(std::string_view target, std::string_view queryStr, HelicsSequencingModes mode)=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:99
helics::Core::setIntegerProperty
virtual void setIntegerProperty(LocalFederateId federateID, int32_t property, int16_t propValue)=0
helics::Core::logMessage
virtual void logMessage(LocalFederateId federateID, int logLevel, std::string_view messageToLog)=0
helics::Core::registerEndpoint
virtual InterfaceHandle registerEndpoint(LocalFederateId federateID, std::string_view name, std::string_view type)=0
helics::InterfaceHandle
Definition: LocalFederateId.hpp:65
helics::Core::isConfigured
virtual bool isConfigured() const =0
helics::Core::registerPublication
virtual InterfaceHandle registerPublication(LocalFederateId federateID, std::string_view key, std::string_view type, std::string_view units)=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::sendCommand
virtual void sendCommand(std::string_view target, std::string_view commandStr, std::string_view source, HelicsSequencingModes mode)=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::registerCloningFilter
virtual InterfaceHandle registerCloningFilter(std::string_view filterName, std::string_view type_in, std::string_view type_out)=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::getFederationSize
virtual int32_t getFederationSize()=0
helics::Core::setValue
virtual void setValue(InterfaceHandle handle, const char *data, uint64_t len)=0
helics::Core::getAddress
virtual const std::string & getAddress() const =0
helics::Core::setQueryCallback
virtual void setQueryCallback(LocalFederateId federateID, std::function< std::string(std::string_view)> queryFunction)=0
helics::Core::setGlobal
virtual void setGlobal(std::string_view valueName, std::string_view value)=0
helics::Core::localError
virtual void localError(LocalFederateId federateID, int32_t errorCode, std::string_view errorString)=0
helics::Core
Definition: core/Core.hpp:41
helics::Core::getTranslator
virtual InterfaceHandle getTranslator(std::string_view name) const =0
helics::Core::addSourceFilterToEndpoint
virtual void addSourceFilterToEndpoint(std::string_view filter, std::string_view target)=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::isConnected
virtual bool isConnected() const =0
helics::Core::sendMessage
virtual void sendMessage(InterfaceHandle sourceHandle, std::unique_ptr< Message > message)=0
helics::Core::getFederateId
virtual LocalFederateId getFederateId(std::string_view name) const =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:92
helics::Core::timeRequest
virtual Time timeRequest(LocalFederateId federateID, Time next)=0
helics::Core::setLogFile
virtual void setLogFile(std::string_view lfile)=0
helics::Core::getCommand
virtual std::pair< std::string, std::string > getCommand(LocalFederateId federateID)=0
helics::Core::getInjectionType
virtual const std::string & getInjectionType(InterfaceHandle handle) const =0
helics::Core::setFlagOption
virtual void setFlagOption(LocalFederateId federateID, int32_t flag, bool flagValue)=0
helics::Core::sendAt
virtual void sendAt(InterfaceHandle sourceHandle, const void *data, uint64_t length, Time time)=0
helics::IterationResult
IterationResult
Definition: CoreTypes.hpp:83
helics::Core::Core
Core()=default
helics::Core::getInjectionUnits
virtual const std::string & getInjectionUnits(InterfaceHandle handle) const =0
helics::Core::registerTranslator
virtual InterfaceHandle registerTranslator(std::string_view translatorName, std::string_view endpointType, std::string_view units)=0
helics::Core::requestTimeIterative
virtual iteration_time requestTimeIterative(LocalFederateId federateID, Time next, IterationRequest iterate)=0
helics::Core::configure
virtual void configure(std::string_view configureString)=0
HelicsSequencingModes
HelicsSequencingModes
Definition: helics_enums.h:395
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::getIdentifier
virtual const std::string & getIdentifier() const =0
helics::Core::linkEndpoints
virtual void linkEndpoints(std::string_view source, std::string_view dest)=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::globalError
virtual void globalError(LocalFederateId federateID, int32_t errorCode, std::string_view errorString)=0
helics::Core::getFederateName
virtual const std::string & getFederateName(LocalFederateId federateID) const =0
helics::Core::setLoggingLevel
virtual void setLoggingLevel(int logLevel)=0
helics::Core::addAlias
virtual void addAlias(std::string_view interfaceKey, std::string_view alias)=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::setInterfaceInfo
virtual void setInterfaceInfo(InterfaceHandle handle, std::string_view info)=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::iteration_time
Definition: helicsTime.hpp:49
helics::Core::registerTargetedEndpoint
virtual InterfaceHandle registerTargetedEndpoint(LocalFederateId federateID, std::string_view name, std::string_view type)=0
helics::LocalFederateId
Definition: LocalFederateId.hpp:22
helics::Core::registerFilter
virtual InterfaceHandle registerFilter(std::string_view filterName, std::string_view type_in, std::string_view 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::dataLink
virtual void dataLink(std::string_view source, std::string_view target)=0
helics::Core::getFederateTag
virtual const std::string & getFederateTag(LocalFederateId fid, std::string_view tag) const =0
helics::Core::~Core
virtual ~Core()=default
helics::Core::getIntegerProperty
virtual int16_t getIntegerProperty(LocalFederateId federateID, int32_t property) const =0
helics::Core::getInterfaceTag
virtual const std::string & getInterfaceTag(InterfaceHandle handle, std::string_view tag) const =0
helics::Core::registerInput
virtual InterfaceHandle registerInput(LocalFederateId federateID, std::string_view key, std::string_view type, std::string_view units)=0
helics::Core::setLoggingCallback
virtual void setLoggingCallback(LocalFederateId federateID, std::function< void(int, std::string_view, std::string_view)> logFunction)=0
helics::Core::addDestinationFilterToEndpoint
virtual void addDestinationFilterToEndpoint(std::string_view filter, std::string_view target)=0
helics::Core::setFederateTag
virtual void setFederateTag(LocalFederateId fid, std::string_view tag, std::string_view value)=0
helics::Core::getFilter
virtual InterfaceHandle getFilter(std::string_view name) const =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::registerFederate
virtual LocalFederateId registerFederate(std::string_view name, const CoreFederateInfo &info)=0
helics::Core::setTranslatorOperator
virtual void setTranslatorOperator(InterfaceHandle translator, std::shared_ptr< TranslatorOperator > callback)=0
helics::Core::addDependency
virtual void addDependency(LocalFederateId federateID, std::string_view federateName)=0
helics::Core::waitCommand
virtual std::pair< std::string, std::string > waitCommand(LocalFederateId federateID)=0