/**********************************************************************

  Audacity: A Digital Audio Editor

  RingBuffer.h

  Dominic Mazzoni

*******************************************************************/

#ifndef __AUDACITY_RING_BUFFER__
#define __AUDACITY_RING_BUFFER__

#include "SampleFormat.h"

class RingBuffer {
 public:
   RingBuffer(sampleFormat format, int size);
   ~RingBuffer();

   //
   // For the writer only:
   //

   int AvailForPut();
   int Put(samplePtr buffer, sampleFormat format, int samples);

   //
   // For the reader only:
   //

   int AvailForGet();
   int Get(samplePtr buffer, sampleFormat format, int samples);
   int Discard(int samples);

 private:
   int Len();
   
   sampleFormat  mFormat;
   int           mStart;
   int           mEnd;
   int           mBufferSize;
   samplePtr     mBuffer;
};

#endif /*  __AUDACITY_RING_BUFFER__ */

// Indentation settings for Vim and Emacs and unique identifier for Arch, a
// version control system. Please do not modify past this point.
//
// Local Variables:
// c-basic-offset: 3
// indent-tabs-mode: nil
// End:
//
// vim: et sts=3 sw=3
// arch-tag: 43b69817-059c-4f4a-87e5-b19b2bcc75fb

