Index: libs/libmyth/mythdeque.h =================================================================== --- libs/libmyth/mythdeque.h (revision 26423) +++ libs/libmyth/mythdeque.h (working copy) @@ -3,9 +3,15 @@ #ifndef __MYTH_DEQUE_H__ #define __MYTH_DEQUE_H__ +#include #include using namespace std; +template +inline T myth_deque_init(const T&) { return (T)(0); } +template<> +inline QString myth_deque_init(const QString&) { return QString(); } + /** \class MythDeque * \brief MythDeque is similar to QPtrQueue, while being based off * deque, this allows that items that are not at the head of @@ -18,9 +24,10 @@ /// \brief Removes item from front of list and returns a copy. O(1). T dequeue() { + T item; if (deque::empty()) - return (T)(0); - T item = deque::front(); + return myth_deque_init(item); + item = deque::front(); deque::pop_front(); return item; } @@ -65,16 +72,22 @@ size_type count() const { return deque::size(); } /// \brief Returns item at head of list. O(1). - T head() { return (deque::size()) ? deque::front() : (T)(NULL); } + T head() + { if (!deque::empty()) return deque::front(); + T dummy; return myth_deque_init(dummy); } /// \brief Returns item at head of list. O(1). const T head() const - { return (deque::size()) ? deque::front() : (T)(NULL); } + { if (!deque::empty()) return deque::front(); + T dummy; return myth_deque_init(dummy); } /// \brief Returns item at tail of list. O(1). - T tail() { return (deque::size()) ? deque::back() : (T)(NULL); } + T tail() + { if (!deque::empty()) return deque::back(); + T dummy; return myth_deque_init(dummy); } /// \brief Returns item at tail of list. O(1). const T tail() const - { return (deque::size()) ? deque::back() : (T)(NULL); } + { if (!deque::empty()) return deque::back(); + T dummy; return myth_deque_init(dummy); } }; #endif // __MYTH_DEQUE_H__