00001 #ifndef __CMWFWLIST_H__
00002 #define __CMWFWLIST_H__
00003
00004 class cmwfwDoorKeeper;
00005 template <class T> class ListWrapperClass;
00006
00007
00008 template <class T> class cmwfwList{
00009 public:
00010 friend class cmwfwDeviceServer;
00011 friend class cmwfwSubscribtionManager;
00012 friend class cmwfwPoller;
00013 friend class cmwfwForwarder;
00014 friend class cmwfwIOValue;
00015
00016 cmwfwList(bool thr_safe = true);
00017 ~cmwfwList(void);
00018 protected:
00019 private:
00020 void Size(int* sz,bool useMutex = true);
00021 bool get(T& item, T* dest, bool useMutex = true);
00022 bool getFirst(T* dest,bool useMutex = true);
00023 bool getLast(T* dest,bool useMutex = true);
00024 bool getNext(T* dest,T pos,bool useMutex = true);
00025 bool getNext(T* dest,bool useMutex = true);
00026 bool getPrev(T* dest,T pos,bool useMutex = true);
00027 bool getPrev(T* dest,bool useMutex = true);
00028 bool getCurrent(T* dest,bool useMutex = true);
00029 void resetCurrent(bool useMutex = true);
00030 bool hasItem(T item,bool useMutex = true);
00031 bool insert(T item,bool useMutex = true);
00032 bool remove(T item,bool useMutex = true);
00033 void lock();
00034 void unlock();
00035 void heaperr(int line);
00036
00037 bool thread_safe;
00038 cmwfwDoorKeeper* doorkeeper;
00039 int size;
00040 ListWrapperClass<T>* current;
00041 ListWrapperClass<T>* first;
00042 ListWrapperClass<T>* last;
00043 };
00044
00045
00046
00047 template <class T> class ListWrapperClass{
00048 public:
00049 ListWrapperClass(T input);
00050 T Data();
00051 ListWrapperClass* next;
00052 ListWrapperClass* prev;
00053 protected:
00054 private:
00055 T data;
00056 };
00057
00058 #endif //#ifndef __CMWFWLIST_H__