rendered paste bodyIndex: 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 <QString>
#include <deque>
using namespace std;
+template<typename T>
+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<T>::empty())
- return (T)(0);
- T item = deque<T>::front();
+ return myth_deque_init(item);
+ item = deque<T>::front();
deque<T>::pop_front();
return item;
}
@@ -65,16 +72,22 @@
size_type count() const { return deque<T>::size(); }
/// \brief Returns item at head of list. O(1).
- T head() { return (deque<T>::size()) ? deque<T>::front() : (T)(NULL); }
+ T head()
+ { if (!deque<T>::empty()) return deque<T>::front();
+ T dummy; return myth_deque_init(dummy); }
/// \brief Returns item at head of list. O(1).
const T head() const
- { return (deque<T>::size()) ? deque<T>::front() : (T)(NULL); }
+ { if (!deque<T>::empty()) return deque<T>::front();
+ T dummy; return myth_deque_init(dummy); }
/// \brief Returns item at tail of list. O(1).
- T tail() { return (deque<T>::size()) ? deque<T>::back() : (T)(NULL); }
+ T tail()
+ { if (!deque<T>::empty()) return deque<T>::back();
+ T dummy; return myth_deque_init(dummy); }
/// \brief Returns item at tail of list. O(1).
const T tail() const
- { return (deque<T>::size()) ? deque<T>::back() : (T)(NULL); }
+ { if (!deque<T>::empty()) return deque<T>::back();
+ T dummy; return myth_deque_init(dummy); }
};
#endif // __MYTH_DEQUE_H__