8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef SHARE_VM_OOPS_TYPEARRAYKLASS_INLINE_HPP
26 #define SHARE_VM_OOPS_TYPEARRAYKLASS_INLINE_HPP
27
28 #include "oops/oop.inline.hpp"
29 #include "oops/typeArrayKlass.hpp"
30 #include "oops/typeArrayOop.hpp"
31
32 class ExtendedOopClosure;
33
34 inline int TypeArrayKlass::oop_oop_iterate_impl(oop obj, ExtendedOopClosure* closure) {
35 assert(obj->is_typeArray(),"must be a type array");
36 typeArrayOop t = typeArrayOop(obj);
37 // Performance tweak: We skip iterating over the klass pointer since we
38 // know that Universe::TypeArrayKlass never moves.
39 return t->object_size();
40 }
41
42 #define TypeArrayKlass_OOP_OOP_ITERATE_DEFN(OopClosureType, nv_suffix) \
43 \
44 int TypeArrayKlass:: \
45 oop_oop_iterate##nv_suffix(oop obj, OopClosureType* closure) { \
46 return oop_oop_iterate_impl(obj, closure); \
47 }
48
49 #if INCLUDE_ALL_GCS
50 #define TypeArrayKlass_OOP_OOP_ITERATE_BACKWARDS_DEFN(OopClosureType, nv_suffix) \
51 \
52 int TypeArrayKlass:: \
53 oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* closure) { \
54 return oop_oop_iterate_impl(obj, closure); \
55 }
56 #else
57 #define TypeArrayKlass_OOP_OOP_ITERATE_BACKWARDS_DEFN(OopClosureType, nv_suffix)
58 #endif
59
60
61 #define TypeArrayKlass_OOP_OOP_ITERATE_DEFN_m(OopClosureType, nv_suffix) \
62 \
63 int TypeArrayKlass:: \
64 oop_oop_iterate##nv_suffix##_m(oop obj, OopClosureType* closure, MemRegion mr) { \
65 return oop_oop_iterate_impl(obj, closure); \
66 }
67
68 #define ALL_TYPE_ARRAY_KLASS_OOP_OOP_ITERATE_DEFN(OopClosureType, nv_suffix) \
69 TypeArrayKlass_OOP_OOP_ITERATE_DEFN( OopClosureType, nv_suffix) \
70 TypeArrayKlass_OOP_OOP_ITERATE_DEFN_m( OopClosureType, nv_suffix) \
71 TypeArrayKlass_OOP_OOP_ITERATE_BACKWARDS_DEFN(OopClosureType, nv_suffix)
72
73 #endif // SHARE_VM_OOPS_TYPEARRAYKLASS_INLINE_HPP
|
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef SHARE_VM_OOPS_TYPEARRAYKLASS_INLINE_HPP
26 #define SHARE_VM_OOPS_TYPEARRAYKLASS_INLINE_HPP
27
28 #include "oops/arrayKlass.hpp"
29 #include "oops/klass.hpp"
30 #include "oops/oop.inline.hpp"
31 #include "oops/typeArrayKlass.hpp"
32 #include "oops/typeArrayOop.hpp"
33
34 class ExtendedOopClosure;
35
36 inline int TypeArrayKlass::oop_oop_iterate_impl(oop obj, ExtendedOopClosure* closure) {
37 assert(obj->is_typeArray(),"must be a type array");
38 typeArrayOop t = typeArrayOop(obj);
39 // Performance tweak: We skip iterating over the klass pointer since we
40 // know that Universe::TypeArrayKlass never moves.
41 return t->object_size();
42 }
43
44 template <bool nv, typename OopClosureType>
45 int TypeArrayKlass::oop_oop_iterate(oop obj, OopClosureType* closure) {
46 return oop_oop_iterate_impl(obj, closure);
47 }
48
49 template <bool nv, typename OopClosureType>
50 int TypeArrayKlass::oop_oop_iterate_bounded(oop obj, OopClosureType* closure, MemRegion mr) {
51 return oop_oop_iterate_impl(obj, closure);
52 }
53
54 #define ALL_TYPE_ARRAY_KLASS_OOP_OOP_ITERATE_DEFN(OopClosureType, nv_suffix) \
55 OOP_OOP_ITERATE_DEFN( TypeArrayKlass, OopClosureType, nv_suffix) \
56 OOP_OOP_ITERATE_DEFN_m( TypeArrayKlass, OopClosureType, nv_suffix) \
57 OOP_OOP_ITERATE_NO_BACKWARDS_DEFN(TypeArrayKlass, OopClosureType, nv_suffix)
58
59 #endif // SHARE_VM_OOPS_TYPEARRAYKLASS_INLINE_HPP
|