File indexing completed on 2023-03-17 10:49:25
0001 #ifndef DataFormats_Common_RefHolderBase_h
0002 #define DataFormats_Common_RefHolderBase_h
0003
0004
0005
0006
0007 #include <memory>
0008 #include <typeinfo>
0009
0010 namespace edm {
0011 class ProductID;
0012 class EDProductGetter;
0013 namespace reftobase {
0014
0015 class RefVectorHolderBase;
0016
0017 class RefHolderBase {
0018 public:
0019 RefHolderBase();
0020 template <class T>
0021 T const* getPtr() const;
0022 virtual ~RefHolderBase();
0023 virtual RefHolderBase* clone() const = 0;
0024
0025 virtual ProductID id() const = 0;
0026 virtual size_t key() const = 0;
0027
0028
0029
0030
0031 virtual bool isEqualTo(RefHolderBase const& rhs) const = 0;
0032
0033 virtual std::unique_ptr<RefVectorHolderBase> makeVectorHolder() const = 0;
0034 virtual EDProductGetter const* productGetter() const = 0;
0035
0036
0037
0038 virtual bool isAvailable() const = 0;
0039
0040 virtual bool isTransient() const = 0;
0041
0042 private:
0043
0044
0045
0046
0047 virtual void const* pointerToType(std::type_info const& toType) const = 0;
0048 };
0049
0050
0051
0052
0053
0054 inline RefHolderBase::~RefHolderBase() {}
0055
0056 template <class T>
0057 T const* RefHolderBase::getPtr() const {
0058 return static_cast<T const*>(pointerToType(typeid(T)));
0059 }
0060
0061 }
0062 }
0063
0064 #endif