]> git.sesse.net Git - vlc/commitdiff
Skins2: Add (and use) template parameter typedefs so that they might be used, say...
authorJP Dinger <jpd@videolan.org>
Sat, 21 Nov 2009 18:22:38 +0000 (19:22 +0100)
committerJP Dinger <jpd@videolan.org>
Sat, 5 Dec 2009 21:25:42 +0000 (22:25 +0100)
modules/gui/skins2/utils/pointer.hpp

index 0c17144492c67b5cbe3fe9da050172ebe35a6e71..4d2aa29c25b9e6bb1bbcceab46d27c5c21591215 100644 (file)
 template <class T> class CountedPtr
 {
 public:
-    explicit CountedPtr( T *pPtr = 0 ): m_pCounter( 0 )
+    typedef T *pointer;
+    typedef T &reference;
+
+    explicit CountedPtr( pointer pPtr = 0 ): m_pCounter( 0 )
     {
         if( pPtr ) m_pCounter = new Counter( pPtr );
     }
 
     ~CountedPtr() { release(); }
 
-    CountedPtr(const CountedPtr &rPtr ) { acquire( rPtr.m_pCounter ); }
+    CountedPtr( const CountedPtr &rPtr ) { acquire( rPtr.m_pCounter ); }
 
     CountedPtr &operator=( const CountedPtr &rPtr )
     {
@@ -49,11 +52,11 @@ public:
         return *this;
     }
 
-    T &operator*() const { return *m_pCounter->m_pPtr; }
-
-    T *operator->() const {return m_pCounter->m_pPtr; }
+    // XXX Somebody explain why operator* and operator-> don't use get()
+    reference operator*() const { return *m_pCounter->m_pPtr; }
+    pointer   operator->() const { return m_pCounter->m_pPtr; }
 
-    T *get() const { return m_pCounter ? m_pCounter->m_pPtr : 0; }
+    pointer get() const { return m_pCounter ? m_pCounter->m_pPtr : 0; }
 
     bool unique() const
     {
@@ -63,9 +66,9 @@ public:
 private:
     struct Counter
     {
-        Counter( T* pPtr = 0, unsigned int c = 1 )
+        Counter( pointer pPtr = 0, unsigned int c = 1 )
                : m_pPtr( pPtr ), m_count( c ) { }
-        T* m_pPtr;
+        pointer m_pPtr;
         unsigned int m_count;
     } *m_pCounter;