aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/sharedcore.cpp67
-rw-r--r--src/sharedcore.h37
2 files changed, 2 insertions, 102 deletions
diff --git a/src/sharedcore.cpp b/src/sharedcore.cpp
index 24d8972..6333335 100644
--- a/src/sharedcore.cpp
+++ b/src/sharedcore.cpp
@@ -7,70 +7,3 @@
7 7
8#include "bu/sharedcore.h" 8#include "bu/sharedcore.h"
9 9
10void hardlog(const char *fmt, ...)
11{
12 va_list ap;
13 va_start( ap, fmt );
14
15 FILE *fh = fopen("sharedcore.log", "ab");
16 vfprintf( fh, fmt, ap );
17 va_end( ap );
18 fclose( fh );
19}
20
21int iDepth = 0;
22
23void fncin( void *base, const char *fn, void *core, int *iRefCount, int params, ... )
24{
25 va_list ap;
26 va_start( ap, params );
27
28 FILE *fh = fopen("sharedcore.log", "ab");
29 fprintf( fh, "%08X: ", base );
30 for( int j = 0; j < iDepth; j++ )
31 fprintf( fh, " " );
32 fprintf( fh, "%s(", fn );
33 for( int j = 0; j < params; j++ )
34 if( j == 0 )
35 fprintf( fh, " %08X", va_arg( ap, void * ) );
36 else
37 fprintf( fh, ", %08X", va_arg( ap, void * ) );
38 if( params > 0 )
39 fprintf( fh, " )");
40 else
41 fprintf( fh, ")");
42
43 fprintf( fh, " [%08X / %08X] (%d)\n", core, iRefCount, rc );
44 va_end( ap );
45 fclose( fh );
46
47 iDepth++;
48}
49
50void fncout( void *base, const char *fn, void *core, int *iRefCount, int params, ... )
51{
52 va_list ap;
53 va_start( ap, params );
54
55 iDepth--;
56
57 FILE *fh = fopen("sharedcore.log", "ab");
58 fprintf( fh, "%08X: ", base );
59 for( int j = 0; j < iDepth; j++ )
60 fprintf( fh, " " );
61 fprintf( fh, "%s(", fn );
62 for( int j = 0; j < params; j++ )
63 if( j == 0 )
64 fprintf( fh, " %08X", va_arg( ap, void * ) );
65 else
66 fprintf( fh, ", %08X", va_arg( ap, void * ) );
67 if( params > 0 )
68 fprintf( fh, " )");
69 else
70 fprintf( fh, ")");
71
72 fprintf( fh, " [%08X / %08X] (%d)\n", core, iRefCount, rc );
73 va_end( ap );
74 fclose( fh );
75}
76
diff --git a/src/sharedcore.h b/src/sharedcore.h
index 7960fa2..046e973 100644
--- a/src/sharedcore.h
+++ b/src/sharedcore.h
@@ -13,17 +13,6 @@
13#include <stdio.h> 13#include <stdio.h>
14#include <stdarg.h> 14#include <stdarg.h>
15 15
16void hardlog(const char *fmt, ...);
17
18void fncin( void *base, const char *fn, void *core, int *refcnt, int params, ... );
19void fncout( void *base, const char *fn, void *core, int *refcnt, int params, ... );
20
21
22#define fin( count, ... ) fncin( (void *)this, __FUNCTION__, core, iRefCount, count, ##__VA_ARGS__ )
23#define fout( count, ... ) fncout( (void *)this, __FUNCTION__, core, iRefCount, count, ##__VA_ARGS__ )
24
25#define rc ((iRefCount==NULL)?(-1):(*iRefCount))
26
27namespace Bu 16namespace Bu
28{ 17{
29 template<typename Core> 18 template<typename Core>
@@ -35,33 +24,25 @@ namespace Bu
35 core( NULL ), 24 core( NULL ),
36 iRefCount( NULL ) 25 iRefCount( NULL )
37 { 26 {
38 fin( 0 );
39 core = _allocateCore(); 27 core = _allocateCore();
40 iRefCount = new int(1); 28 iRefCount = new int(1);
41 fout( 0 );
42 } 29 }
43 30
44 SharedCore( const _SharedType &rSrc ) : 31 SharedCore( const _SharedType &rSrc ) :
45 core( NULL ), 32 core( NULL ),
46 iRefCount( NULL ) 33 iRefCount( NULL )
47 { 34 {
48 fin( 1, &rSrc );
49 _softCopy( rSrc ); 35 _softCopy( rSrc );
50 fout( 1, &rSrc );
51 } 36 }
52 37
53 virtual ~SharedCore() 38 virtual ~SharedCore()
54 { 39 {
55 fin( 0 );
56 _deref(); 40 _deref();
57 fout( 0 );
58 } 41 }
59 42
60 SharedCore &operator=( const SharedCore &rhs ) 43 SharedCore &operator=( const SharedCore &rhs )
61 { 44 {
62 fin( 1, &rhs );
63 _softCopy( rhs ); 45 _softCopy( rhs );
64 fout( 1, &rhs );
65 return *this; 46 return *this;
66 } 47 }
67 48
@@ -74,43 +55,34 @@ namespace Bu
74 Core *core; 55 Core *core;
75 void _hardCopy() 56 void _hardCopy()
76 { 57 {
77 fin( 0 );
78 if( !core || !iRefCount ) 58 if( !core || !iRefCount )
79 { fout( 0 ); return; } 59 return;
80 if( (*iRefCount) == 1 ) 60 if( (*iRefCount) == 1 )
81 { fout( 0 ); return; } 61 return;
82 Core *copy = _copyCore( core ); 62 Core *copy = _copyCore( core );
83 _deref(); 63 _deref();
84 core = copy; 64 core = copy;
85 iRefCount = new int( 1 ); 65 iRefCount = new int( 1 );
86 fout( 0 );
87 } 66 }
88 67
89 virtual Core *_allocateCore() 68 virtual Core *_allocateCore()
90 { 69 {
91 fin( 0 );
92 fout( 0 );
93 return new Core(); 70 return new Core();
94 } 71 }
95 72
96 virtual Core *_copyCore( Core *pSrc ) 73 virtual Core *_copyCore( Core *pSrc )
97 { 74 {
98 fin( 0 );
99 fout( 0 );
100 return new Core( *pSrc ); 75 return new Core( *pSrc );
101 } 76 }
102 77
103 virtual void _deallocateCore( Core *pSrc ) 78 virtual void _deallocateCore( Core *pSrc )
104 { 79 {
105 fin( 0 );
106 fout( 0 );
107 delete pSrc; 80 delete pSrc;
108 } 81 }
109 82
110 private: 83 private:
111 void _deref() 84 void _deref()
112 { 85 {
113 fin( 0 );
114 if( (--(*iRefCount)) == 0 ) 86 if( (--(*iRefCount)) == 0 )
115 { 87 {
116 _deallocateCore( core ); 88 _deallocateCore( core );
@@ -118,26 +90,21 @@ namespace Bu
118 } 90 }
119 core = NULL; 91 core = NULL;
120 iRefCount = NULL; 92 iRefCount = NULL;
121 fout( 0 );
122 } 93 }
123 94
124 void _incRefCount() 95 void _incRefCount()
125 { 96 {
126 fin( 0 );
127 if( iRefCount && core ) 97 if( iRefCount && core )
128 ++(*iRefCount); 98 ++(*iRefCount);
129 fout( 0 );
130 } 99 }
131 100
132 void _softCopy( const _SharedType &rSrc ) 101 void _softCopy( const _SharedType &rSrc )
133 { 102 {
134 fin( 1, &rSrc );
135 if( core ) 103 if( core )
136 _deref(); 104 _deref();
137 core = rSrc.core; 105 core = rSrc.core;
138 iRefCount = rSrc.iRefCount; 106 iRefCount = rSrc.iRefCount;
139 _incRefCount(); 107 _incRefCount();
140 fout( 1, &rSrc );
141 } 108 }
142 109
143 int *iRefCount; 110 int *iRefCount;