00001 /* 00002 * This file is part of the Standard Portable Library (SPL). 00003 * 00004 * SPL is free software: you can redistribute it and/or modify 00005 * it under the terms of the GNU General Public License as published by 00006 * the Free Software Foundation, either version 3 of the License, or 00007 * (at your option) any later version. 00008 * 00009 * SPL is distributed in the hope that it will be useful, 00010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 * GNU General Public License for more details. 00013 * 00014 * You should have received a copy of the GNU General Public License 00015 * along with SPL. If not, see <http://www.gnu.org/licenses/>. 00016 */ 00017 #ifndef _refcountptrcast_h 00018 #define _refcountptrcast_h 00019 00020 #include <spl/RefCountPtr.h> 00021 00028 template<class BASE, class CAST, class CASTPTR> 00029 class RefCountPtrCast : public RefCountPtr<BASE> 00030 { 00031 public: 00032 inline RefCountPtrCast() 00033 : RefCountPtr<BASE>() 00034 { 00035 } 00036 00037 inline RefCountPtrCast(BASE *s) 00038 : RefCountPtr<BASE>(s) 00039 { 00040 } 00041 00042 inline RefCountPtrCast(const RefCountPtrCast& s) 00043 : RefCountPtr<BASE>((_PtrHolder<BASE> *)s.GetHolder()) 00044 { 00045 } 00046 00047 inline RefCountPtrCast(const CASTPTR& s) 00048 : RefCountPtr<BASE>((_PtrHolder<BASE> *)s.GetHolder()) 00049 { 00050 } 00051 00052 inline RefCountPtrCast(_PtrHolder<BASE> *holder) 00053 : RefCountPtr<BASE>(holder) 00054 { 00055 } 00056 00057 ~RefCountPtrCast() 00058 { 00059 } 00060 00061 operator CASTPTR() 00062 { 00063 if (! RefCountPtr<BASE>::IsNull()) 00064 { 00065 return CASTPTR((_PtrHolder<CAST> *)RefCountPtr<BASE>::GetHolder()); 00066 } 00067 return CASTPTR(); 00068 } 00069 }; 00070 00073 #endif