Ignore:
Timestamp:
Oct 14, 2001, 1:56:14 AM (24 years ago)
Author:
aubourg
Message:

segmented buffers...

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ArchTOIPipe/Kernel/toisegment.h

    r1686 r1689  
    1818class TOISegmented : public TOIRegular {
    1919 public:
    20   TOISegmented();
    21   TOISegmented(string nm);
     20  TOISegmented(int bufsz=256, int maxseg=20);
     21  TOISegmented(string nm, int bufsz=256, int maxseg=20);
    2222  ~TOISegmented();
     23
     24  virtual double        getData(int i);
     25  virtual void          getData(int i, double& data,  uint_8& flag);
     26  virtual void          putData(int i, double  value, uint_8  flag=0);
     27  virtual void          wontNeedBefore(int i);
     28  virtual void          putDone();
     29
     30
     31  virtual DataStatus    isDataAvail(int iStart, int iEnd);
     32  virtual DataStatus    isDataAvail(int i);
     33  virtual DataStatus    isDataAvailNL(int iStart, int iEnd); // abstract
     34  virtual void          waitForData(int iStart, int iEnd);
     35  virtual void          waitForData(int i);
     36  virtual void          waitForAnyData();
     37  virtual int           nextDataAvail(int iAfter); // abstract
     38  virtual bool          hasSomeData(); // abstract
     39  virtual void          doGetData(int i, double& data, uint_8& flag); // abs
     40  virtual void          doPutData(int i, double value, uint_8 flag=0); // abs
    2341
    2442 
     
    2745  class BufferView;
    2846  class MasterView;
     47
     48  MasterView* master;
    2949
    3050
     
    85105    double getData(int sn);
    86106    uint_8 getFlag(int sn);
     107    BufferView* getView(); // thread-specific
     108    void putDone();
    87109
    88110  protected:
     
    90112    void removeFromWaitList(BufferView* bv);
    91113
    92     BufferView* getView(); // thread-specific
    93114
    94115    friend class BufferView;
    95     void signalWaitingViews();
     116    void signalWaitingViews(); // views are waiting on read
     117    void signal(); // we are waiting on write
    96118    void nextSegment();
     119    void waitForCleaning();
    97120    BufferView* createView();
    98121    void updateView(BufferView*); // called on reader thread of the view
     
    107130    pthread_mutex_t  views_mutex; // lock for master buffer list access
    108131    pthread_mutex_t  write_mutex; // for write waiting
    109     pthread_cond_t   condv; // waiting (read or write) (write only ?)
     132    pthread_cond_t   condv; // waiting for cleaning (on writer thread)
    110133    pthread_key_t    buffer_key; // thread-specific buffer view
    111134    static void BufferDestroy(void *);
    112135
    113     static const int NO_WAIT   = 0;
    114     static const int WAIT_READ = 1;
    115     static const int WAIT_WRITE= 2;
    116     int  waitStatus;
     136    bool   waitingOnWrite; // wait on writer thread
    117137
    118138    set<BufferView*>  waitingBuffers;
     
    130150    double getData(int sn);
    131151    uint_8 getFlag(int sn);   
     152
     153    void wontNeedBefore(int sn);
    132154   
    133155  protected:
     
    142164    int sn0;
    143165    int segmentSize;
     166    int firstNeeded;
    144167    pthread_mutex_t  mutex; // lock pour attente de segments
    145168    pthread_cond_t   condv; // attente de segments (en lecture)
Note: See TracChangeset for help on using the changeset viewer.