source: Sophya/trunk/ArchTOIPipe/Kernel/toi.h@ 2086

Last change on this file since 2086 was 1993, checked in by ansari, 23 years ago

Ajout de lock()/unlock() ds toiseqbuff.cc - Reza 9/5/2002

File size: 4.9 KB
RevLine 
[1365]1// This may look like C code, but it is really -*- C++ -*-
[1738]2
3// ArchTOIPipe (C) CEA/DAPNIA/SPP IN2P3/LAL
4// Eric Aubourg
5// Christophe Magneville
6// Reza Ansari
[1993]7// $Id: toi.h,v 1.16 2002-05-09 20:22:37 ansari Exp $
[1738]8
[1365]9#ifndef TOI_H
10#define TOI_H
11
12#include "config.h"
[1766]13#include <vector>
[1477]14using namespace std;
[1365]15
16#include <pthread.h>
17
18#ifdef WITH_SOPHYA
19#include "array.h"
20#include "pexceptions.h"
21using namespace SOPHYA;
22#else
23#include "apexceptions.h"
24#endif
25
26
27
28class TOIProcessor;
29
30class TOI {
31public:
32 TOI();
33 TOI(string name);
34 virtual ~TOI();
35
[1437]36 // ----- Rajouts Reza 12/3/2001
[1762]37 virtual void PrintStatus(::ostream & os) const;
[1437]38 // Fin rajouts Reza 12/3/2001 ------
39
[1464]40
[1365]41#ifdef WITH_SOPHYA
[1464]42 /* l'interface va etre modifiee, NE PAS UTILISER
[1365]43 virtual Array getData(int iStart, int iEnd);
44 virtual Array getError(int iStart, int iEnd);
45 virtual TArray<int_4> getFlag(int iStart, int iEnd);
[1464]46 l'interface va etre modifiee, NE PAS UTILISER */
[1365]47#endif
[1462]48
49 enum DataStatus {DATA_OK=0, DATA_DELETED, DATA_NOT_YET};
[1365]50
51 virtual double getData(int i);
[1532]52 virtual void getData(int i, double &data, uint_8 &flag);
[1462]53 //RZCMV virtual DataStatus getDataError(int i,double &data,double &error,int_4 &flag);
[1742]54 virtual void getData(int i, int n, double* data, uint_8* flg=0);
[1365]55
56 virtual DataStatus isDataAvail(int iStart, int iEnd);
57 virtual DataStatus isDataAvail(int i);
58 virtual void waitForData(int iStart, int iEnd);
59 virtual void waitForData(int i);
60 virtual void waitForAnyData();
61 virtual int nextDataAvail(int iAfter)=0;
62 virtual bool hasSomeData()=0;
63
[1532]64 virtual void putData(int i, double value, uint_8 flag=0);
[1462]65 //RZCMV virtual void putDataError(int i, double value,
66 // double error, int_4 flag=0);
[1742]67 virtual void putData(int i, int n, double const* val, uint_8 const* flg);
[1689]68 virtual void putDone() {}
[1365]69
70 virtual void wontNeedBefore(int i);
71
72 bool dbg;
73
74 void setName(string n) {name =n;}
[1437]75 string getName() const {return name;}
[1365]76
[1740]77 bool needSyncOldWay() const {return syncOldWay;}
78
[1365]79protected:
80 TOI* errorTOI;
81 pthread_mutex_t mutex;
[1437]82 // ----- Rajouts Reza 12/3/2001
83 pthread_cond_t condv;
84 bool fgwaitput;
85 bool fgwaitget;
86 bool fgsigput;
87 bool fgsigget;
88 int countwaitput;
89 int countwaitget;
90 // Fin rajouts Reza 12/3/2001 ------
91
[1365]92 TOIProcessor* producer;
93 vector<TOIProcessor*> consumers;
94 double defaultValue;
[1740]95 bool syncOldWay;
96
[1365]97#ifdef WITH_SOPHYA
[1464]98 /* l'interface va etre modifiee, NE PAS UTILISER
[1365]99 virtual Array doGetData(int iStart, int iEnd)=0;
100 virtual TArray<int_4> doGetFlag(int iStart, int iEnd)=0;
[1464]101 l'interface va etre modifiee, NE PAS UTILISER */
[1365]102#endif
[1464]103
[1532]104 virtual void doGetData(int i, double& data, uint_8& flag)=0;
105 virtual void doPutData(int i, double value, uint_8 flag=0)=0;
[1365]106 virtual void doWontNeedBefore(int i);
107
108 virtual DataStatus isDataAvailNL(int iStart, int iEnd)=0;
109 virtual DataStatus isDataAvailNL(int i);
110
111 virtual void setProducer(TOIProcessor* prod);
[1692]112public: // for toiprocessors redefining addInput. Change ?
[1365]113 virtual void addConsumer(TOIProcessor* prod);
[1692]114protected:
[1365]115 friend class TOIProcessor;
116
117 string name;
118
119 virtual int getMinSn();
120 virtual int getMaxSn();
121 void TOIInit();
122
[1437]123 // Il faut faire attention avec mutex et condv, si TOI cree sur le stack !
124 // Il faut donc faire new TOI - Reza 11/3/2001
[1365]125 void lock() {pthread_mutex_lock(&mutex);}
126 void unlock() {pthread_mutex_unlock(&mutex);}
127
[1437]128 // ----- Rajouts Reza 12/3/2001
[1993]129 inline void wait() {pthread_cond_wait(&condv, &mutex);}
130 inline void signal() {pthread_cond_signal(&condv);}
131 inline void broadcast() {pthread_cond_broadcast(&condv);}
[1437]132 inline void waitPut()
133 {fgwaitput=true; countwaitput++; pthread_cond_wait(&condv, &mutex);}
134 inline void waitGet()
135 {fgwaitget=true; countwaitget++; pthread_cond_wait(&condv, &mutex);}
136 inline bool isPutWaiting() const { return fgwaitput; }
137 inline bool isGetWaiting() const { return fgwaitget; }
[1993]138 inline void signalPut() {fgsigput=true; }
139 inline void signalGet() {fgsigget=true; }
[1437]140 inline void cleanWaitPut() { fgsigput = fgwaitput = false; }
141 inline void cleanWaitGet() { fgsigget = fgwaitget = false; }
142
143public:
144 inline int getCountWaitPut() const { return countwaitput; }
145 inline int getCountWaitGet() const { return countwaitget; }
146 // Fin rajouts Reza 12/3/2001 ------
147
[1365]148};
149
[1762]150inline ::ostream & operator << (::ostream & os, TOI const & toi)
[1437]151{ toi.PrintStatus(os); return os; }
152
[1365]153class TOIRegular : public TOI {
154};
155
156
157#endif
Note: See TracBrowser for help on using the repository browser.