< 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 >