gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE > Class Template Reference

Buffer class for input data. More...

#include <gadget/Type/SampleBuffer.h>

List of all members.

Public Types

typedef std::vector< std::vector<
DATA_TYPE > > 
buffer_t

Public Member Functions

 SampleBuffer ()
void addSample (const std::vector< DATA_TYPE > &dataSample)
 Adds a new sample to the buffer.
void swapBuffers ()
 Swaps the data buffers.
void lock ()
void unlock ()
buffer_tstableBuffer ()

Protected Member Functions

 SampleBuffer (const SampleBuffer &b)
void operator= (const SampleBuffer &b)

Protected Attributes

buffer_t mStableBuffer
buffer_t mReadyBuffer
vpr::Mutex mLock
 Lock to protect the buffer.


Detailed Description

template<class DATA_TYPE, unsigned MAX_BUFFER_SIZE = 5000>
class gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE >

Buffer class for input data.

The SampleBuffer stores the readings from an input device.

It consists of two buffers (vectors of vectors of samples) that hold. The "stable" samples and the "ready" samples.

Stable - Samples that the application is actually looking at. Ready - Samples that have been completed and could be swapped over to current.

ASSERTION: The buffers can be empty at the start, but after the first cycle (first time stable gets values) the Stable buffer must have at least one sample.

Parameters:
MAX_BUFFER_SIZE The maximum allowable size of the buffer. After it gets this large we will start throwing away old data.

Definition at line 67 of file SampleBuffer.h.


Member Typedef Documentation

template<class DATA_TYPE, unsigned MAX_BUFFER_SIZE = 5000>
typedef std::vector< std::vector< DATA_TYPE > > gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE >::buffer_t

Definition at line 70 of file SampleBuffer.h.


Constructor & Destructor Documentation

template<class DATA_TYPE, unsigned MAX_BUFFER_SIZE = 5000>
gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE >::SampleBuffer (  )  [inline]

Definition at line 73 of file SampleBuffer.h.

00074    {
00075       /* Do nothing. */ ;
00076    }

template<class DATA_TYPE, unsigned MAX_BUFFER_SIZE = 5000>
gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE >::SampleBuffer ( const SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE > &  b  )  [inline, protected]

Definition at line 124 of file SampleBuffer.h.

00124 {;}


Member Function Documentation

template<class DATA_TYPE, unsigned MAX_BUFFER_SIZE = 5000>
void gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE >::addSample ( const std::vector< DATA_TYPE > &  dataSample  )  [inline]

Adds a new sample to the buffer.

Precondition:
Buffers must be locked before calling.

Definition at line 82 of file SampleBuffer.h.

References gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE >::mLock, and gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE >::mReadyBuffer.

Referenced by gadget::Analog::addAnalogSample(), gadget::Position::addPositionSample(), gadget::String::readObject(), gadget::Position::readObject(), gadget::Glove::readObject(), gadget::Digital::readObject(), gadget::Command::readObject(), and gadget::Analog::readObject().

00083    {
00084       vprASSERT(mLock.test());                  // Verify that it is locked
00085       mReadyBuffer.push_back(dataSample);
00086       if(mReadyBuffer.size() > MAX_BUFFER_SIZE)
00087       {
00088          while(mReadyBuffer.size() > MAX_BUFFER_SIZE)
00089          { mReadyBuffer.erase(mReadyBuffer.begin()); }
00090       }
00091    }

template<class DATA_TYPE, unsigned MAX_BUFFER_SIZE = 5000>
void gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE >::swapBuffers (  )  [inline]

Swaps the data buffers.

Postcondition:
If ready has values, then copy values from ready to stable if not, then stable keeps its old values.
Note:
This means that until the first sample, StableBuffer is possibly empty.

Definition at line 101 of file SampleBuffer.h.

References gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE >::mLock, gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE >::mReadyBuffer, and gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE >::mStableBuffer.

Referenced by gadget::String::readObject(), gadget::Digital::readObject(), gadget::Command::readObject(), and gadget::Analog::swapAnalogBuffers().

00102    {
00103    vpr::Guard<vpr::Mutex>  guard(mLock);
00104 
00105       if(!mReadyBuffer.empty())            // If Ready buffer has data
00106       {
00107          mStableBuffer = mReadyBuffer;       // Copy over the ready values
00108       }
00109 
00110       mReadyBuffer.clear();
00111    }

template<class DATA_TYPE, unsigned MAX_BUFFER_SIZE = 5000>
void gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE >::lock (  )  [inline]

Definition at line 113 of file SampleBuffer.h.

References gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE >::mLock.

Referenced by gadget::Analog::addAnalogSample(), gadget::Position::addPositionSample(), gadget::String::readObject(), gadget::Position::readObject(), gadget::Glove::readObject(), gadget::Digital::readObject(), gadget::Command::readObject(), gadget::Analog::readObject(), gadget::String::writeObject(), gadget::Position::writeObject(), gadget::Glove::writeObject(), gadget::Digital::writeObject(), gadget::Command::writeObject(), and gadget::Analog::writeObject().

00114    {  mLock.acquire(); }

template<class DATA_TYPE, unsigned MAX_BUFFER_SIZE = 5000>
void gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE >::unlock (  )  [inline]

Definition at line 116 of file SampleBuffer.h.

References gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE >::mLock.

Referenced by gadget::Analog::addAnalogSample(), gadget::Position::addPositionSample(), gadget::String::readObject(), gadget::Position::readObject(), gadget::Glove::readObject(), gadget::Digital::readObject(), gadget::Command::readObject(), gadget::Analog::readObject(), gadget::String::writeObject(), gadget::Position::writeObject(), gadget::Glove::writeObject(), gadget::Digital::writeObject(), gadget::Command::writeObject(), and gadget::Analog::writeObject().

00117    {  mLock.release(); }

template<class DATA_TYPE, unsigned MAX_BUFFER_SIZE = 5000>
buffer_t& gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE >::stableBuffer (  )  [inline]

Definition at line 119 of file SampleBuffer.h.

References gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE >::mStableBuffer.

Referenced by gadget::Analog::getAnalogData(), gadget::Analog::getAnalogDataBuffer(), gadget::Command::getCommandData(), gadget::Digital::getDigitalData(), gadget::Glove::getGloveData(), gadget::String::getStringData(), gadget::String::writeObject(), gadget::Position::writeObject(), gadget::Glove::writeObject(), gadget::Digital::writeObject(), gadget::Command::writeObject(), and gadget::Analog::writeObject().

00120    { return mStableBuffer; }

template<class DATA_TYPE, unsigned MAX_BUFFER_SIZE = 5000>
void gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE >::operator= ( const SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE > &  b  )  [inline, protected]

Definition at line 125 of file SampleBuffer.h.

00125 {;}


Member Data Documentation

template<class DATA_TYPE, unsigned MAX_BUFFER_SIZE = 5000>
buffer_t gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE >::mStableBuffer [protected]

Definition at line 127 of file SampleBuffer.h.

Referenced by gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE >::stableBuffer(), and gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE >::swapBuffers().

template<class DATA_TYPE, unsigned MAX_BUFFER_SIZE = 5000>
buffer_t gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE >::mReadyBuffer [protected]

Definition at line 128 of file SampleBuffer.h.

Referenced by gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE >::addSample(), and gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE >::swapBuffers().

template<class DATA_TYPE, unsigned MAX_BUFFER_SIZE = 5000>
vpr::Mutex gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE >::mLock [protected]

Lock to protect the buffer.

Definition at line 130 of file SampleBuffer.h.

Referenced by gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE >::addSample(), gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE >::lock(), gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE >::swapBuffers(), and gadget::SampleBuffer< DATA_TYPE, MAX_BUFFER_SIZE >::unlock().


The documentation for this class was generated from the following file:
Generated on Thu Jan 4 10:45:06 2007 for Gadgeteer by  doxygen 1.5.1