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