00001 #include "SIO/SIOObjectHandler.h"
00002 #include "SIO/LCSIO.h"
00003
00004 #include "EVENT/LCIO.h"
00005 #include "SIO_functions.h"
00006 #include "SIO/SIOLCParameters.h"
00007
00008
00009 using namespace EVENT ;
00010
00011
00012
00013 namespace SIO{
00014
00015
00016 unsigned int SIOObjectHandler::init( SIO_stream* stream,
00017 SIO_operation op,
00018 EVENT::LCCollection* col ,
00019 unsigned int vers ) {
00020
00021 unsigned int status ;
00022
00023
00024 if( op == SIO_OP_READ ) {
00025
00026
00027 SIO_DATA( stream , &_flag , 1 ) ;
00028
00029 if( vers > SIO_VERSION_ENCODE( 1, 1) )
00030 SIOLCParameters::read( stream , col->parameters() , vers ) ;
00031
00032 col->setFlag( _flag ) ;
00033 _vers = vers ;
00034
00035 }
00036
00037 else if( op == SIO_OP_WRITE ) {
00038
00039
00040 _flag = col->getFlag() ;
00041
00042 LCSIO_WRITE( stream, _flag ) ;
00043 SIOLCParameters::write( stream , col->getParameters() ) ;
00044
00045 _vers = vers ;
00046
00047 }
00048 return ( SIO_BLOCK_SUCCESS ) ;
00049 }
00050
00051 unsigned int SIOObjectHandler::readBase( SIO_stream* stream, EVENT::LCObject** objP ) {
00052
00053 if( _flag & ( 1 << LCCollection::BITSubset ) ){
00054
00055 int status ;
00056
00057 SIO_PNTR( stream , objP ) ;
00058
00059 return status ;
00060
00061 } else {
00062
00063 return read( stream, objP ) ;
00064 }
00065
00066 }
00067
00068 unsigned int SIOObjectHandler::writeBase(SIO_stream* stream, const EVENT::LCObject* obj ) {
00069
00070 if( _flag & ( 1 << LCCollection::BITSubset ) ){
00071
00072 int status ;
00073
00074
00075 const EVENT::LCObject* objLocal = obj ;
00076
00077 SIO_PNTR( stream , &objLocal ) ;
00078 return status ;
00079
00080 } else {
00081
00082 return write( stream, obj ) ;
00083 }
00084 }
00085
00086 }