From 4b00d3415beb7a816a3b5948f43f3b2e4b856ea8 Mon Sep 17 00:00:00 2001 From: Mathieu Chartier Date: Fri, 13 Nov 2015 10:42:08 -0800 Subject: Refactor some patching logic Reduce duplication since app images in-place relocation will require this code also. Bug: 22858531 Change-Id: Ibb901b67267e27ef3bc2a0baff77189d4dcd018a --- runtime/mirror/array-inl.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'runtime/mirror/array-inl.h') diff --git a/runtime/mirror/array-inl.h b/runtime/mirror/array-inl.h index ec7d758ebb..b6f424b3a4 100644 --- a/runtime/mirror/array-inl.h +++ b/runtime/mirror/array-inl.h @@ -394,6 +394,19 @@ inline void PointerArray::SetElementPtrSize(uint32_t idx, T element, size_t ptr_ } } +template +inline void PointerArray::Fixup(mirror::PointerArray* dest, + size_t pointer_size, + const Visitor& visitor) { + for (size_t i = 0, count = GetLength(); i < count; ++i) { + void* ptr = GetElementPtrSize(i, pointer_size); + void* new_ptr = visitor(ptr); + if (ptr != new_ptr) { + dest->SetElementPtrSize(i, new_ptr, pointer_size); + } + } +} + } // namespace mirror } // namespace art -- cgit v1.2.3-59-g8ed1b