Go to the documentation of this file.00001 #ifndef DataFormats_Common_OutputHandle_h
00002 #define DataFormats_Common_OutputHandle_h
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #include "DataFormats/Common/interface/WrapperHolder.h"
00028 #include "DataFormats/Provenance/interface/ProductProvenance.h"
00029
00030 #include "boost/shared_ptr.hpp"
00031
00032 namespace cms {
00033 class Exception;
00034 }
00035
00036 namespace edm {
00037 class ConstBranchDescription;
00038 class WrapperInterfaceBase;
00039 class OutputHandle {
00040 public:
00041 OutputHandle() :
00042 product_(),
00043 desc_(0),
00044 productProvenance_(0) {}
00045
00046 OutputHandle(OutputHandle const& h) :
00047 product_(h.product_),
00048 desc_(h.desc_),
00049 productProvenance_(h.productProvenance_),
00050 whyFailed_(h.whyFailed_){}
00051
00052 OutputHandle(WrapperHolder const& product, ConstBranchDescription const* desc, ProductProvenance* productProvenance) :
00053 product_(product),
00054 desc_(desc),
00055 productProvenance_(productProvenance) {}
00056
00058 OutputHandle(boost::shared_ptr<cms::Exception> const& iWhyFailed):
00059 product_(),
00060 desc_(0),
00061 productProvenance_(0),
00062 whyFailed_(iWhyFailed) {}
00063
00064 ~OutputHandle() {}
00065
00066 void swap(OutputHandle& other) {
00067 using std::swap;
00068 std::swap(product_, other.product_);
00069 std::swap(desc_, other.desc_);
00070 std::swap(productProvenance_, other.productProvenance_);
00071 swap(whyFailed_,other.whyFailed_);
00072 }
00073
00074
00075 OutputHandle& operator=(OutputHandle const& rhs) {
00076 OutputHandle temp(rhs);
00077 this->swap(temp);
00078 return *this;
00079 }
00080
00081 bool isValid() const {
00082 return product_.isValid() && desc_ &&productProvenance_;
00083 }
00084
00085 bool failedToGet() const {
00086 return 0 != whyFailed_.get();
00087 }
00088
00089 void const* wrapper() const {
00090 return product_.wrapper();
00091 }
00092
00093 WrapperHolder product() const {
00094 return product_;
00095 }
00096
00097 boost::shared_ptr<cms::Exception> whyFailed() const {
00098 return whyFailed_;
00099 }
00100
00101 ProductProvenance const* productProvenance() const {
00102 return productProvenance_;
00103 }
00104
00105 ConstBranchDescription const* desc() const {
00106 return desc_;
00107 }
00108
00109 private:
00110 WrapperHolder product_;
00111 ConstBranchDescription const* desc_;
00112 ProductProvenance* productProvenance_;
00113 boost::shared_ptr<cms::Exception> whyFailed_;
00114 };
00115
00116
00117 inline
00118 void
00119 swap(OutputHandle& a, OutputHandle& b) {
00120 a.swap(b);
00121 }
00122 }
00123
00124 #endif