00001 #ifndef DataFormats_Common_ProductData_h 00002 #define DataFormats_Common_ProductData_h 00003 00004 /*---------------------------------------------------------------------- 00005 00006 ProductData: A collection of information related to a single EDProduct. This 00007 is the storage unit of such information. 00008 00009 ----------------------------------------------------------------------*/ 00010 00011 #include "DataFormats/Provenance/interface/Provenance.h" 00012 #include "boost/shared_ptr.hpp" 00013 00014 namespace edm { 00015 class ConstBranchDescription; 00016 class WrapperOwningHolder; 00017 struct ProductData { 00018 ProductData(); 00019 00020 explicit ProductData(boost::shared_ptr<ConstBranchDescription> bd); 00021 00022 // For use by FWLite 00023 ProductData(void const* product, Provenance const& prov); 00024 00025 WrapperInterfaceBase const* getInterface() const { 00026 return prov_.product().getInterface(); 00027 } 00028 00029 boost::shared_ptr<ConstBranchDescription> const& branchDescription() const { 00030 return prov_.constBranchDescriptionPtr(); 00031 } 00032 00033 void swap(ProductData& other) { 00034 std::swap(wrapper_, other.wrapper_); 00035 prov_.swap(other.prov_); 00036 } 00037 00038 void resetBranchDescription(boost::shared_ptr<ConstBranchDescription> bd); 00039 00040 void resetProductData() { 00041 wrapper_.reset(); 00042 prov_.resetProductProvenance(); 00043 } 00044 00045 // NOTE: We should probably think hard about whether these 00046 // variables should be declared "mutable" as part of 00047 // the effort to make the Framework multithread capable ... 00048 00049 // "non-const data" (updated every event) 00050 mutable boost::shared_ptr<void const> wrapper_; 00051 mutable Provenance prov_; 00052 }; 00053 00054 // Free swap function 00055 inline void swap(ProductData& a, ProductData& b) { 00056 a.swap(b); 00057 } 00058 } 00059 #endif