1 #include "pointer.h" |
1 #include "pointer.h" |
2 |
2 |
3 vector<objPointer*> g_pObjectPointers; |
3 vector<objPointer*> g_pObjectPointers; |
4 |
4 |
5 // #define POINTER_DEBUG |
|
6 |
|
7 #ifdef POINTER_DEBUG |
|
8 #include <stdio.h> |
|
9 #define DEBUGMESSAGE printf |
|
10 #else |
|
11 #define DEBUGMESSAGE |
|
12 #endif |
|
13 |
|
14 void objPointer::replacePointers (LDObject* old, LDObject* repl) { |
5 void objPointer::replacePointers (LDObject* old, LDObject* repl) { |
15 DEBUGMESSAGE ("replacing %p with %p\n", old, repl); |
|
16 DEBUGMESSAGE ("%u objects in pointers\n", g_pObjectPointers.size()); |
|
17 |
|
18 for (ulong i = 0; i < g_pObjectPointers.size(); ++i) { |
6 for (ulong i = 0; i < g_pObjectPointers.size(); ++i) { |
19 objPointer* ptrptr = g_pObjectPointers[i]; |
7 objPointer* ptrptr = g_pObjectPointers[i]; |
20 DEBUGMESSAGE ("%lu. (%p <-> %p)\n", i, (*ptrptr).ptr, old); |
8 |
21 if ((*ptrptr).ptr == old) { |
9 if ((*ptrptr).ptr == old) |
22 DEBUGMESSAGE ("\treplacing... %p -> %p\n", (*ptrptr).ptr, repl); |
|
23 (*ptrptr).ptr = repl; |
10 (*ptrptr).ptr = repl; |
24 |
|
25 DEBUGMESSAGE ("%lu. (%p <-> %p)\n", i, (*ptrptr).ptr, old); |
|
26 } |
|
27 } |
11 } |
28 } |
12 } |
29 |
13 |
30 objPointer::~objPointer () { |
14 objPointer::~objPointer () { |
31 |
15 |
38 objPointer::objPointer (LDObject* _ptr) { |
22 objPointer::objPointer (LDObject* _ptr) { |
39 ptr = _ptr; |
23 ptr = _ptr; |
40 } |
24 } |
41 |
25 |
42 void objPointer::serialize () { |
26 void objPointer::serialize () { |
43 DEBUGMESSAGE ("Adding %p to pointers (ptr = %p)... ", this, ptr); |
|
44 g_pObjectPointers.push_back (this); |
27 g_pObjectPointers.push_back (this); |
45 DEBUGMESSAGE ("%u objects in pointers\n", g_pObjectPointers.size()); |
|
46 } |
28 } |
47 |
29 |
48 void objPointer::unSerialize () { |
30 void objPointer::unSerialize () { |
49 DEBUGMESSAGE ("Removing %p from pointers... ", this); |
|
50 for (ulong i = 0; i < g_pObjectPointers.size(); ++i) |
31 for (ulong i = 0; i < g_pObjectPointers.size(); ++i) |
51 if (g_pObjectPointers[i] == this) |
32 if (g_pObjectPointers[i] == this) |
52 g_pObjectPointers.erase (g_pObjectPointers.begin() + i); |
33 g_pObjectPointers.erase (g_pObjectPointers.begin() + i); |
53 DEBUGMESSAGE ("%u objects in pointers\n", g_pObjectPointers.size()); |
|
54 } |
34 } |
|
35 |
|
36 void objPointer::deleteObj (LDObject* obj) { |
|
37 replacePointers (obj, nullptr); |
|
38 delete obj; |
|
39 } |