118 void do_oop_nv(narrowOop* p) { _wrapped_closure->do_oop(p); } 119 120 void do_oop(oop* p) { assert(false, "Only the _nv versions should be used"); 121 _wrapped_closure->do_oop(p); } 122 void do_oop(narrowOop* p) { assert(false, "Only the _nv versions should be used"); 123 _wrapped_closure->do_oop(p);} 124 }; 125 126 class KlassClosure : public Closure { 127 public: 128 virtual void do_klass(Klass* k) = 0; 129 }; 130 131 class KlassToOopClosure : public KlassClosure { 132 OopClosure* _oop_closure; 133 public: 134 KlassToOopClosure(OopClosure* oop_closure) : _oop_closure(oop_closure) {} 135 virtual void do_klass(Klass* k); 136 }; 137 138 // ObjectClosure is used for iterating through an object space 139 140 class ObjectClosure : public Closure { 141 public: 142 // Called for each object. 143 virtual void do_object(oop obj) = 0; 144 }; 145 146 147 class BoolObjectClosure : public ObjectClosure { 148 public: 149 virtual bool do_object_b(oop obj) = 0; 150 }; 151 152 // Applies an oop closure to all ref fields in objects iterated over in an 153 // object iteration. 154 class ObjectToOopClosure: public ObjectClosure { 155 ExtendedOopClosure* _cl; 156 public: 157 void do_object(oop obj); | 118 void do_oop_nv(narrowOop* p) { _wrapped_closure->do_oop(p); } 119 120 void do_oop(oop* p) { assert(false, "Only the _nv versions should be used"); 121 _wrapped_closure->do_oop(p); } 122 void do_oop(narrowOop* p) { assert(false, "Only the _nv versions should be used"); 123 _wrapped_closure->do_oop(p);} 124 }; 125 126 class KlassClosure : public Closure { 127 public: 128 virtual void do_klass(Klass* k) = 0; 129 }; 130 131 class KlassToOopClosure : public KlassClosure { 132 OopClosure* _oop_closure; 133 public: 134 KlassToOopClosure(OopClosure* oop_closure) : _oop_closure(oop_closure) {} 135 virtual void do_klass(Klass* k); 136 }; 137 138 class CLDToOopClosure { 139 OopClosure* _oop_closure; 140 KlassToOopClosure _default_klass_closure; 141 KlassClosure* _klass_closure; 142 bool _must_claim_cld; 143 144 public: 145 CLDToOopClosure(OopClosure* oop_closure, bool must_claim_cld = true) : 146 _oop_closure(oop_closure), 147 _default_klass_closure(oop_closure), 148 _klass_closure(&_default_klass_closure), 149 _must_claim_cld(must_claim_cld) {} 150 CLDToOopClosure(OopClosure* oop_closure, KlassClosure* klass_closure, bool must_claim_cld = true) : 151 _oop_closure(oop_closure), 152 _default_klass_closure(NULL), // Ignored 153 _klass_closure(klass_closure), 154 _must_claim_cld(must_claim_cld) {} 155 156 void do_cld(ClassLoaderData* cld); 157 }; 158 159 // ObjectClosure is used for iterating through an object space 160 161 class ObjectClosure : public Closure { 162 public: 163 // Called for each object. 164 virtual void do_object(oop obj) = 0; 165 }; 166 167 168 class BoolObjectClosure : public ObjectClosure { 169 public: 170 virtual bool do_object_b(oop obj) = 0; 171 }; 172 173 // Applies an oop closure to all ref fields in objects iterated over in an 174 // object iteration. 175 class ObjectToOopClosure: public ObjectClosure { 176 ExtendedOopClosure* _cl; 177 public: 178 void do_object(oop obj); |