File indexing completed on 2024-04-06 12:03:50
0001 #ifndef DataFormats_Common_BaseHolder_h
0002 #define DataFormats_Common_BaseHolder_h
0003
0004 #include "DataFormats/Common/interface/CMS_CLASS_VERSION.h"
0005 #include "DataFormats/Common/interface/EDProductGetter.h"
0006
0007 #include <memory>
0008
0009 namespace edm {
0010 class ProductID;
0011
0012 namespace reftobase {
0013 class RefHolderBase;
0014 template <typename T>
0015 class BaseVectorHolder;
0016 class RefVectorHolderBase;
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027 template <typename T>
0028 class BaseHolder {
0029 public:
0030 BaseHolder();
0031 virtual ~BaseHolder();
0032 virtual BaseHolder<T>* clone() const = 0;
0033
0034 void swap(BaseHolder&);
0035
0036
0037
0038 virtual T const* getPtr() const = 0;
0039
0040
0041
0042 virtual ProductID id() const = 0;
0043 virtual size_t key() const = 0;
0044
0045
0046
0047
0048
0049
0050 virtual bool isEqualTo(BaseHolder<T> const& rhs) const = 0;
0051
0052 virtual std::unique_ptr<RefHolderBase> holder() const = 0;
0053
0054 virtual std::unique_ptr<BaseVectorHolder<T> > makeVectorHolder() const = 0;
0055
0056 virtual EDProductGetter const* productGetter() const = 0;
0057
0058
0059
0060 virtual bool isAvailable() const = 0;
0061
0062 virtual bool isTransient() const = 0;
0063
0064
0065 CMS_CLASS_VERSION(10)
0066
0067 protected:
0068
0069 BaseHolder(BaseHolder const& other);
0070 BaseHolder& operator=(BaseHolder const& rhs);
0071
0072 private:
0073 };
0074
0075
0076
0077
0078
0079 template <typename T>
0080 BaseHolder<T>::BaseHolder() {}
0081
0082 template <typename T>
0083 BaseHolder<T>::BaseHolder(BaseHolder const& ) {
0084
0085 }
0086
0087 template <typename T>
0088 BaseHolder<T>& BaseHolder<T>::operator=(BaseHolder<T> const& ) {
0089
0090 return *this;
0091 }
0092
0093 template <typename T>
0094 BaseHolder<T>::~BaseHolder() {
0095
0096 }
0097
0098 template <typename T>
0099 void BaseHolder<T>::swap(BaseHolder<T>& ) {
0100
0101 }
0102
0103
0104 template <typename T>
0105 inline void swap(BaseHolder<T>& lhs, BaseHolder<T>& rhs) {
0106 lhs.swap(rhs);
0107 }
0108 }
0109 }
0110
0111 #endif