00001 // -*- Mode: c++ -*- 00002 00003 #ifndef __MYTH_DEQUE_H__ 00004 #define __MYTH_DEQUE_H__ 00005 00006 #include <deque> 00007 using namespace std; 00008 00014 template<typename T> 00015 class MythDeque : public deque<T> 00016 { 00017 public: 00019 T dequeue() 00020 { 00021 if (deque<T>::empty()) 00022 return (T)(0); 00023 T item = deque<T>::front(); 00024 deque<T>::pop_front(); 00025 return item; 00026 } 00028 void enqueue(T d) { deque<T>::push_back(d); } 00029 00030 typedef typename deque<T>::iterator iterator; 00031 typedef typename deque<T>::const_iterator const_iterator; 00032 typedef typename deque<T>::size_type size_type; 00033 00035 iterator find(T const item) 00036 { 00037 for (iterator it = deque<T>::begin(); it != deque<T>::end(); ++it) 00038 if (*it == item) 00039 return it; 00040 return deque<T>::end(); 00041 } 00042 00044 const_iterator find(T const item) const 00045 { 00046 for (const_iterator it = deque<T>::begin(); it != deque<T>::end(); ++it) 00047 if (*it == item) 00048 return it; 00049 return deque<T>::end(); 00050 } 00051 00053 void remove(T const item) 00054 { 00055 iterator it = find(item); 00056 if (it != deque<T>::end()) 00057 deque<T>::erase(it); 00058 } 00059 00061 bool contains(T const item) const 00062 { return find(item) != deque<T>::end(); } 00063 00065 size_type count() const { return deque<T>::size(); } 00066 00068 T head() { return (deque<T>::size()) ? deque<T>::front() : (T)(NULL); } 00070 const T head() const 00071 { return (deque<T>::size()) ? deque<T>::front() : (T)(NULL); } 00072 00074 T tail() { return (deque<T>::size()) ? deque<T>::back() : (T)(NULL); } 00076 const T tail() const 00077 { return (deque<T>::size()) ? deque<T>::back() : (T)(NULL); } 00078 }; 00079 00080 #endif // __MYTH_DEQUE_H__
1.5.5