source: Sophya/trunk/ArchTOIPipe/Kernel/toiseqbuff.h@ 4005

Last change on this file since 4005 was 2454, checked in by aubourg, 22 years ago

pb longs sur magique

File size: 2.9 KB
Line 
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: toiseqbuff.h,v 1.11 2003-11-14 12:34:56 aubourg Exp $
8
9#ifndef TOISEQBUFF_H
10#define TOISEQBUFF_H
11
12#include "toi.h"
13
14// ------------------- TOISeqBuffered ---------------------------
15// Classe de TOI avec buffer, et echantillonnage regulier.
16// Pour le moment au moins,
17// il faut que les providers fassent arriver les donnees par samplenum croissant.
18// ---------------------------------------------------------------
19
20class TOISeqBuffered : public TOIRegular {
21public:
22 TOISeqBuffered(int wsz=8192);
23 TOISeqBuffered(string nm, int wsz=8192);
24 virtual ~TOISeqBuffered();
25
26
27 inline void SetBufferSize(int wsz) // ATTENTION - Ne doit pas etre appele
28 { AllocBuffer(wsz); } // apres le demarrage des threads
29
30 virtual void PrintStatus(::ostream & os) const;
31
32 inline void setDebugLevel(int lev=0) { dbglev=lev; }
33 inline int getDebugLevel() const { return dbglev; }
34
35 virtual double getData(long i);
36 virtual void getData(long i, double& data, uint_8& flag);
37 virtual void getData(long i, int n, double* data, uint_8* flg=0);
38 virtual void putData(long i, double value, uint_8 flag=0);
39 virtual void putData(long i, int n, double const* val, uint_8 const* flg=0);
40 virtual void wontNeedBefore(long i);
41
42 inline long getFirstIn() const { return first_in; }
43 inline long getFirstOut() const { return first_out; }
44 inline long getLastIn() const { return (next_in-1); }
45 inline long getLastOut() const { return (next_out-1); }
46
47
48 virtual DataStatus isDataAvailNL(long iStart, long iEnd);
49 virtual DataStatus isDataAvailNL(long i); // override required
50
51protected:
52 double* data;
53 uint_8* flags;
54 int wsize;
55 int buffsize;
56 long next_in;
57 long next_out;
58 long first_in;
59 long first_out;
60 bool started;
61 double defaultValue;
62 int dbglev;
63
64 void AllocBuffer(int wsz);
65
66#ifdef WITH_SOPHYA
67 /* ---- l'interface va etre modifiee, NE PAS UTILISER
68 virtual Array doGetData(long iStart, long iEnd);
69 virtual TArray<int_4> doGetFlag(long iStart, long iEnd);
70 l'interface va etre modifiee, NE PAS UTILISER ---- */
71#endif
72 virtual void doGetData(long i, double & val, uint_8 & flg);
73
74 virtual void doPutData(long i, double value, uint_8 flag=0);
75 // virtual void doWontNeedBefore(long i); plus besoin ? - Reza Mai 2002
76
77 virtual long nextDataAvail(long iAfter);
78 virtual bool hasSomeData();
79
80 inline double & dataRef(long i) { return data[i%buffsize]; }
81 inline uint_8 & flagRef(long i) { return flags[i%buffsize]; }
82 inline bool isDataDeleted(long i)
83 { return((i < next_in-buffsize-1) ? true : false); }
84};
85
86
87#endif
Note: See TracBrowser for help on using the repository browser.