Source · fairmq/shmem/
UnmanagedRegionImpl.hpublic header
Defines class fair::mq::shmem::UnmanagedRegionImpl.
Described in Unmanaged regions.
1/********************************************************************************2 * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *3 * *4 * This software is distributed under the terms of the *5 * GNU Lesser General Public Licence (LGPL) version 3, *6 * copied verbatim in the file "LICENSE" *7 ********************************************************************************/8 9#ifndef FAIR_MQ_SHMEM_UNMANAGEDREGIONIMPL_H_10#define FAIR_MQ_SHMEM_UNMANAGEDREGIONIMPL_H_11 12#include "Manager.h"13#include "UnmanagedRegion.h"14#include <fairmq/UnmanagedRegion.h>15 16#include <fairlogger/Logger.h>17 18#include <cstddef> // size_t19 20namespace fair::mq::shmem21{22 23class Message;24class Socket;25 26class UnmanagedRegionImpl final : public fair::mq::UnmanagedRegion27{28 friend class Message;29 friend class Socket;30 31 public:32 UnmanagedRegionImpl(Manager& manager,33 const size_t size,34 RegionCallback callback,35 RegionBulkCallback bulkCallback,36 fair::mq::RegionConfig cfg,37 fair::mq::TransportFactory* factory)38 : fair::mq::UnmanagedRegion(factory)39 , fManager(manager)40 {41 auto [regionPtr, regionId] = fManager.CreateRegion(size, callback, bulkCallback, std::move(cfg));42 fRegion = regionPtr;43 fRegionId = regionId;44 }45 46 UnmanagedRegionImpl(const UnmanagedRegionImpl&) = delete;47 UnmanagedRegionImpl(UnmanagedRegionImpl&&) = delete;48 UnmanagedRegionImpl& operator=(const UnmanagedRegionImpl&) = delete;49 UnmanagedRegionImpl& operator=(UnmanagedRegionImpl&&) = delete;50 51 void* GetData() const override { return fRegion->GetData(); }52 size_t GetSize() const override { return fRegion->GetSize(); }53 uint16_t GetId() const override { return fRegionId; }54 void SetLinger(uint32_t linger) override { fRegion->SetLinger(linger); }55 uint32_t GetLinger() const override { return fRegion->GetLinger(); }56 57 Transport GetType() const override { return fair::mq::Transport::SHM; }58 59 ~UnmanagedRegionImpl() override { fManager.RemoveRegion(fRegionId); }60 61 private:62 Manager& fManager;63 shmem::UnmanagedRegion* fRegion{nullptr};64 uint16_t fRegionId{0};65};66 67} // namespace fair::mq::shmem68 69#endif /* FAIR_MQ_SHMEM_UNMANAGEDREGIONIMPL_H_ */