|
ChimeraTK-DeviceAccess
03.18.00
|
Go to the documentation of this file.
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;
virtual void handle(VersionNumber version)=0
The interrupt handling functions implements the handshake with the interrupt controller.
void sendException(const std::exception_ptr &e)
boost::shared_ptr< MuxedInterruptDistributor > createMuxedInterruptDistributor(boost::shared_ptr< SubDomain< std::nullptr_t >> parent)
Send backend-specific asynchronous data to different distributors:
static MuxedInterruptDistributorFactory & getInstance()
MuxedInterruptDistributor(boost::shared_ptr< SubDomain< std::nullptr_t >> parent)
MuxedInterruptDistributor classes must only be constructed inside and held by a DeviceBackend,...
std::vector< size_t > _id
The ID of this controller handler.
boost::shared_ptr< AsyncAccessorManager > getAccessorManager(std::vector< size_t > const &qualififedSubDomainId)
Get an AsyncAccessorManager of type DistributorType from the matching SubDomain.
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.
The base class for backends providing IO functionality for the Device class.
boost::shared_ptr< Domain > _asyncDomain
static std::pair< std::string, std::string > getInterruptControllerNameAndDescriptionFromCatalogue(std::vector< size_t > const &subdomainID, DeviceBackend &backend)
Interface base class for interrupt controller handlers.
static std::unique_ptr< MuxedInterruptDistributorFactory > _instance
Class for generating and holding version numbers without exposing a numeric representation.
virtual void activateSubDomain(SubDomain< std::nullptr_t > &subDomain, VersionNumber const &version)
Function to activate a (new) single SubDomain if the MuxedInterruptDistributor is already active.
boost::shared_ptr< SubDomain< std::nullptr_t > > _parent
virtual ~MuxedInterruptDistributor()=default
boost::shared_ptr< DeviceBackend > _backend
The Domain is the thread-safe entry point for each distribution tree.
virtual void activate(VersionNumber version)
std::map< size_t, boost::weak_ptr< SubDomain< std::nullptr_t > > > _subDomains