CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch13/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.7 2010/11/01 14:48:19 matevz Exp $
00012 //
00013 
00014 // system include files
00015 #include "Reflex/Object.h"
00016 #include "TVirtualCollectionProxy.h"
00017 
00018 // user include files
00019 #include "Fireworks/Core/src/FWItemTVirtualCollectionProxyAccessor.h"
00020 
00021 
00022 //
00023 // constants, enums and typedefs
00024 //
00025 
00026 //
00027 // static data member definitions
00028 //
00029 
00030 //
00031 // constructors and destructor
00032 //
00033 FWItemTVirtualCollectionProxyAccessor::FWItemTVirtualCollectionProxyAccessor(
00034    const TClass* iType,
00035    boost::shared_ptr<TVirtualCollectionProxy> iProxy,
00036    size_t iOffset)
00037    : m_type(iType),
00038      m_colProxy(iProxy),
00039      m_data(0),
00040      m_offset(iOffset)
00041 {
00042 }
00043 
00044 // FWItemTVirtualCollectionProxyAccessor::FWItemTVirtualCollectionProxyAccessor(const FWItemTVirtualCollectionProxyAccessor& rhs)
00045 // {
00046 //    // do actual copying here;
00047 // }
00048 
00049 FWItemTVirtualCollectionProxyAccessor::~FWItemTVirtualCollectionProxyAccessor()
00050 {
00051 }
00052 
00053 //
00054 // assignment operators
00055 //
00056 // const FWItemTVirtualCollectionProxyAccessor& FWItemTVirtualCollectionProxyAccessor::operator=(const FWItemTVirtualCollectionProxyAccessor& rhs)
00057 // {
00058 //   //An exception safe implementation is
00059 //   FWItemTVirtualCollectionProxyAccessor temp(rhs);
00060 //   swap(rhs);
00061 //
00062 //   return *this;
00063 // }
00064 
00065 //
00066 // member functions
00067 //
00068 void
00069 FWItemTVirtualCollectionProxyAccessor::setData(const ROOT::Reflex::Object& product)
00070 {
00071    if (product.Address() == 0)
00072    {
00073       reset();
00074       return;
00075    }
00076 
00077    using ROOT::Reflex::Object;
00078    if(product.TypeOf().IsTypedef())
00079       m_data = Object(product.TypeOf().ToType(),product.Address()).Address();
00080    else
00081       m_data = product.Address();
00082 
00083    assert(0!=m_data);
00084    m_colProxy->PushProxy(static_cast<char*>(const_cast<void*>(m_data))+m_offset);
00085 }
00086 
00087 void
00088 FWItemTVirtualCollectionProxyAccessor::reset()
00089 {
00090    if (0 != m_data)
00091    {
00092       m_data=0;
00093       m_colProxy->PopProxy();
00094    }
00095 }
00096 
00097 //
00098 // const member functions
00099 //
00100 const void*
00101 FWItemTVirtualCollectionProxyAccessor::modelData(int iIndex) const
00102 {
00103    if ( 0 == m_data) { return m_data; }
00104    return m_colProxy->At(iIndex);
00105 }
00106 
00107 const void*
00108 FWItemTVirtualCollectionProxyAccessor::data() const
00109 {
00110    return m_data;
00111 }
00112 
00113 unsigned int
00114 FWItemTVirtualCollectionProxyAccessor::size() const
00115 {
00116    if(m_data==0) {
00117       return 0;
00118    }
00119    return m_colProxy->Size();
00120 }
00121 
00122 const TClass*
00123 FWItemTVirtualCollectionProxyAccessor::modelType() const
00124 {
00125    return m_colProxy->GetValueClass();
00126 }
00127 
00128 const TClass*
00129 FWItemTVirtualCollectionProxyAccessor::type() const
00130 {
00131    return m_type;
00132 }
00133 
00134 bool
00135 FWItemTVirtualCollectionProxyAccessor::isCollection() const
00136 {
00137    return true;
00138 }
00139 
00140 //
00141 // static member functions
00142 //