00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #define GAUDI_NTUPLEIMP_CPP 1
00016
00017
00018 #include "GaudiKernel/ISelectStatement.h"
00019 #include "GaudiKernel/NTupleImplementation.h"
00020
00021
00022
00023 namespace NTuple {
00025 TupleImp::TupleImp ( const std::string& title )
00026 : m_isBooked(false),
00027 m_title(title),
00028 m_pSelector(0),
00029 m_buffer(0),
00030 m_cnvSvc(0)
00031 {
00032 }
00033
00035 TupleImp::~TupleImp () {
00036 for ( ItemContainer::iterator i = m_items.begin(); i != m_items.end(); i++ ) {
00037 (*i)->release();
00038 }
00039 m_items.erase(m_items.begin(), m_items.end());
00040 if ( m_buffer ) delete m_buffer;
00041 m_buffer = 0;
00042 }
00043
00045 StatusCode TupleImp::attachSelector(ISelectStatement* sel) {
00046 if ( 0 != sel ) sel->addRef();
00047 if ( 0 != m_pSelector ) m_pSelector->release();
00048 m_pSelector = sel;
00049 return StatusCode::SUCCESS;
00050 }
00051
00053 ISelectStatement* TupleImp::selector() {
00054 return m_pSelector;
00055 }
00056
00058 void TupleImp::reset ( ) {
00059 for ( ItemContainer::iterator i = m_items.begin(); i != m_items.end(); i++ ) {
00060 (*i)->reset();
00061 }
00062 }
00063
00065 INTupleItem* TupleImp::i_find ( const std::string& name ) const {
00066 for ( ItemContainer::const_iterator i = m_items.begin(); i != m_items.end(); i++ ) {
00067 if ( name == (*i)->name() ) {
00068 INTupleItem* it = const_cast<INTupleItem*>(*i);
00069 return it;
00070 }
00071 }
00072 return 0;
00073 }
00074
00076 StatusCode TupleImp::add(INTupleItem* item) {
00077 if ( 0 != item ) {
00078 INTupleItem* i = i_find(item->name());
00079 if ( 0 == i ) {
00080 m_items.push_back( item );
00081 return StatusCode::SUCCESS;
00082 }
00083 }
00084 return StatusCode::FAILURE;
00085 }
00086
00088 StatusCode TupleImp::remove ( const std::string& name ) {
00089 INTupleItem* i = i_find(name);
00090 return (i == 0) ? StatusCode::FAILURE : remove(i).getCode();
00091 }
00092
00094 StatusCode TupleImp::remove ( INTupleItem* item ) {
00095 for ( ItemContainer::iterator i = m_items.begin(); i != m_items.end(); i++ ) {
00096 if ( (*i) == item ) {
00097 m_items.erase(i);
00098 item->release();
00099 return StatusCode::SUCCESS;
00100 }
00101 }
00102 return StatusCode::FAILURE;
00103 }
00105 void TupleImp::setBuffer(char* buff) {
00106 if ( 0 != m_buffer ) delete m_buffer;
00107 m_buffer = buff;
00108 }
00109 };