< prev index next >

src/hotspot/share/oops/arrayOop.hpp

Print this page
rev 49674 : 8198285: More consistent Access API for arraycopy

@@ -86,10 +86,22 @@
   // Returns the address of the first element. The elements in the array will not
   // relocate from this address until a subsequent thread transition.
   inline void* base(BasicType type) const;
   inline void* base_raw(BasicType type) const; // GC barrier invariant
 
+  template <typename T>
+  static T* obj_offset_to_raw(arrayOop obj, size_t offset_in_bytes, T* raw) {
+    if (obj != NULL) {
+      assert(raw == NULL, "either raw or in-heap");
+      char* base = reinterpret_cast<char*>((void*) obj);
+      raw = reinterpret_cast<T*>(base + offset_in_bytes);
+    } else {
+      assert(raw != NULL, "either raw or in-heap");
+    }
+    return raw;
+  }
+
   // Tells whether index is within bounds.
   bool is_within_bounds(int index) const        { return 0 <= index && index < length(); }
 
   // Accessors for instance variable which is not a C++ declared nonstatic
   // field.
< prev index next >