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 #ifndef __system_Object__
00037 #define __system_Object__
00038
00039 #ifndef __system_Reference_Type__
00040 # error Must include a reference implementation before this file.
00041 #endif
00042
00043 #ifndef __platform_Lock_Type__
00044 # error Must include a lock implementation before this file.
00045 #endif
00046
00047 #include <stdnet/system/Abstract>
00048
00049 namespace stdbase {
00050
00056 namespace system {
00057
00058 class String;
00059
00076 class Object : public Abstract
00077 {
00078 protected:
00083 Object( void );
00084
00091 virtual ~Object( void );
00092
00093 public:
00094
00100 class synchronized
00101 {
00102 private:
00103 friend class Object;
00104
00105 platform::Lock * object_lock;
00106
00111 synchronized( platform::Lock & l)
00112 : object_lock( & l )
00113 {};
00114
00115 public:
00132 synchronized( const synchronized & s)
00133 : object_lock( s. object_lock )
00134 { object_lock -> seize(); }
00135
00140 ~synchronized()
00141 { object_lock -> release(); }
00142 };
00143
00144 protected:
00145 friend class ObjectRef;
00146
00147 mutable unsigned count;
00148 mutable platform::Lock lock;
00149
00150
00151 virtual void inc() const;
00152 virtual unsigned dec() const;
00153
00154 public:
00159 synchronized synchronize()
00160 { return synchronized( lock ); }
00161
00162 public:
00168 virtual bool equals( ObjectRef object );
00169
00174 virtual system::reference<String>
00175 toString() const;
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185 };
00186
00187 }
00188
00189
00190
00191
00192 typedef stdbase::system::Object::synchronized synchronized;
00193 }
00194
00195
00196 #endif // __system_Object__
00197