< prev index next >

src/hotspot/share/oops/valueArrayOop.inline.hpp

Print this page

        

*** 26,35 **** --- 26,36 ---- #define SHARE_VM_OOPS_VALUEARRAYOOP_INLINE_HPP #include "oops/access.inline.hpp" #include "oops/arrayOop.inline.hpp" #include "oops/valueArrayOop.hpp" + #include "oops/valueKlass.inline.hpp" #include "oops/oop.inline.hpp" #include "runtime/globals.hpp" inline void* valueArrayOopDesc::base() const { return arrayOopDesc::base(T_VALUETYPE); }
*** 43,50 **** --- 44,84 ---- inline int valueArrayOopDesc::object_size() const { return object_size(klass()->layout_helper(), length()); } + inline oop valueArrayOopDesc::value_copy_from_index(valueArrayHandle vah, int index, TRAPS) { + ValueArrayKlass* vaklass = ValueArrayKlass::cast(vah->klass()); + ValueKlass* vklass = vaklass->element_klass(); + if (vklass->is_empty_value()) { + return vklass->default_value(); + } else { + oop buf = vklass->allocate_instance(CHECK_NULL); + vklass->value_copy_payload_to_new_oop(vah->value_at_addr(index, vaklass->layout_helper()) ,buf); + return buf; + } + } + + inline void valueArrayOopDesc::value_copy_from_index(int index, oop dst) const { + ValueArrayKlass* vaklass = ValueArrayKlass::cast(klass()); + ValueKlass* vklass = vaklass->element_klass(); + if (vklass->is_empty_value()) { + return; // Assumes dst was a new and clean buffer (OptoRuntime::load_unknown_value()) + } else { + void* src = value_at_addr(index, vaklass->layout_helper()); + return vklass->value_copy_payload_to_new_oop(src ,dst); + } + } + + inline void valueArrayOopDesc::value_copy_to_index(oop src, int index) const { + ValueArrayKlass* vaklass = ValueArrayKlass::cast(klass()); + ValueKlass* vklass = vaklass->element_klass(); + if (vklass->is_empty_value()) { + return; + } + void* dst = value_at_addr(index, vaklass->layout_helper()); + vklass->value_copy_oop_to_payload(src, dst); + } + #endif // SHARE_VM_OOPS_VALUEARRAYOOP_INLINE_HPP
< prev index next >