5#include "../VersionNumber.h"
7#include <boost/enable_shared_from_this.hpp>
8#include <boost/shared_ptr.hpp>
20 class MuxedInterruptDistributor;
21 class AsyncAccessorManager;
22 template<
typename BackendSpecificDataType>
38 std::function<std::unique_ptr<MuxedInterruptDistributor>(
41 static std::unique_ptr<MuxedInterruptDistributorFactory>
_instance;
44 std::vector<size_t>
const& subdomainID,
DeviceBackend& backend);
69 template<
typename DistributorType>
71 std::vector<size_t>
const& qualififedSubDomainId);
82 std::map<size_t, boost::weak_ptr<SubDomain<std::nullptr_t>>>
_subDomains;
88 std::vector<size_t>
_id;
90 boost::shared_ptr<SubDomain<std::nullptr_t>>
_parent;
The base class for backends providing IO functionality for the Device class.
Class for generating and holding version numbers without exposing a numeric representation.
static MuxedInterruptDistributorFactory & getInstance()
std::map< std::string, std::function< std::unique_ptr< MuxedInterruptDistributor >(std::string, boost::shared_ptr< SubDomain< std::nullptr_t > >)> > _creatorFunctions
Each controller type is registered via name and creator function.
boost::shared_ptr< MuxedInterruptDistributor > createMuxedInterruptDistributor(boost::shared_ptr< SubDomain< std::nullptr_t > > parent)
static std::pair< std::string, std::string > getInterruptControllerNameAndDescriptionFromCatalogue(std::vector< size_t > const &subdomainID, DeviceBackend &backend)
static std::unique_ptr< MuxedInterruptDistributorFactory > _instance
Interface base class for interrupt controller handlers.
virtual void handle(VersionNumber version)=0
The interrupt handling functions implements the handshake with the interrupt controller.
std::vector< size_t > _id
The ID of this controller handler.
boost::shared_ptr< SubDomain< std::nullptr_t > > _parent
void sendException(const std::exception_ptr &e)
virtual void activate(VersionNumber version)
virtual void activateSubDomain(SubDomain< std::nullptr_t > &subDomain, VersionNumber const &version)
Function to activate a (new) single SubDomain if the MuxedInterruptDistributor is already active.
virtual ~MuxedInterruptDistributor()=default
boost::shared_ptr< AsyncAccessorManager > getAccessorManager(std::vector< size_t > const &qualififedSubDomainId)
Get an AsyncAccessorManager of type DistributorType from the matching SubDomain.
boost::shared_ptr< Domain > _asyncDomain
std::map< size_t, boost::weak_ptr< SubDomain< std::nullptr_t > > > _subDomains
boost::shared_ptr< DeviceBackend > _backend
Send backend-specific asynchronous data to different distributors: