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 }
0061 #endif