]> Dogcows Code - chaz/yoink/blobdiff - src/stlplus/containers/simple_ptr.tpp
import stlplus 3.7
[chaz/yoink] / src / stlplus / containers / simple_ptr.tpp
index 13f55967c7ec00ea4c9150524e0589b4c95dd445..4b08ffe8309a3d8fb29ad00d0516a8cbf5f01783 100644 (file)
@@ -1,7 +1,7 @@
 ////////////////////////////////////////////////////////////////////////////////\r
 \r
 //   Author:    Daniel Milton\r
-//   Copyright: (c) Daniel Milton           2002-2009\r
+//   Copyright: (c) Daniel Milton           2002 onwards\r
 \r
 ////////////////////////////////////////////////////////////////////////////////\r
 \r
@@ -250,55 +250,6 @@ namespace stlplus
     make_unique();\r
   }\r
 \r
-#ifdef STLPLUS_MEMBER_TEMPLATES\r
-\r
-  // dynamic cast of underlying pointer to a derived/parent\r
-  template <typename T, typename C>\r
-  template <typename T2>\r
-  simple_ptr_base<T2,C> simple_ptr_base<T,C>::dyn_cast(void) const\r
-  {\r
-    simple_ptr_base<T2,C> rtn;\r
-    rtn.m_pointer = dynamic_cast<T2*>(m_pointer);\r
-    if (rtn.m_pointer) {\r
-      delete rtn.m_count;\r
-      rtn.m_count = m_count;\r
-      rtn.increment();\r
-    }\r
-    return rtn;\r
-  }\r
-\r
-  // static cast of underlying pointer to a derived/parent\r
-  template <typename T, typename C>\r
-  template <typename T2>\r
-  simple_ptr_base<T2,C> simple_ptr_base<T,C>::stat_cast(void) const\r
-  {\r
-    simple_ptr_base<T2,C> rtn;\r
-    rtn.m_pointer = static_cast<T2*>(m_pointer);\r
-    if (rtn.m_pointer) {\r
-      delete rtn.m_count;\r
-      rtn.m_count = m_count;\r
-      rtn.increment();\r
-    }\r
-    return rtn;\r
-  }\r
-\r
-  // cast of underlying pointer to a base - while keeping the same ref-counted object\r
-  template <typename T, typename C>\r
-  template <typename T2>\r
-  simple_ptr_base<T2,C> simple_ptr_base<T,C>::cast(void) const\r
-  {\r
-    simple_ptr_base<T2,C> rtn;\r
-    rtn.m_pointer = (T2*)m_pointer;\r
-    if (rtn.m_pointer) {\r
-      delete rtn.m_count;\r
-      rtn.m_count = m_count;\r
-      rtn.increment();\r
-    }\r
-    return rtn;\r
-  }\r
-\r
-#endif\r
-\r
   // internal function for distinguishing unique simple_ptr objects\r
   // used for example in persistence routines\r
 \r
@@ -332,6 +283,112 @@ namespace stlplus
     }\r
   }\r
 \r
+\r
+  ////////////////////////////////////////////////////////////////////////////////\r
+  // simple_ptr class\r
+  ////////////////////////////////////////////////////////////////////////////////\r
+\r
+#ifdef STLPLUS_MEMBER_TEMPLATES\r
+\r
+  template <typename T>\r
+       template <typename T2>\r
+  simple_ptr<T2> simple_ptr<T>::dyn_cast(void) const {\r
+               simple_ptr<T2> rtn;\r
+               T2* p = dynamic_cast<T2*>(this->m_pointer);\r
+               if (p) rtn._make_alias(p, this->m_count);\r
+               return rtn;\r
+       }\r
+\r
+  template <typename T>\r
+       template <typename T2>\r
+  simple_ptr<T2> simple_ptr<T>::stat_cast(void) const {\r
+               simple_ptr<T2> rtn;\r
+               T2* p = static_cast<T2*>(this->m_pointer);\r
+               if (p) rtn._make_alias(p, this->m_count);\r
+               return rtn;\r
+       }\r
+\r
+  template <typename T>\r
+       template <typename T2>\r
+  simple_ptr<T2> simple_ptr<T>::cast(void) const {\r
+               simple_ptr<T2> rtn;\r
+               T2* p = (T2*)this->m_pointer;\r
+               if (p) rtn._make_alias(p, this->m_count);\r
+               return rtn;\r
+       }\r
+\r
+#endif\r
+\r
+  ////////////////////////////////////////////////////////////////////////////////\r
+  // simple_ptr_clone class\r
+  ////////////////////////////////////////////////////////////////////////////////\r
+\r
+#ifdef STLPLUS_MEMBER_TEMPLATES\r
+\r
+  template <typename T>\r
+       template <typename T2>\r
+  simple_ptr_clone<T2> simple_ptr_clone<T>::dyn_cast(void) const {\r
+               simple_ptr_clone<T2> rtn;\r
+               T2* p = dynamic_cast<T2*>(this->m_pointer);\r
+               if (p) rtn._make_alias(p, this->m_count);\r
+               return rtn;\r
+       }\r
+\r
+  template <typename T>\r
+       template <typename T2>\r
+  simple_ptr_clone<T2> simple_ptr_clone<T>::stat_cast(void) const {\r
+               simple_ptr_clone<T2> rtn;\r
+               T2* p = static_cast<T2*>(this->m_pointer);\r
+               if (p) rtn._make_alias(p, this->m_count);\r
+               return rtn;\r
+       }\r
+\r
+  template <typename T>\r
+       template <typename T2>\r
+  simple_ptr_clone<T2> simple_ptr_clone<T>::cast(void) const {\r
+               simple_ptr_clone<T2> rtn;\r
+               T2* p = (T2*)this->m_pointer;\r
+               if (p) rtn._make_alias(p, this->m_count);\r
+               return rtn;\r
+       }\r
+\r
+#endif\r
+\r
+  ////////////////////////////////////////////////////////////////////////////////\r
+  // simple_ptr_nocopy class\r
+  ////////////////////////////////////////////////////////////////////////////////\r
+\r
+#ifdef STLPLUS_MEMBER_TEMPLATES\r
+\r
+  template <typename T>\r
+       template <typename T2>\r
+  simple_ptr_nocopy<T2> simple_ptr_nocopy<T>::dyn_cast(void) const {\r
+               simple_ptr_nocopy<T2> rtn;\r
+               T2* p = dynamic_cast<T2*>(this->m_pointer);\r
+               if (p) rtn._make_alias(p, this->m_count);\r
+               return rtn;\r
+       }\r
+\r
+  template <typename T>\r
+       template <typename T2>\r
+  simple_ptr_nocopy<T2> simple_ptr_nocopy<T>::stat_cast(void) const {\r
+               simple_ptr_nocopy<T2> rtn;\r
+               T2* p = static_cast<T2*>(this->m_pointer);\r
+               if (p) rtn._make_alias(p, this->m_count);\r
+               return rtn;\r
+       }\r
+\r
+  template <typename T>\r
+       template <typename T2>\r
+  simple_ptr_nocopy<T2> simple_ptr_nocopy<T>::cast(void) const {\r
+               simple_ptr_nocopy<T2> rtn;\r
+               T2* p = (T2*)this->m_pointer;\r
+               if (p) rtn._make_alias(p, this->m_count);\r
+               return rtn;\r
+       }\r
+\r
+#endif\r
+\r
   ////////////////////////////////////////////////////////////////////////////////\r
 \r
 } // end namespace stlplus\r
This page took 0.024177 seconds and 4 git commands to generate.