00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #include <stdnet/config.h>
00037 #include <stdnet/system/RefCount>
00038 #include <stdnet/system/Object>
00039
00040
00041
00042 const stdbase::system::ObjectRef null =
00043 stdbase::system::ObjectRef(
00044 static_cast<stdbase::system::Object*>( NULL )
00045 );
00046
00047 namespace stdbase {
00048 namespace system {
00049
00050 ObjectRef:: ObjectRef( Abstract * obj)
00051 : pointer( obj )
00052 {
00053 if ( pointer != 0 )
00054 {
00055 pointer-> inc();
00056 }
00057 }
00058
00059 ObjectRef:: ObjectRef( Object * obj)
00060 : pointer( dynamic_cast< Abstract *>(obj) )
00061 {
00062 if ( pointer != 0 )
00063 {
00064 pointer-> inc();
00065 }
00066 }
00067
00068 ObjectRef:: ObjectRef( const ObjectRef & r)
00069 : pointer( r.pointer )
00070 {
00071 if ( pointer != 0 )
00072 {
00073 pointer-> inc();
00074 }
00075 }
00076
00077 ObjectRef:: ~ObjectRef( void )
00078 {
00079 if ( pointer != 0 &&
00080 pointer-> dec() == 0 )
00081 {
00082 delete pointer;
00083 }
00084 }
00085
00086 const ObjectRef &
00087 ObjectRef:: operator =( const ObjectRef & r) const
00088 {
00089 if ( pointer != 0 && pointer-> dec() == 0)
00090 {
00091 delete pointer;
00092 }
00093 pointer = r.pointer;
00094 if ( pointer != 0 )
00095 {
00096 pointer-> inc();
00097 }
00098 return *this;
00099 }
00100
00101 bool
00102 ObjectRef:: operator == ( const ObjectRef & r) const
00103 {
00104 return pointer == r.pointer;
00105 }
00106
00107 bool
00108 ObjectRef:: operator != ( const ObjectRef & r) const
00109 {
00110 return pointer != r.pointer;
00111 }
00112
00113 Object * ObjectRef::
00114 get()
00115 { return dynamic_cast< Object *>(pointer); }
00116
00117 const Object * ObjectRef::
00118 get() const
00119 { return dynamic_cast< const Object *>(pointer); }
00120
00121 }
00122 }
00123