< prev index next >
src/hotspot/share/oops/oopsHierarchy.hpp
optimized_oop
void unregister_oop();
#endif
// friend class markOop;
public:
! void set_obj(const void* p) {
! raw_set_obj(p);
! CHECK_UNHANDLED_OOPS_ONLY(if (CheckUnhandledOops) register_oop();)
! }
! void raw_set_obj(const void* p) { _o = (oopDesc*)p; }
!
! oop() { set_obj(NULL); }
! oop(const oop& o) { set_obj(o.obj()); }
! oop(const volatile oop& o) { set_obj(o.obj()); }
! oop(const void* p) { set_obj(p); }
! ~oop() {
CHECK_UNHANDLED_OOPS_ONLY(if (CheckUnhandledOops) unregister_oop();)
}
! oopDesc* obj() const volatile { return _o; }
// General access
! oopDesc* operator->() const { return obj(); }
! bool operator==(const oop o) const { return obj() == o.obj(); }
! bool operator==(void *p) const { return obj() == p; }
! bool operator!=(const volatile oop o) const { return obj() != o.obj(); }
! bool operator!=(void *p) const { return obj() != p; }
// Assignment
! oop& operator=(const oop& o) { _o = o.obj(); return *this; }
! volatile oop& operator=(const oop& o) volatile { _o = o.obj(); return *this; }
! volatile oop& operator=(const volatile oop& o) volatile { _o = o.obj(); return *this; }
// Explict user conversions
! operator void* () const { return (void *)obj(); }
! #ifndef SOLARIS
! operator void* () const volatile { return (void *)obj(); }
! #endif
! operator HeapWord* () const { return (HeapWord*)obj(); }
! operator oopDesc* () const volatile { return obj(); }
! operator intptr_t* () const { return (intptr_t*)obj(); }
! operator PromotedObject* () const { return (PromotedObject*)obj(); }
! operator markOop () const volatile { return markOop(obj()); }
! operator address () const { return (address)obj(); }
// from javaCalls.cpp
! operator jobject () const { return (jobject)obj(); }
// from parNewGeneration and other things that want to get to the end of
// an oop for stuff (like ObjArrayKlass.cpp)
! operator oop* () const { return (oop *)obj(); }
};
template<>
struct PrimitiveConversions::Translate<oop> : public TrueType {
typedef oop Value;
void unregister_oop();
#endif
// friend class markOop;
public:
! oop() : _o(NULL) { CHECK_UNHANDLED_OOPS_ONLY(if (CheckUnhandledOops) register_oop();) }
! oop(const oop& o) : _o(o._o) { CHECK_UNHANDLED_OOPS_ONLY(if (CheckUnhandledOops) register_oop();) }
! oop(const volatile oop& o) : _o(o._o) { CHECK_UNHANDLED_OOPS_ONLY(if (CheckUnhandledOops) register_oop();) }
! oop(const void* p) : _o((oopDesc*)p) { CHECK_UNHANDLED_OOPS_ONLY(if (CheckUnhandledOops) register_oop();) }
! ~oop() {
CHECK_UNHANDLED_OOPS_ONLY(if (CheckUnhandledOops) unregister_oop();)
}
! oopDesc* obj() const { return _o; }
// General access
! oopDesc* operator->() const { return _o; }
! bool operator==(const oop o) const { return _o == o._o; }
! bool operator==(void *p) const { return _o == p; }
! bool operator!=(const oop o) const { return _o != o._o; }
! bool operator!=(void *p) const { return _o != p; }
// Assignment
! oop& operator=(const oop& o) { _o = o._o; return *this; }
! volatile oop& operator=(const oop& o) volatile { _o = o._o; return *this; }
! volatile oop& operator=(const volatile oop& o) volatile { _o = o._o; return *this; }
// Explict user conversions
! operator void* () const { return (void *)_o; }
! operator HeapWord* () const { return (HeapWord*)_o; }
! operator oopDesc* () const { return _o; }
! operator intptr_t* () const { return (intptr_t*)_o; }
! operator PromotedObject* () const { return (PromotedObject*)_o; }
! operator markOop () const { return markOop(_o); }
! operator address () const { return (address)_o; }
// from javaCalls.cpp
! operator jobject () const { return (jobject)_o; }
// from parNewGeneration and other things that want to get to the end of
// an oop for stuff (like ObjArrayKlass.cpp)
! operator oop* () const { return (oop *)_o; }
};
template<>
struct PrimitiveConversions::Translate<oop> : public TrueType {
typedef oop Value;
< prev index next >