mirror of
https://github.com/FairRootGroup/FairMQ.git
synced 2025-10-16 10:01:47 +00:00
shm: add APIs for implementing keep-alive process
This commit is contained in:
committed by
Dennis Klein
parent
eb4620b1ec
commit
692576a5b1
71
fairmq/shmem/UnmanagedRegionImpl.h
Normal file
71
fairmq/shmem/UnmanagedRegionImpl.h
Normal file
@@ -0,0 +1,71 @@
|
||||
/********************************************************************************
|
||||
* Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *
|
||||
* *
|
||||
* This software is distributed under the terms of the *
|
||||
* GNU Lesser General Public Licence (LGPL) version 3, *
|
||||
* copied verbatim in the file "LICENSE" *
|
||||
********************************************************************************/
|
||||
|
||||
#ifndef FAIR_MQ_SHMEM_UNMANAGEDREGIONIMPL_H_
|
||||
#define FAIR_MQ_SHMEM_UNMANAGEDREGIONIMPL_H_
|
||||
|
||||
#include "Manager.h"
|
||||
#include "UnmanagedRegion.h"
|
||||
#include <fairmq/UnmanagedRegion.h>
|
||||
|
||||
#include <fairlogger/Logger.h>
|
||||
|
||||
#include <cstddef> // size_t
|
||||
|
||||
namespace fair::mq::shmem
|
||||
{
|
||||
|
||||
class Message;
|
||||
class Socket;
|
||||
|
||||
class UnmanagedRegionImpl final : public fair::mq::UnmanagedRegion
|
||||
{
|
||||
friend class Message;
|
||||
friend class Socket;
|
||||
|
||||
public:
|
||||
UnmanagedRegionImpl(Manager& manager,
|
||||
const size_t size,
|
||||
RegionCallback callback,
|
||||
RegionBulkCallback bulkCallback,
|
||||
fair::mq::RegionConfig cfg,
|
||||
FairMQTransportFactory* factory)
|
||||
: fair::mq::UnmanagedRegion(factory)
|
||||
, fManager(manager)
|
||||
, fRegion(nullptr)
|
||||
, fRegionId(0)
|
||||
{
|
||||
auto result = fManager.CreateRegion(size, callback, bulkCallback, std::move(cfg));
|
||||
fRegion = result.first;
|
||||
fRegionId = result.second;
|
||||
}
|
||||
|
||||
UnmanagedRegionImpl(const UnmanagedRegionImpl&) = delete;
|
||||
UnmanagedRegionImpl(UnmanagedRegionImpl&&) = delete;
|
||||
UnmanagedRegionImpl& operator=(const UnmanagedRegionImpl&) = delete;
|
||||
UnmanagedRegionImpl& operator=(UnmanagedRegionImpl&&) = delete;
|
||||
|
||||
void* GetData() const override { return fRegion->GetData(); }
|
||||
size_t GetSize() const override { return fRegion->GetSize(); }
|
||||
uint16_t GetId() const override { return fRegionId; }
|
||||
void SetLinger(uint32_t linger) override { fRegion->SetLinger(linger); }
|
||||
uint32_t GetLinger() const override { return fRegion->GetLinger(); }
|
||||
|
||||
Transport GetType() const override { return fair::mq::Transport::SHM; }
|
||||
|
||||
~UnmanagedRegionImpl() override { fManager.RemoveRegion(fRegionId); }
|
||||
|
||||
private:
|
||||
Manager& fManager;
|
||||
shmem::UnmanagedRegion* fRegion;
|
||||
uint16_t fRegionId;
|
||||
};
|
||||
|
||||
} // namespace fair::mq::shmem
|
||||
|
||||
#endif /* FAIR_MQ_SHMEM_UNMANAGEDREGIONIMPL_H_ */
|
Reference in New Issue
Block a user