File indexing completed on 2024-04-06 12:03:52
0001 #ifndef DataFormats_Common_OrphanHandleBase_h
0002 #define DataFormats_Common_OrphanHandleBase_h
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023 #include "DataFormats/Provenance/interface/ProductID.h"
0024 #include <cassert>
0025 #include <algorithm>
0026
0027 namespace edm {
0028 class OrphanHandleBase {
0029 public:
0030 OrphanHandleBase() : product_(), id_(ProductID()) {}
0031
0032 OrphanHandleBase(void const* iProd, ProductID const& iId) : product_(iProd), id_(iId) { assert(iProd); }
0033
0034 void clear() {
0035 product_ = nullptr;
0036 id_ = ProductID();
0037 }
0038
0039 void swap(OrphanHandleBase& other) {
0040 using std::swap;
0041 swap(product_, other.product_);
0042 std::swap(id_, other.id_);
0043 }
0044
0045 bool isValid() const { return product_ && id_ != ProductID(); }
0046
0047 ProductID id() const;
0048
0049 protected:
0050 void const* productStorage() const;
0051
0052 private:
0053 void const* product_;
0054 ProductID id_;
0055 };
0056
0057
0058 inline void swap(OrphanHandleBase& a, OrphanHandleBase& b) { a.swap(b); }
0059 }
0060
0061 #endif