![]() |
![]() |
00001 // -*- C++ -*- 00002 // 00003 // Package: Core 00004 // Class : FWItemTVirtualCollectionProxyAccessor 00005 // 00006 // Implementation: 00007 // <Notes on implementation> 00008 // 00009 // Original Author: Chris Jones 00010 // Created: Sat Oct 18 08:43:47 EDT 2008 00011 // $Id: FWItemTVirtualCollectionProxyAccessor.cc,v 1.11 2013/02/10 22:12:04 wmtan Exp $ 00012 // 00013 00014 // system include files 00015 #include <cassert> 00016 #include "FWCore/Utilities/interface/ObjectWithDict.h" 00017 #include "FWCore/Utilities/interface/TypeWithDict.h" 00018 #include "TVirtualCollectionProxy.h" 00019 00020 // user include files 00021 #include "Fireworks/Core/src/FWItemTVirtualCollectionProxyAccessor.h" 00022 00023 00024 // 00025 // constants, enums and typedefs 00026 // 00027 00028 // 00029 // static data member definitions 00030 // 00031 00032 // 00033 // constructors and destructor 00034 // 00035 FWItemTVirtualCollectionProxyAccessor::FWItemTVirtualCollectionProxyAccessor( 00036 const TClass* iType, 00037 boost::shared_ptr<TVirtualCollectionProxy> iProxy, 00038 size_t iOffset) 00039 : m_type(iType), 00040 m_colProxy(iProxy), 00041 m_data(0), 00042 m_offset(iOffset) 00043 { 00044 } 00045 00046 // FWItemTVirtualCollectionProxyAccessor::FWItemTVirtualCollectionProxyAccessor(const FWItemTVirtualCollectionProxyAccessor& rhs) 00047 // { 00048 // // do actual copying here; 00049 // } 00050 00051 FWItemTVirtualCollectionProxyAccessor::~FWItemTVirtualCollectionProxyAccessor() 00052 { 00053 } 00054 00055 // 00056 // assignment operators 00057 // 00058 // const FWItemTVirtualCollectionProxyAccessor& FWItemTVirtualCollectionProxyAccessor::operator=(const FWItemTVirtualCollectionProxyAccessor& rhs) 00059 // { 00060 // //An exception safe implementation is 00061 // FWItemTVirtualCollectionProxyAccessor temp(rhs); 00062 // swap(rhs); 00063 // 00064 // return *this; 00065 // } 00066 00067 // 00068 // member functions 00069 // 00070 void 00071 FWItemTVirtualCollectionProxyAccessor::setData(const edm::ObjectWithDict& product) 00072 { 00073 if (product.address() == 0) 00074 { 00075 reset(); 00076 return; 00077 } 00078 00079 m_data = product.address(); 00080 assert(0!=m_data); 00081 m_colProxy->PushProxy(static_cast<char*>(const_cast<void*>(m_data))+m_offset); 00082 } 00083 00084 void 00085 FWItemTVirtualCollectionProxyAccessor::reset() 00086 { 00087 if (0 != m_data) 00088 { 00089 m_data=0; 00090 m_colProxy->PopProxy(); 00091 } 00092 } 00093 00094 // 00095 // const member functions 00096 // 00097 const void* 00098 FWItemTVirtualCollectionProxyAccessor::modelData(int iIndex) const 00099 { 00100 if ( 0 == m_data) { return m_data; } 00101 return m_colProxy->At(iIndex); 00102 } 00103 00104 const void* 00105 FWItemTVirtualCollectionProxyAccessor::data() const 00106 { 00107 return m_data; 00108 } 00109 00110 unsigned int 00111 FWItemTVirtualCollectionProxyAccessor::size() const 00112 { 00113 if(m_data==0) { 00114 return 0; 00115 } 00116 return m_colProxy->Size(); 00117 } 00118 00119 const TClass* 00120 FWItemTVirtualCollectionProxyAccessor::modelType() const 00121 { 00122 return m_colProxy->GetValueClass(); 00123 } 00124 00125 const TClass* 00126 FWItemTVirtualCollectionProxyAccessor::type() const 00127 { 00128 return m_type; 00129 } 00130 00131 bool 00132 FWItemTVirtualCollectionProxyAccessor::isCollection() const 00133 { 00134 return true; 00135 } 00136 00137 // 00138 // static member functions 00139 //