All pastes #1945501 Raw Edit

Something

public text v1 · immutable
#1945501 ·published 2010-09-21 01:25 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,8 +24,9 @@
     /// \brief Removes item from front of list and returns a copy. O(1).
     T dequeue()
     {
+        T *dummy = NULL;
         if (deque<T>::empty())
-            return (T)(0);
+            return myth_deque_init(dummy);
         T 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 = NULL; 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 = NULL; 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 = NULL; 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 = NULL; return myth_deque_init(dummy); }
 };
 
 #endif // __MYTH_DEQUE_H__