00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __UT_RingBufferRaw__
00020 #define __UT_RingBufferRaw__
00021
00022 #include "UT_API.h"
00023
00024
00025
00026
00027
00028 class UT_API UT_RingBufferRaw {
00029 public:
00030 UT_RingBufferRaw();
00031 UT_RingBufferRaw(int capacity);
00032 ~UT_RingBufferRaw();
00033
00034
00035
00036
00037 void insert(int id, void *data);
00038 void remove(int id);
00039
00040
00041
00042 int push(void *data);
00043
00044
00045 void pop();
00046
00047
00048 void pop(int number);
00049
00050 int entries() const { return myLastId - myFirstId + 1; }
00051 int peakUsage() const { return myPeak; }
00052
00053
00054
00055 void *operator[](int id) const;
00056 void *operator()(int id) const;
00057
00058 void *front() const { return myData[myFirst]; }
00059 int frontId() const { return myFirstId; }
00060 void *back() const { return myData[myLast]; }
00061 int backId() const { return myLastId; }
00062
00063 void display() const;
00064
00065 private:
00066 void checkResize(int number);
00067 int idIndex(int id) const
00068 { return (id - myFirstId + myFirst) % myCapacity; }
00069 void removeNulls();
00070
00071 private:
00072 void **myData;
00073 int myCapacity;
00074 int myFirst;
00075 int myLast;
00076
00077
00078
00079 int myFirstId;
00080 int myLastId;
00081
00082 int myPeak;
00083 };
00084
00085 #endif
00086