diff options
| author | Mike Buland <eichlan@xagasoft.com> | 2007-04-09 22:17:25 +0000 |
|---|---|---|
| committer | Mike Buland <eichlan@xagasoft.com> | 2007-04-09 22:17:25 +0000 |
| commit | 015b1ee8079175cace17917d375d24175311b2f8 (patch) | |
| tree | 14ad9a8863957b28d18e7a8e6ba3611f70aee5bf /src | |
| parent | 92312a5ab76a934f3e79896722d8ec46deffb233 (diff) | |
| download | libbu++-015b1ee8079175cace17917d375d24175311b2f8.tar.gz libbu++-015b1ee8079175cace17917d375d24175311b2f8.tar.bz2 libbu++-015b1ee8079175cace17917d375d24175311b2f8.tar.xz libbu++-015b1ee8079175cace17917d375d24175311b2f8.zip | |
The SPtr is castable now. just say SPtrCast<TypeToCastTo>( ASPtr );
Diffstat (limited to 'src')
| -rw-r--r-- | src/sptr.h | 15 | ||||
| -rw-r--r-- | src/tests/sptr.cpp | 5 |
2 files changed, 18 insertions, 2 deletions
| @@ -4,9 +4,14 @@ | |||
| 4 | #include <stdint.h> | 4 | #include <stdint.h> |
| 5 | #include <stdio.h> | 5 | #include <stdio.h> |
| 6 | 6 | ||
| 7 | template<typename T> class SPtr; | ||
| 8 | template< typename Tb, typename Ta > SPtr<Tb> SPtrCast( SPtr<Ta> src ); | ||
| 9 | |||
| 7 | template<typename T> | 10 | template<typename T> |
| 8 | class SPtr | 11 | class SPtr |
| 9 | { | 12 | { |
| 13 | template<typename Tb, typename Ta> | ||
| 14 | friend SPtr<Tb> SPtrCast( SPtr<Ta> pt ); | ||
| 10 | public: | 15 | public: |
| 11 | SPtr() : | 16 | SPtr() : |
| 12 | pRefCnt( NULL ), | 17 | pRefCnt( NULL ), |
| @@ -96,4 +101,14 @@ private: | |||
| 96 | T *pData; | 101 | T *pData; |
| 97 | }; | 102 | }; |
| 98 | 103 | ||
| 104 | template< typename Tb, typename Ta > SPtr<Tb> SPtrCast( SPtr<Ta> src ) | ||
| 105 | { | ||
| 106 | SPtr<Tb> ret; | ||
| 107 | ret.pRefCnt = src.pRefCnt; | ||
| 108 | ret.pData = dynamic_cast<Tb *>(src.pData); | ||
| 109 | if( ret.pRefCnt ) | ||
| 110 | (*(ret.pRefCnt)) += 1; | ||
| 111 | return ret; | ||
| 112 | } | ||
| 113 | |||
| 99 | #endif | 114 | #endif |
diff --git a/src/tests/sptr.cpp b/src/tests/sptr.cpp index bc00f78..252463b 100644 --- a/src/tests/sptr.cpp +++ b/src/tests/sptr.cpp | |||
| @@ -65,11 +65,12 @@ int main() | |||
| 65 | beAnnoying( pt3 ); | 65 | beAnnoying( pt3 ); |
| 66 | 66 | ||
| 67 | { | 67 | { |
| 68 | SPtr<Annoy2> pt4( dynamic_cast<SPtr<Annoy2> >(pt3) ); | 68 | SPtr<Annoy2> pt4( SPtrCast<Annoy2>( pt3 ) ); |
| 69 | printf("Count: %d\n", pt4.count() ); | 69 | printf("Count: %d\n", pt4.count() ); |
| 70 | 70 | ||
| 71 | pt4.go2(); | 71 | pt4->go2(); |
| 72 | } | 72 | } |
| 73 | printf("Count: %d\n", pt.count() ); | ||
| 73 | } | 74 | } |
| 74 | printf("Count: %d\n", pt.count() ); | 75 | printf("Count: %d\n", pt.count() ); |
| 75 | } | 76 | } |
