00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef FXPTRQUEUE_H
00022 #define FXPTRQUEUE_H
00023
00024 namespace FX {
00025
00026
00028 class FXAPI FXPtrQueue {
00029 private:
00030 void** list;
00031 volatile FXuint size;
00032 volatile FXuint head;
00033 volatile FXuint tail;
00034 private:
00035 FXPtrQueue(const FXPtrQueue&);
00036 FXPtrQueue &operator=(const FXPtrQueue&);
00037 public:
00038
00040 FXPtrQueue(FXuint sz=256);
00041
00043 FXbool setSize(FXuint sz);
00044
00046 FXuint getSize() const;
00047
00049 FXuint getHead() const;
00050
00052 FXuint getTail() const;
00053
00055 FXuint getUsed() const;
00056
00058 FXuint getFree() const;
00059
00061 FXbool isFull() const;
00062
00064 FXbool isEmpty() const;
00065
00067 FXbool peek(void*& ptr);
00068
00070 FXbool push(void* ptr);
00071
00073 FXbool pop(void*& ptr);
00074
00076 ~FXPtrQueue();
00077 };
00078
00079
00081 template <class TYPE>
00082 class FXPtrQueueOf : public FXPtrQueue {
00083 public:
00084 FXPtrQueueOf(){}
00085 FXPtrQueueOf(FXuint sz):FXPtrQueue(sz){}
00086 FXbool peek(TYPE*& ptr){ return FXPtrQueue::peek((void*&)ptr); }
00087 FXbool push(TYPE* ptr){ return FXPtrQueue::push((void*)ptr); }
00088 FXbool pop(TYPE*& ptr){ return FXPtrQueue::pop((void*&)ptr); }
00089 };
00090
00091 }
00092
00093 #endif