////////////////////////////////////////////////////////////////////////////////\r
\r
// Author: Daniel Milton\r
-// Copyright: (c) Daniel Milton 2002-2009\r
+// Copyright: (c) Daniel Milton 2002 onwards\r
\r
////////////////////////////////////////////////////////////////////////////////\r
\r
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
}\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