This is Unofficial EPICS BASE Doxygen Site
epicsRingPointer.cpp
Go to the documentation of this file.
1 /*************************************************************************\
2 * Copyright (c) 2002 The University of Chicago, as Operator of Argonne
3 * National Laboratory.
4 * Copyright (c) 2002 The Regents of the University of California, as
5 * Operator of Los Alamos National Laboratory.
6 * Copyright (c) 2012 ITER Organization.
7 * EPICS BASE is distributed subject to a Software License Agreement found
8 * in file LICENSE that is included with this distribution.
9 \*************************************************************************/
10 
11 /*
12  * Author: Marty Kraimer Date: 13OCT2000
13  * Ralph Lange <Ralph.Lange@gmx.de>
14  */
15 
16 
17 #include <stddef.h>
18 #include <string.h>
19 #include <stdlib.h>
20 #include <stddef.h>
21 #include <stdio.h>
22 
23 #include "epicsRingPointer.h"
24 typedef epicsRingPointer<void> voidPointer;
25 
26 
27 LIBCOM_API epicsRingPointerId epicsStdCall epicsRingPointerCreate(int size)
28 {
29  voidPointer *pvoidPointer = new voidPointer(size, false);
30  return(reinterpret_cast<void *>(pvoidPointer));
31 }
32 
33 LIBCOM_API epicsRingPointerId epicsStdCall epicsRingPointerLockedCreate(int size)
34 {
35  voidPointer *pvoidPointer = new voidPointer(size, true);
36  return(reinterpret_cast<void *>(pvoidPointer));
37 }
38 
39 LIBCOM_API void epicsStdCall epicsRingPointerDelete(epicsRingPointerId id)
40 {
41  voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
42  delete pvoidPointer;
43 }
44 
45 LIBCOM_API void* epicsStdCall epicsRingPointerPop(epicsRingPointerId id)
46 {
47  voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
48  return pvoidPointer->pop();
49 }
50 
51 LIBCOM_API int epicsStdCall epicsRingPointerPush(epicsRingPointerId id, void *p)
52 {
53  voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
54  return((pvoidPointer->push(p) ? 1 : 0));
55 }
56 
57 LIBCOM_API void epicsStdCall epicsRingPointerFlush(epicsRingPointerId id)
58 {
59  voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
60  pvoidPointer->flush();
61 }
62 
63 LIBCOM_API int epicsStdCall epicsRingPointerGetFree(epicsRingPointerId id)
64 {
65  voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
66  return(pvoidPointer->getFree());
67 }
68 
69 LIBCOM_API int epicsStdCall epicsRingPointerGetUsed(epicsRingPointerId id)
70 {
71  voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
72  return(pvoidPointer->getUsed());
73 }
74 
75 LIBCOM_API int epicsStdCall epicsRingPointerGetSize(epicsRingPointerId id)
76 {
77  voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
78  return(pvoidPointer->getSize());
79 }
80 
81 LIBCOM_API int epicsStdCall epicsRingPointerIsEmpty(epicsRingPointerId id)
82 {
83  voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
84  return((pvoidPointer->isEmpty()) ? 1 : 0);
85 }
86 
87 LIBCOM_API int epicsStdCall epicsRingPointerIsFull(epicsRingPointerId id)
88 {
89  voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
90  return((pvoidPointer->isFull()) ? 1 : 0);
91 }
92 
94 {
95  voidPointer const *pvoidPointer = reinterpret_cast<voidPointer const*>(id);
96  return(pvoidPointer->getHighWaterMark());
97 }
98 
100 {
101  voidPointer *pvoidPointer = reinterpret_cast<voidPointer*>(id);
102  pvoidPointer->resetHighWaterMark();
103 }
LIBCOM_API void epicsStdCall epicsRingPointerDelete(epicsRingPointerId id)
Delete the ring buffer and free any associated memory.
LIBCOM_API int epicsStdCall epicsRingPointerGetFree(epicsRingPointerId id)
Return the amount of empty space in the ring buffer.
LIBCOM_API int epicsStdCall epicsRingPointerPush(epicsRingPointerId id, void *p)
Push pointer into the ring buffer.
LIBCOM_API int epicsStdCall epicsRingPointerGetHighWaterMark(epicsRingPointerIdConst id)
Get the Highwater mark of the ring buffer.
epicsRingPointer< void > voidPointer
LIBCOM_API epicsRingPointerId epicsStdCall epicsRingPointerLockedCreate(int size)
Create a new ring buffer, secured by a spinlock.
void const * epicsRingPointerIdConst
LIBCOM_API void *epicsStdCall epicsRingPointerPop(epicsRingPointerId id)
Take an element off the ring.
LIBCOM_API void epicsStdCall epicsRingPointerResetHighWaterMark(epicsRingPointerId id)
Reset the Highwater mark of the ring buffer.
LIBCOM_API epicsRingPointerId epicsStdCall epicsRingPointerCreate(int size)
Create a new ring buffer.
LIBCOM_API int epicsStdCall epicsRingPointerGetSize(epicsRingPointerId id)
Return the size of the ring.
LIBCOM_API int epicsStdCall epicsRingPointerIsEmpty(epicsRingPointerId id)
Check if the ring buffer is currently empty.
LIBCOM_API int epicsStdCall epicsRingPointerGetUsed(epicsRingPointerId id)
Return the number of elements stored in the ring buffer.
void * epicsRingPointerId
An identifier for the C API to a ring buffer storing pointers.
LIBCOM_API void epicsStdCall epicsRingPointerFlush(epicsRingPointerId id)
Remove all elements from the ring.
A circular buffer to store pointers.
LIBCOM_API int epicsStdCall epicsRingPointerIsFull(epicsRingPointerId id)
Check if the ring buffer is currently full.