Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-05-23 02:04:52

0001 #ifndef DataFormats_Common_RefCoreStreamer_h
0002 #define DataFormats_Common_RefCoreStreamer_h
0003 
0004 #include "TClassStreamer.h"
0005 #include "TClassRef.h"
0006 
0007 class TBuffer;
0008 
0009 namespace edm {
0010   class EDProductGetter;
0011   class RefCoreStreamer : public TClassStreamer {
0012   public:
0013     explicit RefCoreStreamer() : cl_("edm::RefCore") {}
0014 
0015     void operator()(TBuffer& R__b, void* objp) override;
0016 
0017     TClassStreamer* Generate() const override;
0018 
0019   private:
0020     TClassRef cl_;
0021   };
0022 
0023   class RefCoreWithIndexStreamer : public TClassStreamer {
0024   public:
0025     explicit RefCoreWithIndexStreamer() : cl_("edm::RefCoreWithIndex") {}
0026 
0027     void operator()(TBuffer& R__b, void* objp) override;
0028 
0029     TClassStreamer* Generate() const override;
0030 
0031   private:
0032     TClassRef cl_;
0033   };
0034 
0035   void setRefCoreStreamerInTClass();
0036 
0037   class RefCoreStreamerGuard {
0038   public:
0039     RefCoreStreamerGuard(EDProductGetter const* ep) { setRefCoreStreamer(ep); }
0040     ~RefCoreStreamerGuard() { unsetRefCoreStreamer(); }
0041     RefCoreStreamerGuard(RefCoreStreamerGuard const&) = delete;
0042     RefCoreStreamerGuard& operator=(RefCoreStreamerGuard const&) = delete;
0043     RefCoreStreamerGuard(RefCoreStreamerGuard&&) = delete;
0044     RefCoreStreamerGuard& operator=(RefCoreStreamerGuard&&) = delete;
0045 
0046   private:
0047     static void unsetRefCoreStreamer();
0048     static EDProductGetter const* setRefCoreStreamer(EDProductGetter const* ep);
0049   };
0050   class MultiThreadRefCoreStreamerGuard {
0051   public:
0052     MultiThreadRefCoreStreamerGuard(EDProductGetter const* ep) { setRefCoreStreamer(ep); }
0053     ~MultiThreadRefCoreStreamerGuard() { unsetRefCoreStreamer(); }
0054 
0055   private:
0056     static void setRefCoreStreamer(EDProductGetter const* ep);
0057     static void unsetRefCoreStreamer();
0058   };
0059 
0060 }  // namespace edm
0061 #endif