Page principale | Liste des namespaces | Hiérarchie des classes | Liste alphabétique | Liste des classes | Liste des fichiers | Membres de namespace | Membres de classe

acq.impl.hpp

00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 
00038 
00039 template<class T, size_t N, class F>
00040 acq<T,N,F>::acq(  buffer_t*     buff  ,
00041                   boost::mutex* lock  ,
00042                   unsigned int* cur   ,
00043                   unsigned int* send  ,
00044                   bool*         run   ,
00045                   bool*         ready , 
00046                   Param*        param ,
00047                   Caminfo*      ci    )
00048   : c(NULL),mIdx(0),mBuffer(buff), mLock(lock), mCur(cur), mSend(send), mRun(run), mRun2(*run), mReady(ready), mParam(param), mCi(ci)
00049 { }
00050 
00051 
00052 template<class T, size_t N, class F>
00053 acq<T,N,F>::acq( const acq& src ) :
00054   c(NULL)             ,
00055   mIdx   (src.mIdx)   ,   // Recuperation de l'index
00056   mBuffer(src.mBuffer),   // Recuperation des buffers
00057   mLock  (src.mLock)  ,   // Recuperation des verrous
00058   mCur   (src.mCur)   ,   // Recuperation du ptr sur le buffer courant
00059   mSend  (src.mSend)  ,   // Recuperation du ptr sur le buffer a rendre
00060   mRun   (src.mRun)   ,   // Recuperation du booleen pour stopper le thrd
00061   mRun2  (src.mRun2)  ,
00062   mReady (src.mReady) , 
00063   mParam (src.mParam) ,
00064   mCi    (src.mCi)
00065 { }
00066 
00067 
00068 template<class T, size_t N, class F>
00069 acq<T,N,F>::~acq()
00070 {
00071   if(c)
00072     {
00073       delete c;
00074       c=NULL;
00075     }
00076 }
00077 
00078 
00079 template<class T, size_t N, class F>
00080 void acq<T,N,F>::operator()()
00081 {
00082   
00083   T flux(mParam, mCi);
00084   
00085   // Tant que le booleen reste sur true
00086   while(*mRun && mRun2)
00087     {
00088       // Appel du foncteur avec :
00089       // - Le mutex a locker
00090       // - Le buffer a renvoyer
00091       // - Le flux
00092       mRun2=mFunc(mLock[*mCur], mBuffer[*mCur], &flux);
00093 
00094       // Index qui compte le nombre de buffers remplis
00095       mIdx++;
00096       
00097       // Pour savoir quand les N buffers sont remplis
00098       if(mIdx == N)
00099         *mReady = true;
00100       
00101       // Incrementation du pointeur sur le buffer courant et a renvoyer
00102       // avec un modulo pour la circularite
00103       *mCur  = (*mCur  + 1) % N;
00104       *mSend = (*mSend + 1) % N;
00105     }
00106 
00107 }

Généré le Wed Aug 16 12:33:36 2006 pour IpsiC++library par  doxygen 1.4.4