Beam-lib  2.16.3
This is the Beam C++ class library.
BFifoCirc.h
Go to the documentation of this file.
1 /*******************************************************************************
2  * BFifoCirc.h FIFO Buffer Class
3  * T.Barnaby, BEAM Ltd, 2006-02-22
4  * Copyright (c) 2012 All Right Reserved, Beam Ltd, http://www.beam.ltd.uk
5  *******************************************************************************
6  */
7 #ifndef BFifoCirc_H
8 #define BFifoCirc_H 1
9 
10 #include <stdint.h>
11 #include <BError.h>
12 #include <BCondInt.h>
13 #include <BMutex.h>
14 
16 class BFifoCircPos {
17 public:
18  BFifoCircPos(uint32_t size);
19  void setSize(uint32_t size);
20 
21  void set(uint32_t pos);
22  uint32_t pos();
23 
24  void increment(uint32_t numFifoSamples);
25  uint32_t difference(const BFifoCircPos& pos);
26 
27  operator int();
28  void operator+=(uint32_t numFifoSamples);
29  int operator==(const BFifoCircPos& pos);
30  int operator!=(const BFifoCircPos& pos);
31 private:
32  uint32_t osize;
33  uint32_t opos;
34 };
35 
37 template <class Type> class BFifoCirc {
38 public:
39  enum { defaultSize = 1024 };
40 
41  BFifoCirc(uint32_t size = defaultSize);
42  ~BFifoCirc();
43 
44  uint32_t size();
45  void clear();
46 
47  // Data write functions
48  uint32_t writeAvailable();
49  BError writeWaitAvailable(uint32_t numFifoSamples);
50 
51  BError write(const Type* data, uint32_t numFifoSamples);
52 
53  Type* writeData();
54  void writeDone(uint32_t numFifoSamples);
55 
56  // Data read functions
57  uint32_t readAvailable();
58  BError readWaitAvailable(uint32_t numFifoSamples);
59 
60  BError read(Type* data, uint32_t numFifoSamples);
61 
62  Type* readData();
63  BError readDone(uint32_t numFifoSamples);
64 
65  Type& operator[](int pos);
66 
67 protected:
68  // Functions for internal use
69  BError mapCircularBuffer(uint32_t size);
70  void unmapCircularBuffer();
71 
73  uint32_t ovmSize;
74  uint32_t osize;
75  Type* odata;
79 };
80 
81 #include <BFifoCirc.inc>
82 
83 #endif
uint32_t writeAvailable()
Returns the space available to write.
uint32_t ovmSize
Definition: BFifoCirc.h:73
void setSize(uint32_t size)
Definition: BFifoCirc.cpp:20
This class implements a pointer into the Fifo's circular buffer.
Definition: BFifoCirc.h:16
void increment(uint32_t numFifoSamples)
Increment the pointer by the given value.
Definition: BFifoCirc.cpp:32
BFifoCircPos oreadPos
Current read position.
Definition: BFifoCirc.h:78
Thread conditional value.
Definition: BCondInt.h:58
Type * writeData()
Return a pointer to the current start of the buffer.
Type & operator[](int pos)
Direct access to read samples in buffer.
BError readWaitAvailable(uint32_t numFifoSamples)
Wait for given number of samples.
BCondValue owriteNumFifoSamples
The number of samples in the FIFO.
Definition: BFifoCirc.h:77
BError readDone(uint32_t numFifoSamples)
Updates read pointer.
int operator==(const BFifoCircPos &pos)
Definition: BFifoCirc.cpp:51
uint32_t pos()
The current position.
Definition: BFifoCirc.cpp:28
BFifoCirc(uint32_t size=defaultSize)
uint32_t size()
Return the buffers actual size.
BError writeWaitAvailable(uint32_t numFifoSamples)
Wait for the given number of samples.
void unmapCircularBuffer()
void writeDone(uint32_t numFifoSamples)
Update the write pointer.
uint32_t osize
Definition: BFifoCirc.h:74
int operator!=(const BFifoCircPos &pos)
Definition: BFifoCirc.cpp:55
void clear()
Clear all of the data in the buffer.
BError write(const Type *data, uint32_t numFifoSamples)
Writes the data to the buffer. Blocks until complete.
void set(uint32_t pos)
Sets the position.
Definition: BFifoCirc.cpp:24
Definition: BMutex.h:14
char data[8]
Definition: BoapMc1.h:21
Type * odata
Definition: BFifoCirc.h:75
BFifoCircPos owritePos
Current write position.
Definition: BFifoCirc.h:76
Definition: BFifoCirc.h:39
BError read(Type *data, uint32_t numFifoSamples)
BMutex olock
Definition: BFifoCirc.h:72
uint32_t difference(const BFifoCircPos &pos)
Return the difference between the two pointers.
Definition: BFifoCirc.cpp:36
Definition: BError.h:25
uint32_t readAvailable()
Returns the number of bytes of data available.
BError mapCircularBuffer(uint32_t size)
Type * readData()
Pointer to raw data.
void operator+=(uint32_t numFifoSamples)
Definition: BFifoCirc.cpp:47
BFifoCircPos(uint32_t size)
Definition: BFifoCirc.cpp:17
This class implements a thread safe FIFO buffer.
Definition: BFifoCirc.h:37