88
99#pragma once
1010
11- #define TEMPLATE_SPECIALIZATION template <typename object_type, typename base_type>
12- #define _intrusive_ptr intrusive_ptr<object_type,base_type>
13-
14- TEMPLATE_SPECIALIZATION
15- IC _intrusive_ptr ::intrusive_ptr ()
11+ template <typename object_type, typename base_type>
12+ IC intrusive_ptr<object_type,base_type>::intrusive_ptr()
1613{
1714 m_object = 0 ;
1815}
1916
20- TEMPLATE_SPECIALIZATION
21- IC _intrusive_ptr ::intrusive_ptr (object_type * rhs )
17+ template < typename object_type, typename base_type>
18+ IC intrusive_ptr<object_type,base_type> ::intrusive_ptr(object_type* rhs)
2219{
2320 m_object = 0 ;
2421 set (rhs);
2522}
2623
27- TEMPLATE_SPECIALIZATION
28- IC _intrusive_ptr ::intrusive_ptr (self_type const & rhs )
24+ template < typename object_type, typename base_type>
25+ IC intrusive_ptr<object_type,base_type> ::intrusive_ptr(self_type const & rhs)
2926{
3027 m_object = 0 ;
3128 set (rhs);
3229}
3330
34- TEMPLATE_SPECIALIZATION
35- IC _intrusive_ptr ::~intrusive_ptr ()
31+ template < typename object_type, typename base_type>
32+ IC intrusive_ptr<object_type,base_type> ::~intrusive_ptr ()
3633{
3734 STATIC_CHECK (result, Class_MUST_Be_Derived_From_The_Base);
3835 dec ();
3936}
4037
41- TEMPLATE_SPECIALIZATION
42- IC void _intrusive_ptr ::dec ()
38+ template < typename object_type, typename base_type>
39+ IC void intrusive_ptr<object_type,base_type> ::dec()
4340{
4441 if (!m_object)
4542 return ;
@@ -49,56 +46,56 @@ IC void _intrusive_ptr::dec()
4946 m_object->base_type ::_release (m_object);
5047}
5148
52- TEMPLATE_SPECIALIZATION
53- IC typename _intrusive_ptr ::self_type & _intrusive_ptr ::operator = (object_type * rhs )
49+ template < typename object_type, typename base_type>
50+ IC typename intrusive_ptr<object_type,base_type> ::self_type& intrusive_ptr<object_type,base_type> ::operator = (object_type* rhs)
5451{
5552 set (rhs);
5653 return ((self_type&)*this );
5754}
5855
59- TEMPLATE_SPECIALIZATION
60- IC typename _intrusive_ptr ::self_type & _intrusive_ptr ::operator = (self_type const & rhs )
56+ template < typename object_type, typename base_type>
57+ IC typename intrusive_ptr<object_type,base_type> ::self_type& intrusive_ptr<object_type,base_type> ::operator = (self_type const & rhs)
6158{
6259 set (rhs);
6360 return ((self_type&)*this );
6461}
6562
66- TEMPLATE_SPECIALIZATION
67- IC typename _intrusive_ptr :: object_type & _intrusive_ptr ::operator * () const
63+ template < typename object_type, typename base_type>
64+ IC object_type& intrusive_ptr<object_type,base_type> ::operator * () const
6865{
6966 VERIFY (m_object);
7067 return (*m_object);
7168}
7269
73- TEMPLATE_SPECIALIZATION
74- IC typename _intrusive_ptr :: object_type * _intrusive_ptr ::operator -> () const
70+ template < typename object_type, typename base_type>
71+ IC object_type* intrusive_ptr<object_type,base_type> ::operator ->() const
7572{
7673 VERIFY (m_object);
7774 return (m_object);
7875}
7976
80- TEMPLATE_SPECIALIZATION
81- IC bool _intrusive_ptr ::operator ! () const
77+ template < typename object_type, typename base_type>
78+ IC bool intrusive_ptr<object_type,base_type> ::operator ! () const
8279{
8380 return (!m_object);
8481}
8582
86- TEMPLATE_SPECIALIZATION
87- IC void _intrusive_ptr ::swap (self_type & rhs )
83+ template < typename object_type, typename base_type>
84+ IC void intrusive_ptr<object_type,base_type> ::swap(self_type& rhs)
8885{
8986 object_type* tmp = m_object;
9087 m_object = rhs.m_object ;
9188 rhs.m_object = tmp;
9289}
9390
94- TEMPLATE_SPECIALIZATION
95- IC bool _intrusive_ptr ::equal (const self_type & rhs ) const
91+ template < typename object_type, typename base_type>
92+ IC bool intrusive_ptr<object_type,base_type> ::equal(const self_type& rhs) const
9693{
9794 return (m_object == rhs.m_object );
9895}
9996
100- TEMPLATE_SPECIALIZATION
101- IC void _intrusive_ptr ::set (object_type * rhs )
97+ template < typename object_type, typename base_type>
98+ IC void intrusive_ptr<object_type,base_type> ::set(object_type* rhs)
10299{
103100 if (m_object == rhs)
104101 return ;
@@ -109,8 +106,8 @@ IC void _intrusive_ptr::set(object_type* rhs)
109106 ++m_object->m_ref_count ;
110107}
111108
112- TEMPLATE_SPECIALIZATION
113- IC void _intrusive_ptr ::set (self_type const & rhs )
109+ template < typename object_type, typename base_type>
110+ IC void intrusive_ptr<object_type,base_type> ::set(self_type const & rhs)
114111{
115112 if (m_object == rhs.m_object )
116113 return ;
@@ -121,41 +118,38 @@ IC void _intrusive_ptr::set(self_type const& rhs)
121118 ++m_object->m_ref_count ;
122119}
123120
124- TEMPLATE_SPECIALIZATION
125- IC const typename _intrusive_ptr :: object_type * _intrusive_ptr ::get () const
121+ template < typename object_type, typename base_type>
122+ IC const object_type* intrusive_ptr<object_type,base_type> ::get() const
126123{
127124 return (m_object);
128125}
129126
130- TEMPLATE_SPECIALIZATION
131- IC bool operator == (_intrusive_ptr const & a , _intrusive_ptr const & b )
127+ template < typename object_type, typename base_type>
128+ IC bool operator == (intrusive_ptr<object_type,base_type> const & a, intrusive_ptr<object_type,base_type> const & b)
132129{
133130 return (a.get () == b.get ());
134131}
135132
136- TEMPLATE_SPECIALIZATION
137- IC bool operator != (_intrusive_ptr const & a , _intrusive_ptr const & b )
133+ template < typename object_type, typename base_type>
134+ IC bool operator != (intrusive_ptr<object_type,base_type> const & a, intrusive_ptr<object_type,base_type> const & b)
138135{
139136 return (a.get () != b.get ());
140137}
141138
142- TEMPLATE_SPECIALIZATION
143- IC bool operator < (_intrusive_ptr const & a , _intrusive_ptr const & b )
139+ template < typename object_type, typename base_type>
140+ IC bool operator < (intrusive_ptr<object_type,base_type> const & a, intrusive_ptr<object_type,base_type> const & b)
144141{
145142 return (a.get () < b.get ());
146143}
147144
148- TEMPLATE_SPECIALIZATION
149- IC bool operator > (_intrusive_ptr const & a , _intrusive_ptr const & b )
145+ template < typename object_type, typename base_type>
146+ IC bool operator > (intrusive_ptr<object_type,base_type> const & a, intrusive_ptr<object_type,base_type> const & b)
150147{
151148 return (a.get () > b.get ());
152149}
153150
154- TEMPLATE_SPECIALIZATION
155- IC void swap (_intrusive_ptr & lhs , _intrusive_ptr & rhs )
151+ template < typename object_type, typename base_type>
152+ IC void swap (intrusive_ptr<object_type,base_type> & lhs, intrusive_ptr<object_type,base_type> & rhs)
156153{
157154 lhs.swap (rhs);
158155}
159-
160- #undef TEMPLATE_SPECIALIZATION
161- #undef _intrusive_ptr
0 commit comments