12faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes/* 22faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * Copyright (C) 2011 The Android Open Source Project 32faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * 42faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * Licensed under the Apache License, Version 2.0 (the "License"); 52faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * you may not use this file except in compliance with the License. 62faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * You may obtain a copy of the License at 72faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * 82faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 92faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * 102faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * Unless required by applicable law or agreed to in writing, software 112faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 122faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * See the License for the specific language governing permissions and 142faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes * limitations under the License. 152faa5f1271587cda765f26bcf2951065300a01ffElliott Hughes */ 161f87008b165d26541d832ff805250afdc89c253dBrian Carlstrom 17fc0e3219edc9a5bf81b166e82fd5db2796eb6a0dBrian Carlstrom#ifndef ART_RUNTIME_MIRROR_ARRAY_INL_H_ 18fc0e3219edc9a5bf81b166e82fd5db2796eb6a0dBrian Carlstrom#define ART_RUNTIME_MIRROR_ARRAY_INL_H_ 191f87008b165d26541d832ff805250afdc89c253dBrian Carlstrom 202dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers#include "array.h" 211f87008b165d26541d832ff805250afdc89c253dBrian Carlstrom 222dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers#include "class.h" 231f87008b165d26541d832ff805250afdc89c253dBrian Carlstrom 241f87008b165d26541d832ff805250afdc89c253dBrian Carlstromnamespace art { 252dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogersnamespace mirror { 262dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers 272dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogersinline size_t Array::SizeOf() const { 282dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers // This is safe from overflow because the array was already allocated, so we know it's sane. 292dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers size_t component_size = GetClass()->GetComponentSize(); 302dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers int32_t component_count = GetLength(); 312dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers size_t header_size = sizeof(Object) + (component_size == sizeof(int64_t) ? 8 : 4); 322dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers size_t data_size = component_count * component_size; 332dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers return header_size + data_size; 342dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers} 352dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers 362dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers} // namespace mirror 371f87008b165d26541d832ff805250afdc89c253dBrian Carlstrom} // namespace art 381f87008b165d26541d832ff805250afdc89c253dBrian Carlstrom 39fc0e3219edc9a5bf81b166e82fd5db2796eb6a0dBrian Carlstrom#endif // ART_RUNTIME_MIRROR_ARRAY_INL_H_ 40