| 1 | // This may look like C code, but it is really -*- C++ -*-
|
|---|
| 2 |
|
|---|
| 3 | // ArchTOIPipe (C) CEA/DAPNIA/SPP IN2P3/LAL
|
|---|
| 4 | // Eric Aubourg
|
|---|
| 5 | // Christophe Magneville
|
|---|
| 6 | // Reza Ansari
|
|---|
| 7 | // $Id: genwproc.h,v 1.10 2001-11-14 14:49:05 aubourg Exp $
|
|---|
| 8 |
|
|---|
| 9 |
|
|---|
| 10 | #ifndef GENWPROC_H
|
|---|
| 11 | #define GENWPROC_H
|
|---|
| 12 |
|
|---|
| 13 | #include "toiprocessor.h"
|
|---|
| 14 | #include "tvector.h"
|
|---|
| 15 |
|
|---|
| 16 | #include <vector>
|
|---|
| 17 |
|
|---|
| 18 |
|
|---|
| 19 | class GenWindowTOIProcessor : public TOIProcessor {
|
|---|
| 20 | public:
|
|---|
| 21 | GenWindowTOIProcessor(int_4 nbinput,int_4 nboutput,int_4 wsz, int_4 wstep=1, int_4 wsztot=-1);
|
|---|
| 22 | virtual ~GenWindowTOIProcessor();
|
|---|
| 23 |
|
|---|
| 24 | inline int_4 GetWSize() const { return WSize; }
|
|---|
| 25 | inline int_4 GetWStep() const { return WStep; }
|
|---|
| 26 | inline int_4 ProcessedSampleCount() const { return TotNsCount; }
|
|---|
| 27 |
|
|---|
| 28 | // DbgLevel = 0 : No debug
|
|---|
| 29 | // DbgLevel = 1 : Print fenetre WSize
|
|---|
| 30 | // DbgLevel = 2 : 1 + Print logique remplissage/decalage
|
|---|
| 31 | // DbgLevel = 3 : 2 + Print fenetre WSizeTot et WSizeL,C,R
|
|---|
| 32 | inline void SetDbgLevel(int_2 lp=0) {DbgLevel = (lp>0) ? lp : 0;}
|
|---|
| 33 |
|
|---|
| 34 | void SetWSizeLCR(int_4 wszl=0,int_4 wszc=0,int_4 wszr=0);
|
|---|
| 35 | inline int_4 GetWSize(char cw)
|
|---|
| 36 | {if (cw=='l') return WSizeLeft;
|
|---|
| 37 | else if(cw=='c') return WSizeCenter;
|
|---|
| 38 | else if(cw=='r') return WSizeRight;
|
|---|
| 39 | return WSize;}
|
|---|
| 40 |
|
|---|
| 41 | inline int_8 GetWStartSample() {return StartSample;}
|
|---|
| 42 | inline int_8 GetWCenterSample() {return StartSample + WSize/2;}
|
|---|
| 43 | inline int_8 GetWCenterIndex() {return WSize/2;}
|
|---|
| 44 | inline int_8 StartSampleNum() {return SNbegin;}
|
|---|
| 45 | inline int_8 EndSampleNum() {return SNend;}
|
|---|
| 46 |
|
|---|
| 47 | inline void SetDefaultValue(r_8 r8dval=0., int_8 i8dval=0)
|
|---|
| 48 | {R8DefVal = r8dval; I8DefVal = i8dval;}
|
|---|
| 49 |
|
|---|
| 50 | TVector<r_8> GetWData(int_4 numtoi=0);
|
|---|
| 51 | TVector<uint_8> GetWFlag(int_4 numtoi=0);
|
|---|
| 52 | r_8 * GetWDataPointer(int_4 numtoi=0);
|
|---|
| 53 | uint_8 * GetWFlagPointer(int_4 numtoi=0);
|
|---|
| 54 | void GetData(int_4 numtoi, int_8 numsample, r_8 & data, uint_8 & flag);
|
|---|
| 55 | inline void GetData(int_8 numsample, r_8 & data, uint_8 & flag)
|
|---|
| 56 | { GetData(0, numsample, data, flag); }
|
|---|
| 57 |
|
|---|
| 58 | TVector<r_8> GetWData(char cw,int_4 numtoi=0);
|
|---|
| 59 | TVector<uint_8> GetWFlag(char cw,int_4 numtoi=0);
|
|---|
| 60 | r_8 * GetWDataPointer(char cw,int_4 numtoi,int_4& n);
|
|---|
| 61 | uint_8 * GetWFlagPointer(char cw,int_4 numtoi,int_4& n);
|
|---|
| 62 | inline r_8 * GetWDataPointer(char cw,int_4& n)
|
|---|
| 63 | {return GetWDataPointer(cw,0,n);}
|
|---|
| 64 | inline uint_8 * GetWFlagPointer(char cw,int_4& n)
|
|---|
| 65 | {return GetWFlagPointer(cw,0,n);}
|
|---|
| 66 |
|
|---|
| 67 | void PutWData(int_4 numtoi,int_8 numsample,TVector<r_8>& data,TVector<uint_8>& flag);
|
|---|
| 68 | void PutWData(int_4 numtoi,int_8 numsample,r_8 data,uint_8 flag);
|
|---|
| 69 | inline void PutWData(int_8 numsample,TVector<r_8>& data,TVector<uint_8>& flag)
|
|---|
| 70 | {PutWData(0,numsample,data,flag);}
|
|---|
| 71 | inline void PutWData(int_8 numsample,r_8 data,uint_8 flag)
|
|---|
| 72 | {PutWData(0,numsample,data,flag);}
|
|---|
| 73 |
|
|---|
| 74 | virtual void PrintStatus(::ostream & os);
|
|---|
| 75 |
|
|---|
| 76 | virtual void UserInit(int_8 kstart);
|
|---|
| 77 | virtual void UserProc(int_8 ks);
|
|---|
| 78 | virtual void UserEnd(int_8 kend);
|
|---|
| 79 |
|
|---|
| 80 | virtual void init();
|
|---|
| 81 | virtual void run();
|
|---|
| 82 |
|
|---|
| 83 | protected:
|
|---|
| 84 | void Remplissage(int_8 ks);
|
|---|
| 85 | void Ecriture();
|
|---|
| 86 | void test_avec_print(int_8 ks);
|
|---|
| 87 | inline int_4 StartWtIndex() {return CurWtIndex-WSize;}
|
|---|
| 88 | inline int_4 CenterWtIndex() {return CurWtIndex-(WSize+1)/2;}
|
|---|
| 89 | inline int_4 StartWtIndex(char cw)
|
|---|
| 90 | {if (cw=='l') return StartWtIndex()+W0Left;
|
|---|
| 91 | else if(cw=='c') return StartWtIndex()+W0Center;
|
|---|
| 92 | else if(cw=='r') return StartWtIndex()+W0Right;
|
|---|
| 93 | return StartWtIndex();}
|
|---|
| 94 |
|
|---|
| 95 | int_2 DbgLevel;
|
|---|
| 96 | int_4 NbInput,NbOutput;
|
|---|
| 97 | int_4 WSizeTot,WSize,WStep;
|
|---|
| 98 | int_4 WSizeLeft,WSizeCenter,WSizeRight, W0Left,W0Center,W0Right;
|
|---|
| 99 | int_8 SNbegin,SNend;
|
|---|
| 100 | int_8 TotNsCount,TotDecalCount;
|
|---|
| 101 | r_8 R8DefVal;
|
|---|
| 102 | int_8 I8DefVal;
|
|---|
| 103 |
|
|---|
| 104 | int_4 CurWtIndex; // Prochain index a remplir dans le buffer WSizeTot
|
|---|
| 105 | int_8 LastFilledSn; // Numero du dernier sample remplie
|
|---|
| 106 | int_8 StartSample; // Numero de sample du 1er element du buffer WSize
|
|---|
| 107 |
|
|---|
| 108 | vector< TVector<r_8> > WDataIn;
|
|---|
| 109 | vector< TVector<uint_8> > WFlagIn;
|
|---|
| 110 | vector< bool > WInFlg;
|
|---|
| 111 | vector< TVector<r_8> > WDataOut;
|
|---|
| 112 | vector< TVector<uint_8> > WFlagOut;
|
|---|
| 113 | vector< bool > WOutFlg;
|
|---|
| 114 | vector< bool > WPutOutFlg;
|
|---|
| 115 | vector< bool > WPutOutOwnVector;
|
|---|
| 116 | vector< int_8 > OutSample;
|
|---|
| 117 | };
|
|---|
| 118 |
|
|---|
| 119 | #endif
|
|---|