This is Unofficial EPICS BASE Doxygen Site
epicsRingPointer.cpp File Reference
#include <stddef.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include "epicsRingPointer.h"
+ Include dependency graph for epicsRingPointer.cpp:

Go to the source code of this file.

Typedefs

typedef epicsRingPointer< void > voidPointer
 

Functions

LIBCOM_API epicsRingPointerId epicsStdCall epicsRingPointerCreate (int size)
 Create a new ring buffer. More...
 
LIBCOM_API epicsRingPointerId epicsStdCall epicsRingPointerLockedCreate (int size)
 Create a new ring buffer, secured by a spinlock. More...
 
LIBCOM_API void epicsStdCall epicsRingPointerDelete (epicsRingPointerId id)
 Delete the ring buffer and free any associated memory. More...
 
LIBCOM_API void *epicsStdCall epicsRingPointerPop (epicsRingPointerId id)
 Take an element off the ring. More...
 
LIBCOM_API int epicsStdCall epicsRingPointerPush (epicsRingPointerId id, void *p)
 Push pointer into the ring buffer. More...
 
LIBCOM_API void epicsStdCall epicsRingPointerFlush (epicsRingPointerId id)
 Remove all elements from the ring. More...
 
LIBCOM_API int epicsStdCall epicsRingPointerGetFree (epicsRingPointerId id)
 Return the amount of empty space in the ring buffer. More...
 
LIBCOM_API int epicsStdCall epicsRingPointerGetUsed (epicsRingPointerId id)
 Return the number of elements stored in the ring buffer. More...
 
LIBCOM_API int epicsStdCall epicsRingPointerGetSize (epicsRingPointerId id)
 Return the size of the ring. More...
 
LIBCOM_API int epicsStdCall epicsRingPointerIsEmpty (epicsRingPointerId id)
 Check if the ring buffer is currently empty. More...
 
LIBCOM_API int epicsStdCall epicsRingPointerIsFull (epicsRingPointerId id)
 Check if the ring buffer is currently full. More...
 
LIBCOM_API int epicsStdCall epicsRingPointerGetHighWaterMark (epicsRingPointerIdConst id)
 Get the Highwater mark of the ring buffer. More...
 
LIBCOM_API void epicsStdCall epicsRingPointerResetHighWaterMark (epicsRingPointerId id)
 Reset the Highwater mark of the ring buffer. More...
 

Typedef Documentation

typedef epicsRingPointer<void> voidPointer

Definition at line 24 of file epicsRingPointer.cpp.

Function Documentation

LIBCOM_API epicsRingPointerId epicsStdCall epicsRingPointerCreate ( int  size)

Create a new ring buffer.

Parameters
sizeSize of ring buffer to create
Returns
Ring buffer identifier or NULL on failure

Definition at line 27 of file epicsRingPointer.cpp.

28 {
29  voidPointer *pvoidPointer = new voidPointer(size, false);
30  return(reinterpret_cast<void *>(pvoidPointer));
31 }
epicsRingPointer< void > voidPointer
LIBCOM_API void epicsStdCall epicsRingPointerDelete ( epicsRingPointerId  id)

Delete the ring buffer and free any associated memory.

Parameters
idRing buffer identifier

Definition at line 39 of file epicsRingPointer.cpp.

40 {
41  voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
42  delete pvoidPointer;
43 }
epicsRingPointer< void > voidPointer
LIBCOM_API void epicsStdCall epicsRingPointerFlush ( epicsRingPointerId  id)

Remove all elements from the ring.

Parameters
idRing buffer identifier
Note
If this operation is performed on a ring buffer of the unsecured kind, all access to the ring should be locked.

Definition at line 57 of file epicsRingPointer.cpp.

58 {
59  voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
60  pvoidPointer->flush();
61 }
epicsRingPointer< void > voidPointer
LIBCOM_API int epicsStdCall epicsRingPointerGetFree ( epicsRingPointerId  id)

Return the amount of empty space in the ring buffer.

Parameters
idRing buffer identifier
Returns
The number of additional elements it could hold.

Definition at line 63 of file epicsRingPointer.cpp.

64 {
65  voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
66  return(pvoidPointer->getFree());
67 }
epicsRingPointer< void > voidPointer
LIBCOM_API int epicsStdCall epicsRingPointerGetHighWaterMark ( epicsRingPointerIdConst  id)

Get the Highwater mark of the ring buffer.

Returns the largest number of elements the ring buffer has held since the water mark was last reset. A new ring buffer starts with a water mark of 0.

Parameters
idRing buffer identifier
Returns
Actual Highwater mark

Definition at line 93 of file epicsRingPointer.cpp.

94 {
95  voidPointer const *pvoidPointer = reinterpret_cast<voidPointer const*>(id);
96  return(pvoidPointer->getHighWaterMark());
97 }
epicsRingPointer< void > voidPointer
LIBCOM_API int epicsStdCall epicsRingPointerGetSize ( epicsRingPointerId  id)

Return the size of the ring.

Parameters
idRing buffer identifier
Returns
The size of the ring buffer, i.e. the value of size given when the ring was created.

Definition at line 75 of file epicsRingPointer.cpp.

76 {
77  voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
78  return(pvoidPointer->getSize());
79 }
epicsRingPointer< void > voidPointer
LIBCOM_API int epicsStdCall epicsRingPointerGetUsed ( epicsRingPointerId  id)

Return the number of elements stored in the ring buffer.

Parameters
idRing buffer identifier
Returns
The number of elements stored in the ring buffer

Definition at line 69 of file epicsRingPointer.cpp.

70 {
71  voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
72  return(pvoidPointer->getUsed());
73 }
epicsRingPointer< void > voidPointer
LIBCOM_API int epicsStdCall epicsRingPointerIsEmpty ( epicsRingPointerId  id)

Check if the ring buffer is currently empty.

Parameters
idRing buffer identifier
Returns
1 if the ring is empty, otherwise 0

Definition at line 81 of file epicsRingPointer.cpp.

82 {
83  voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
84  return((pvoidPointer->isEmpty()) ? 1 : 0);
85 }
epicsRingPointer< void > voidPointer
LIBCOM_API int epicsStdCall epicsRingPointerIsFull ( epicsRingPointerId  id)

Check if the ring buffer is currently full.

Parameters
idRing buffer identifier
Returns
1 if the ring buffer is full, otherwise 0

Definition at line 87 of file epicsRingPointer.cpp.

88 {
89  voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
90  return((pvoidPointer->isFull()) ? 1 : 0);
91 }
epicsRingPointer< void > voidPointer
LIBCOM_API epicsRingPointerId epicsStdCall epicsRingPointerLockedCreate ( int  size)

Create a new ring buffer, secured by a spinlock.

Parameters
sizeSize of ring buffer to create
Returns
Ring buffer identifier or NULL on failure

Definition at line 33 of file epicsRingPointer.cpp.

34 {
35  voidPointer *pvoidPointer = new voidPointer(size, true);
36  return(reinterpret_cast<void *>(pvoidPointer));
37 }
epicsRingPointer< void > voidPointer
LIBCOM_API void* epicsStdCall epicsRingPointerPop ( epicsRingPointerId  id)

Take an element off the ring.

Parameters
idRing buffer identifier
Returns
The pointer from the buffer, or NULL if the ring was empty

Definition at line 45 of file epicsRingPointer.cpp.

46 {
47  voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
48  return pvoidPointer->pop();
49 }
epicsRingPointer< void > voidPointer
LIBCOM_API int epicsStdCall epicsRingPointerPush ( epicsRingPointerId  id,
void *  p 
)

Push pointer into the ring buffer.

Parameters
idRing buffer identifier
pPointer to be pushed to the ring
Returns
1 if the pointer was successfully pushed, 0 if the buffer was full

Definition at line 51 of file epicsRingPointer.cpp.

52 {
53  voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
54  return((pvoidPointer->push(p) ? 1 : 0));
55 }
epicsRingPointer< void > voidPointer
LIBCOM_API void epicsStdCall epicsRingPointerResetHighWaterMark ( epicsRingPointerId  id)

Reset the Highwater mark of the ring buffer.

The Highwater mark will be set to the current usage

Parameters
idRing buffer identifier

Definition at line 99 of file epicsRingPointer.cpp.

100 {
101  voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
102  pvoidPointer->resetHighWaterMark();
103 }
epicsRingPointer< void > voidPointer