26 #define SHARE_VM_OOPS_VALUEARRAYKLASS_HPP
27
28 #include "classfile/classLoaderData.hpp"
29 #include "oops/arrayKlass.hpp"
30 #include "oops/valueKlass.hpp"
31 #include "utilities/macros.hpp"
32
33 /**
34 * Array of values, gives a layout of typeArrayOop, but needs oops iterators
35 */
36 class ValueArrayKlass : public ArrayKlass {
37 friend class VMStructs;
38
39 public:
40 static const KlassID ID = ValueArrayKlassID;
41
42 private:
43 // Constructor
44 ValueArrayKlass(Klass* element_klass, Symbol* name);
45
46 static ValueArrayKlass* allocate_klass(Klass* element_klass, Symbol* name, TRAPS);
47 protected:
48 // Returns the ArrayKlass for n'th dimension.
49 Klass* array_klass_impl(ArrayStorageProperties storage_props, bool or_null, int n, TRAPS);
50
51 // Returns the array class with this class as element type.
52 Klass* array_klass_impl(ArrayStorageProperties storage_props, bool or_null, TRAPS);
53
54 public:
55
56 ValueArrayKlass() {}
57
58 // Properties of an LWorld (LW2) flattened array
59 ArrayStorageProperties storage_properties() { return ArrayStorageProperties::flattened_and_null_free; }
60
61 virtual ValueKlass* element_klass() const;
62 virtual void set_element_klass(Klass* k);
63
64 // Casting from Klass*
65 static ValueArrayKlass* cast(Klass* k) {
66 assert(k->is_valueArray_klass(), "cast to ValueArrayKlass");
|
26 #define SHARE_VM_OOPS_VALUEARRAYKLASS_HPP
27
28 #include "classfile/classLoaderData.hpp"
29 #include "oops/arrayKlass.hpp"
30 #include "oops/valueKlass.hpp"
31 #include "utilities/macros.hpp"
32
33 /**
34 * Array of values, gives a layout of typeArrayOop, but needs oops iterators
35 */
36 class ValueArrayKlass : public ArrayKlass {
37 friend class VMStructs;
38
39 public:
40 static const KlassID ID = ValueArrayKlassID;
41
42 private:
43 // Constructor
44 ValueArrayKlass(Klass* element_klass, Symbol* name);
45
46 static ValueArrayKlass* allocate_klass(Klass* element_klass, TRAPS);
47 protected:
48 // Returns the ArrayKlass for n'th dimension.
49 Klass* array_klass_impl(ArrayStorageProperties storage_props, bool or_null, int n, TRAPS);
50
51 // Returns the array class with this class as element type.
52 Klass* array_klass_impl(ArrayStorageProperties storage_props, bool or_null, TRAPS);
53
54 public:
55
56 ValueArrayKlass() {}
57
58 // Properties of an LWorld (LW2) flattened array
59 ArrayStorageProperties storage_properties() { return ArrayStorageProperties::flattened_and_null_free; }
60
61 virtual ValueKlass* element_klass() const;
62 virtual void set_element_klass(Klass* k);
63
64 // Casting from Klass*
65 static ValueArrayKlass* cast(Klass* k) {
66 assert(k->is_valueArray_klass(), "cast to ValueArrayKlass");
|