メインページ   モジュール   名前空間一覧   クラス階層   アルファベット順一覧   構成   ファイル一覧   構成メンバ   ファイルメンバ   関連ページ    

TInputObjectFileOnline.cc

解説を見る。
00001 // =====================================================================
00002 //  $Id: TInputObjectFileOnline.cc,v 1.4 2004/03/07 10:30:32 goiwai Exp $
00003 //  $Name: CLDAQ-1-14-03 $
00004 //  $Log: TInputObjectFileOnline.cc,v $
00005 //  Revision 1.4  2004/03/07 10:30:32  goiwai
00006 //  ROOTに組みこむためのおまじないマクロを埋めこみました。
00007 //  全てにおいて完全に動作するわけではありません。
00008 //
00009 //  Revision 1.3  2003/12/06 10:56:19  goiwai
00010 //  フィルタ関連の修整と Read(),Write()の戻り値の修整です.
00011 //  Read()もWrite()も処理したレコードサイズを返します.
00012 //  フィルタがある場合も同様です.
00013 //  それぞれのストリームのDataSizeの扱いですが,これは扱ったレコードサイズ
00014 //  でなく扱ったファイルやソケットなどのサイズになります.レコードサイズと
00015 //  一致するとは限りません.
00016 //
00017 //  Revision 1.2  2003/10/14 22:05:35  goiwai
00018 //  やたら落ちるのとCPU食いまくるので,usleep(100*1000)するようにしました.
00019 //  やっぱレコードにステータス持たせないとだめですね.以下,提案:
00020 //  8bit:       status
00021 //  32bit:      total size
00022 //
00023 //  Revision 1.1  2003/10/12 13:01:47  goiwai
00024 //  オンラインでファイルを見ることが多いのでオンライン用のものを用意しまし
00025 //  た.1イベント読むことに成功するまで Read() メンバ関数から戻ってきません
00026 //  ので,終了時には レコードID を見てループから抜ける必要があります.
00027 //  データフォーマットにステータス持たせればこの必要はなかったんですが.
00028 //
00029 // =====================================================================
00030 #include "TInputObjectFileOnline.hh"
00031 #include "TStreamableObject.hh"
00032 #include "TDataRecord.hh"
00033 #include "TDataSection.hh"
00034 #include "TDataSegment.hh"
00035 #include "TDataElement.hh"
00036 #include "TInputObjectFilter.hh"
00037 #include "TFileProperty.hh"
00038 
00039 TInputObjectFileOnline::TInputObjectFileOnline( const Tstring& filename, const Tstring& mode, Tint utime )
00040   : TInputObjectFile( filename, mode ),
00041     theMicroSleepTime( utime )
00042 {;}
00043 
00044 TInputObjectFileOnline::TInputObjectFileOnline( TInputObjectFilter* filter, const Tstring& filename, const Tstring& mode, Tint utime )
00045   : TInputObjectFile( filter, filename, mode ),
00046     theMicroSleepTime( utime )
00047 {;}
00048 
00049 TInputObjectFileOnline::~TInputObjectFileOnline()
00050 {;}
00051 
00052 Tint TInputObjectFileOnline::Read( TStreamableObject& object )
00053 {
00054   if ( HasFilter() ) {
00055     return theObjectFilter -> Filtering( object, this );
00056   }  
00057 
00058   theLastDataSize = theDataSize;
00059   theDataSize = 0;
00060 
00061   static Tobject_t objecttype = object.GetObjectType();
00062 
00063   switch ( objecttype ) {
00064     case tObjectDataRecord:
00065       *( (TDataRecord*)(&object) ) = getDataRecord();
00066       break;
00067     case tObjectDataSection:
00068       *( (TDataSection*)(&object) ) = getDataSection();
00069       break;
00070     case tObjectDataSegment:
00071       *( (TDataSegment*)(&object) ) = getDataSegment();
00072       break;
00073     case tObjectDataElement:
00074       *( (TDataElement*)(&object) ) = getDataElement();
00075       break;
00076     default:
00077       break;
00078   }
00079 
00080   if ( theDataSize <= 0 ) {
00081     SetOffset( theTotalDataSize, TObjectFile::tSeekBegin );
00082     TFileProperty pp( theFileName );
00083     Tint ss = pp.GetTotalSize();
00084     while ( ss == pp.GetTotalSize() ) {
00085       MicroSleep();
00086       pp.Update();
00087     }
00088     Read( object );
00089   } else {
00090     theTotalDataSize += theDataSize;
00091   }
00092 
00093   return theDataSize;
00094 }
00095 
00096 #ifdef __CLDAQ_ROOT_DLL
00097     ClassImp(TInputObjectFileOnline)
00098 #endif


CLDAQ - a Class Library for DataAcQuisition (Version 1.14.3)
Go IWAI -- goiwai at users.sourceforge.jp