00001
00014 #ifndef __DATA_HOLDER_H__
00015 #define __DATA_HOLDER_H__
00016
00017 #include <exception.h>
00018
00019 #include <assert.h>
00020 #include <stdlib.h>
00021
00027 template <class ItemType> class DataHolder {
00028 public:
00033 DataHolder(unsigned long size) throw (NotEnoughMemoryException)
00034 : last(0), size(size) {
00035 pool= (ItemType *)malloc(size * sizeof(ItemType));
00036
00037 if (pool == NULL) {
00038 throw new NotEnoughMemoryException();
00039 }
00040 }
00041
00045 virtual ~DataHolder() {
00046 free(pool);
00047 }
00048
00054 virtual ItemType get()= 0;
00055
00060 virtual bool isEmpty()= 0;
00061
00067 virtual bool isFull()= 0;
00068
00074 inline void put(ItemType item) {
00075 assert (!isFull());
00076
00077 pool[last]= item;
00078 last= (last + 1) % getSize();
00079 }
00080
00081 protected:
00086 inline unsigned long getSize() {
00087 return size;
00088 }
00089
00093 unsigned long last;
00094
00098 ItemType* pool;
00099
00100 private:
00104 unsigned long size;
00105
00106 };
00107
00108 #endif // ! __DATA_HOLDER_H__