< prev index next >

src/share/vm/oops/oopsHierarchy.hpp

Print this page
rev 10742 : Make fields used in lock-free algorithms volatile


  87   }
  88   void raw_set_obj(const void* p)     { _o = (oopDesc*)p; }
  89 
  90   oop()                               { set_obj(NULL); }
  91   oop(const oop& o)                   { set_obj(o.obj()); }
  92   oop(const volatile oop& o)          { set_obj(o.obj()); }
  93   oop(const void* p)                  { set_obj(p); }
  94   ~oop()                              {
  95     if (CheckUnhandledOops) unregister_oop();
  96   }
  97 
  98   oopDesc* obj()  const volatile      { return _o; }
  99 
 100   // General access
 101   oopDesc*  operator->() const        { return obj(); }
 102   bool operator==(const oop o) const  { return obj() == o.obj(); }
 103   bool operator==(void *p) const      { return obj() == p; }
 104   bool operator!=(const volatile oop o) const  { return obj() != o.obj(); }
 105   bool operator!=(void *p) const      { return obj() != p; }
 106 






 107   bool operator<(oop o) const         { return obj() < o.obj(); }
 108   bool operator>(oop o) const         { return obj() > o.obj(); }
 109   bool operator<=(oop o) const        { return obj() <= o.obj(); }
 110   bool operator>=(oop o) const        { return obj() >= o.obj(); }
 111   bool operator!() const              { return !obj(); }
 112 
 113   // Assignment
 114   oop& operator=(const oop& o)                            { _o = o.obj(); return *this; }


 115   volatile oop& operator=(const oop& o) volatile          { _o = o.obj(); return *this; }
 116   volatile oop& operator=(const volatile oop& o) volatile { _o = o.obj(); return *this; }
 117 
 118   // Explict user conversions
 119   operator void* () const             { return (void *)obj(); }
 120 #ifndef SOLARIS
 121   operator void* () const volatile    { return (void *)obj(); }
 122 #endif
 123   operator HeapWord* () const         { return (HeapWord*)obj(); }
 124   operator oopDesc* () const volatile { return obj(); }
 125   operator intptr_t* () const         { return (intptr_t*)obj(); }
 126   operator PromotedObject* () const   { return (PromotedObject*)obj(); }
 127   operator markOop () const volatile  { return markOop(obj()); }
 128   operator address   () const         { return (address)obj(); }
 129 
 130   // from javaCalls.cpp
 131   operator jobject () const           { return (jobject)obj(); }
 132   // from javaClasses.cpp
 133   operator JavaThread* () const       { return (JavaThread*)obj(); }
 134 




  87   }
  88   void raw_set_obj(const void* p)     { _o = (oopDesc*)p; }
  89 
  90   oop()                               { set_obj(NULL); }
  91   oop(const oop& o)                   { set_obj(o.obj()); }
  92   oop(const volatile oop& o)          { set_obj(o.obj()); }
  93   oop(const void* p)                  { set_obj(p); }
  94   ~oop()                              {
  95     if (CheckUnhandledOops) unregister_oop();
  96   }
  97 
  98   oopDesc* obj()  const volatile      { return _o; }
  99 
 100   // General access
 101   oopDesc*  operator->() const        { return obj(); }
 102   bool operator==(const oop o) const  { return obj() == o.obj(); }
 103   bool operator==(void *p) const      { return obj() == p; }
 104   bool operator!=(const volatile oop o) const  { return obj() != o.obj(); }
 105   bool operator!=(void *p) const      { return obj() != p; }
 106 
 107   oopDesc*  operator->() const volatile       { return obj(); }
 108   bool operator==(const oop o) const volatile { return obj() == o.obj(); }
 109   bool operator==(void *p) const volatile     { return obj() == p; }
 110   bool operator!=(const volatile oop o) const volatile { return obj() != o.obj(); }
 111   bool operator!=(void *p) const volatile     { return obj() != p; }
 112 
 113   bool operator<(oop o) const         { return obj() < o.obj(); }
 114   bool operator>(oop o) const         { return obj() > o.obj(); }
 115   bool operator<=(oop o) const        { return obj() <= o.obj(); }
 116   bool operator>=(oop o) const        { return obj() >= o.obj(); }
 117   bool operator!() const              { return !obj(); }
 118 
 119   // Assignment
 120   oop& operator=(const oop& o)                            { _o = o.obj(); return *this; }
 121   oop& operator=(void *o)                                 { _o = (oopDesc*)o; return *this; }
 122   oop& operator=(const volatile oop& o)                   { _o = o.obj(); return *this; }
 123   volatile oop& operator=(const oop& o) volatile          { _o = o.obj(); return *this; }
 124   volatile oop& operator=(const volatile oop& o) volatile { _o = o.obj(); return *this; }
 125 
 126   // Explict user conversions
 127   operator void* () const             { return (void *)obj(); }
 128 #ifndef SOLARIS
 129   operator void* () const volatile    { return (void *)obj(); }
 130 #endif
 131   operator HeapWord* () const         { return (HeapWord*)obj(); }
 132   operator oopDesc* () const volatile { return obj(); }
 133   operator intptr_t* () const         { return (intptr_t*)obj(); }
 134   operator PromotedObject* () const   { return (PromotedObject*)obj(); }
 135   operator markOop () const volatile  { return markOop(obj()); }
 136   operator address   () const         { return (address)obj(); }
 137 
 138   // from javaCalls.cpp
 139   operator jobject () const           { return (jobject)obj(); }
 140   // from javaClasses.cpp
 141   operator JavaThread* () const       { return (JavaThread*)obj(); }
 142 


< prev index next >