CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_5/src/Fireworks/Core/src/FWItemTVirtualCollectionProxyAccessor.cc

Go to the documentation of this file.
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 //