Pol  Revision:cb584c9
reftypes.cpp
Go to the documentation of this file.
1 
6 #include "reftypes.h"
7 
8 
9 namespace Pol
10 {
11 namespace Core
12 {
13 #if REFTYPE_DEBUG
14 int hits = 0;
15 int uobjectrefs = 0;
16 int characterrefs;
17 int npcrefs;
18 int itemrefs;
19 
20 typedef std::map<int, CharacterRef*> CharacterRefs;
21 CharacterRefs crefs;
22 unsigned int crefs_count;
23 #endif
24 
26 {
27 #if REFTYPE_DEBUG
28  fmt::Writer tmp;
29  for ( CharacterRefs::iterator itr = crefs.begin(); itr != crefs.end(); ++itr )
30  {
31  tmp << "cref " << ( *itr ).first << "=0x" << fmt::hexu( ( *itr ).second->get()->serial )
32  << "\n";
33  }
34  INFO_PRINT << tmp.str();
35 #endif
36 }
37 #if REFTYPE_DEBUG
39 {
40  if ( get() && get()->serial_ext == 0x619d1300 )
41  {
42  ++hits;
43  }
44  ++uobjectrefs;
45 }
46 UObjectRef::UObjectRef( const UObjectRef& rptr ) : ref_ptr<UObject>( rptr )
47 {
48  if ( get() && get()->serial_ext == 0x619d1300 )
49  {
50  ++hits;
51  }
52  ++uobjectrefs;
53 }
54 
55 UObjectRef::~UObjectRef()
56 {
57  --uobjectrefs;
58  if ( get() && get()->serial_ext == 0x619d1300 )
59  {
60  ++hits;
61  }
62 }
63 
65  : ref_ptr<Mobile::Character>( ptr ), cref_instance( 0 )
66 {
67  if ( get() && get()->serial_ext == 0x619d1300 )
68  {
69  ++hits;
70  cref_instance = crefs_count++;
71  crefs[cref_instance] = this;
72  }
73  ++characterrefs;
74 }
76  : ref_ptr<Mobile::Character>( rptr ), cref_instance( 0 )
77 {
78  if ( get() && get()->serial_ext == 0x619d1300 )
79  {
80  ++hits;
81  cref_instance = crefs_count++;
82  crefs[cref_instance] = this;
83  }
84  ++characterrefs;
85 }
86 CharacterRef::~CharacterRef()
87 {
88  --characterrefs;
89  if ( get() && get()->serial_ext == 0x619d1300 )
90  {
91  crefs.erase( cref_instance );
92  --hits;
93  }
94 }
95 
96 CharacterRef& CharacterRef::operator=( const CharacterRef& rptr )
97 {
98  set( rptr.get() );
99 
100  return *this;
101 }
102 void CharacterRef::set( Mobile::Character* chr )
103 {
104  if ( get() && get()->serial_ext == 0x619d1300 )
105  {
106  crefs.erase( cref_instance );
107  --hits;
108  }
109 
111 
112  if ( get() && get()->serial_ext == 0x619d1300 )
113  {
114  ++hits;
115  cref_instance = crefs_count++;
116  crefs[cref_instance] = this;
117  }
118 }
119 void CharacterRef::clear()
120 {
121  if ( get() && get()->serial_ext == 0x619d1300 )
122  {
123  crefs.erase( cref_instance );
124  --hits;
125  }
126 
128 }
129 
130 
132 {
133  if ( get() && get()->serial_ext == 0x619d1300 )
134  {
135  ++hits;
136  }
137  ++npcrefs;
138 }
139 NpcRef::NpcRef( const NpcRef& rptr ) : ref_ptr<Mobile::NPC>( rptr )
140 {
141  if ( get() && get()->serial_ext == 0x619d1300 )
142  {
143  ++hits;
144  }
145  ++npcrefs;
146 }
147 
148 NpcRef::~NpcRef()
149 {
150  --npcrefs;
151  if ( get() && get()->serial_ext == 0x619d1300 )
152  {
153  --hits;
154  }
155 }
156 
157 
159 {
160  if ( get() && get()->serial_ext == 0x619d1300 )
161  {
162  ++hits;
163  }
164  ++itemrefs;
165 }
166 
167 ItemRef::ItemRef( const ItemRef& rptr ) : ref_ptr<Items::Item>( rptr )
168 {
169  if ( get() && get()->serial_ext == 0x619d1300 )
170  {
171  ++hits;
172  }
173  ++itemrefs;
174 }
175 
176 ItemRef::~ItemRef()
177 {
178  --itemrefs;
179  if ( get() && get()->serial_ext == 0x619d1300 )
180  {
181  --hits;
182  }
183 }
184 #endif
185 }
186 }
ref_ptr< UObject > UObjectRef
Definition: reftypes.h:37
void clear()
Definition: refptr.h:283
ref_ptr< Mobile::NPC > NpcRef
Definition: reftypes.h:44
ref_ptr< Mobile::Character > CharacterRef
Definition: reftypes.h:42
ref_ptr< Items::Item > ItemRef
Definition: reftypes.h:43
void set(T *ptr)
Definition: refptr.h:276
#define INFO_PRINT
Definition: logfacility.h:223
void display_reftypes()
Definition: reftypes.cpp:25
Definition: berror.cpp:12