00001
00002
00003
00004
00005 #ifndef xmog_base_inc
00006 #define xmog_base_inc
00007
00008
00009 #include "xmog.h"
00010 #include "xmog_atomic_pointer.h"
00011
00012
00013 class xmog_localenv;
00014 class xmog_java_array;
00015 class xmog_java_class;
00016 class xmog_java_dynamic;
00017 class xmog_java_ref;
00018
00019
00028 struct XMOG_DECLSPEC xmog_base
00029 {
00035 xmog_base();
00036
00049 xmog_base( xmog_java_array * _ref, jint _index );
00050
00066 xmog_base( xmog_java_ref * _ref, xmog_java_dynamic * _dynamic, xmog_flags _flags );
00067
00083 xmog_base( xmog_java_class * _clazz, xmog_java_dynamic * _dynamic, xmog_flags _flags );
00084
00103 XMOG_EXPLICIT xmog_base( xmog_base * _delegate, bool _owns_delegate = true );
00104
00114 xmog_base( jobject _local, xmog_flags _flags );
00115
00119 virtual ~xmog_base();
00120
00131 virtual void copy_jobject_( xmog_base * _rhs, xmog_localenv * env = NULL );
00132
00141 virtual jobject get_owning_jobject_( xmog_localenv * env = NULL );
00142
00151 virtual jobject get_jobject_( xmog_localenv * env = NULL ) const;
00152
00161 virtual jobject get_released_local_jobject_( xmog_localenv * env = NULL ) const;
00162
00166 virtual bool is_null_( xmog_localenv * env = NULL ) const;
00167
00171 virtual bool is_same_( const xmog_base & _rhs, xmog_localenv * env = NULL ) const;
00172
00181 virtual jobject duplicate_jobject_( xmog_localenv * env = NULL ) const;
00182
00192 virtual void set_jobject_( xmog_base * _rhs, xmog_localenv * env = NULL );
00193
00204 virtual void transfer_jobject_( xmog_base * _rhs, xmog_localenv * env = NULL );
00205
00212 virtual xmog_base * xmog_to_( xmog_flags flags, xmog_localenv * env = NULL );
00213
00227 virtual xmog_base * xmog_fill_with_standalone_for_( xmog_base * _rhs, xmog_localenv * env = NULL );
00228
00244 virtual xmog_java_class * xmog_get_java_peer( xmog_localenv * env = NULL );
00245
00270 virtual int xmog_create_java_peer( xmog_java_class * clazz, xmog_localenv * env = NULL, xmog_flags flags = xmog_base::GLOBAL );
00271
00288 virtual int xmog_to_java_peer( xmog_localenv * env = NULL );
00289
00302 virtual void xmog_lazy_write( xmog_localenv * env = NULL );
00303
00309 virtual void xmog_invalidate( xmog_localenv * env = NULL );
00310
00317 void release_standalone( xmog_localenv * env = NULL );
00318
00322 void release_delegate();
00323
00336 XMOG_JOBJECT_HOLDER owner_;
00337
00338
00352 union
00353 {
00358 xmog_java_dynamic * dynamic_;
00359
00363 jint index_;
00364 };
00365
00369 xmog_flags flags_;
00370
00382 enum flags
00383 {
00384 STAND_ALONE = 1,
00385 ARRAY_ELEMENT = 2,
00386 DYNAMIC = 4,
00387 DELEGATE = 8,
00388
00389 LOCAL = 16,
00390 WEAK_GLOBAL = 32,
00391 GLOBAL = 64,
00392 REMOTE = 128,
00393
00394 CACHING = 256,
00395 CACHE_INVALID = 512,
00396 CACHE_DIRTY = 1024,
00397 CACHE_LAZY_WRITE = 2048,
00398
00399 OWNS_DELEGATE = 4096,
00400
00401 STRING_DIRTY = 8192,
00402 STRING_PTR = 16384,
00403 STRING_WPTR = 32768,
00404
00405 INDIRECT = 65536,
00406 NONVIRT = 131072,
00407
00408 SUPPRESS_LOGGING = 262144,
00409
00410 CATEGORY = 15,
00411 TYPE = 240,
00412 CACHE = 3840
00413 };
00414 };
00415
00416
00417 #if !defined (XMOG_LACKS_INLINE_FUNCTIONS)
00418 # include "xmog_base.inl"
00419 #else
00420 # include "xmog_java_ref.h"
00421 # include "xmog_java_array.h"
00422 # include "xmog_java_class.h"
00423 # include "xmog_java_dynamic.h"
00424 # include "xmog_exception.h"
00425 # include "xmog_error_handler.h"
00426 # include "xmog_jvm_loader.h"
00427 # include "xmog_localenv.h"
00428 #endif
00429
00430
00431 #endif