blob: 13c900eaf0ec89f4a97adf0da2107a221d828f3e [file] [log] [blame]
Brian Carlstrom7e49dca2011-07-22 18:07:34 -07001// Copyright 2011 Google Inc. All Rights Reserved.
2
3#ifndef ART_SRC_DEX_CACHE_H_
4#define ART_SRC_DEX_CACHE_H_
5
Brian Carlstrom9ea1cb12011-08-24 23:18:18 -07006#include "dex_file.h"
Brian Carlstrom7e49dca2011-07-22 18:07:34 -07007#include "globals.h"
8#include "macros.h"
9#include "object.h"
10
11namespace art {
12
13class Class;
14class Field;
15class Method;
16class String;
17union JValue;
18
Brian Carlstrom4a96b602011-07-26 16:40:23 -070019class DexCache : public ObjectArray<Object> {
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070020 public:
21
Brian Carlstromc4fa2c02011-08-21 03:00:12 -070022 enum ArrayIndex {
Brian Carlstroma663ea52011-08-19 23:33:41 -070023 kLocation = 0,
24 kStrings = 1,
Brian Carlstrom9ea1cb12011-08-24 23:18:18 -070025 kTypes = 2,
Brian Carlstroma663ea52011-08-19 23:33:41 -070026 kMethods = 3,
27 kFields = 4,
28 kMax = 5,
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070029 };
30
Brian Carlstroma663ea52011-08-19 23:33:41 -070031 void Init(String* location,
32 ObjectArray<String>* strings,
Brian Carlstrom9ea1cb12011-08-24 23:18:18 -070033 ObjectArray<Class>* types,
Brian Carlstrom4a96b602011-07-26 16:40:23 -070034 ObjectArray<Method>* methods,
35 ObjectArray<Field>* fields);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070036
Brian Carlstroma663ea52011-08-19 23:33:41 -070037 String* GetLocation() const {
38 return Get(kLocation)->AsString();
39 }
40
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070041 size_t NumStrings() const {
42 return GetStrings()->GetLength();
43 }
44
Brian Carlstrom9ea1cb12011-08-24 23:18:18 -070045 size_t NumTypes() const {
46 return GetTypes()->GetLength();
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070047 }
48
49 size_t NumMethods() const {
50 return GetMethods()->GetLength();
51 }
52
53 size_t NumFields() const {
54 return GetFields()->GetLength();
55 }
56
57 String* GetResolvedString(uint32_t string_idx) const {
Brian Carlstrom4a96b602011-07-26 16:40:23 -070058 return GetStrings()->Get(string_idx);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070059 }
60
61 void SetResolvedString(uint32_t string_idx, String* resolved) {
62 GetStrings()->Set(string_idx, resolved);
63 }
64
Brian Carlstrom9ea1cb12011-08-24 23:18:18 -070065 Class* GetResolvedType(uint32_t type_idx) const {
66 return GetTypes()->Get(type_idx);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070067 }
68
Brian Carlstrom9ea1cb12011-08-24 23:18:18 -070069 void SetResolvedType(uint32_t type_idx, Class* resolved) {
70 GetTypes()->Set(type_idx, resolved);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070071 }
72
73 Method* GetResolvedMethod(uint32_t method_idx) const {
Brian Carlstrom4a96b602011-07-26 16:40:23 -070074 return GetMethods()->Get(method_idx);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070075 }
76
77 void SetResolvedMethod(uint32_t method_idx, Method* resolved) {
78 GetMethods()->Set(method_idx, resolved);
79 }
80
81 Field* GetResolvedField(uint32_t field_idx) const {
Brian Carlstrom4a96b602011-07-26 16:40:23 -070082 return GetFields()->Get(field_idx);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070083 }
84
85 void SetResolvedfield(uint32_t field_idx, Field* resolved) {
86 GetFields()->Set(field_idx, resolved);
87 }
88
Brian Carlstrom4a96b602011-07-26 16:40:23 -070089 ObjectArray<String>* GetStrings() const {
Brian Carlstromc4fa2c02011-08-21 03:00:12 -070090 return static_cast<ObjectArray<String>*>(GetNonNull(kStrings));
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070091 }
Brian Carlstrom9ea1cb12011-08-24 23:18:18 -070092 ObjectArray<Class>* GetTypes() const {
93 return static_cast<ObjectArray<Class>*>(GetNonNull(kTypes));
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070094 }
Brian Carlstrom4a96b602011-07-26 16:40:23 -070095 ObjectArray<Method>* GetMethods() const {
Brian Carlstromc4fa2c02011-08-21 03:00:12 -070096 return static_cast<ObjectArray<Method>*>(GetNonNull(kMethods));
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070097 }
Brian Carlstrom4a96b602011-07-26 16:40:23 -070098 ObjectArray<Field>* GetFields() const {
Brian Carlstromc4fa2c02011-08-21 03:00:12 -070099 return static_cast<ObjectArray<Field>*>(GetNonNull(kFields));
Brian Carlstrom7e49dca2011-07-22 18:07:34 -0700100 }
Brian Carlstromc4fa2c02011-08-21 03:00:12 -0700101
102 private:
103 Object* GetNonNull(ArrayIndex array_index) const {
104 Object* obj = Get(array_index);
105 DCHECK(obj != NULL);
106 return obj;
107 }
108 DISALLOW_IMPLICIT_CONSTRUCTORS(DexCache);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -0700109};
110
111} // namespace art
112
113#endif // ART_SRC_DEX_CACHE_H_