All pastes #1945490 Raw Edit

Unnamed

public text v1 · immutable
#1945490 ·published 2010-09-21 01:04 UTC
rendered paste body
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 <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__