Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-12-30 23:27:56

0001 #ifndef HeterogeneousCore_AlpakaCore_interface_alpaka_EDMetadataSentry_h
0002 #define HeterogeneousCore_AlpakaCore_interface_alpaka_EDMetadataSentry_h
0003 
0004 #include "FWCore/Utilities/interface/StreamID.h"
0005 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/EDMetadata.h"
0006 
0007 namespace ALPAKA_ACCELERATOR_NAMESPACE {
0008   namespace detail {
0009     /**
0010      * Helper class to be used in produce()
0011      *
0012      * TODO: not really a sentry as it doesn't do anything special in its destructor. Better name?
0013      */
0014     class EDMetadataSentry {
0015     public:
0016       // For normal module
0017       EDMetadataSentry(edm::StreamID stream, bool synchronize);
0018 
0019       // For ExternalWork-module's produce()
0020       EDMetadataSentry(std::shared_ptr<EDMetadata> metadata, bool synchronize)
0021           : metadata_(std::move(metadata)), synchronize_(synchronize) {}
0022 
0023       EDMetadataSentry(EDMetadataSentry const&) = delete;
0024       EDMetadataSentry& operator=(EDMetadataSentry const&) = delete;
0025       EDMetadataSentry(EDMetadataSentry&&) = delete;
0026       EDMetadataSentry& operator=(EDMetadataSentry&&) = delete;
0027 
0028       std::shared_ptr<EDMetadata> metadata() { return metadata_; }
0029 
0030       // true if asynchronous work was (possibly) launched
0031       void finish(bool launchedAsyncWork);
0032 
0033     private:
0034       std::shared_ptr<EDMetadata> metadata_;
0035       bool const synchronize_;
0036     };
0037   }  // namespace detail
0038 }  // namespace ALPAKA_ACCELERATOR_NAMESPACE
0039 
0040 #endif