blob: fdf179b84e59e24c508dfcb2cb0009b0e3baf6eb [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
buzbeec5ef0462011-08-25 18:44:49 -070041 static size_t StringsOffset() {
42 return kStrings * sizeof(Object*);
43 }
44
45 static size_t FieldsOffset() {
46 return kFields * sizeof(Object*);
47 }
48
49 static size_t MethodsOffset() {
50 return kMethods * sizeof(Object*);
51 }
52
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070053 size_t NumStrings() const {
54 return GetStrings()->GetLength();
55 }
56
Brian Carlstrom9ea1cb12011-08-24 23:18:18 -070057 size_t NumTypes() const {
58 return GetTypes()->GetLength();
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070059 }
60
61 size_t NumMethods() const {
62 return GetMethods()->GetLength();
63 }
64
65 size_t NumFields() const {
66 return GetFields()->GetLength();
67 }
68
69 String* GetResolvedString(uint32_t string_idx) const {
Brian Carlstrom4a96b602011-07-26 16:40:23 -070070 return GetStrings()->Get(string_idx);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070071 }
72
73 void SetResolvedString(uint32_t string_idx, String* resolved) {
74 GetStrings()->Set(string_idx, resolved);
75 }
76
Brian Carlstrom9ea1cb12011-08-24 23:18:18 -070077 Class* GetResolvedType(uint32_t type_idx) const {
78 return GetTypes()->Get(type_idx);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070079 }
80
Brian Carlstrom9ea1cb12011-08-24 23:18:18 -070081 void SetResolvedType(uint32_t type_idx, Class* resolved) {
82 GetTypes()->Set(type_idx, resolved);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070083 }
84
85 Method* GetResolvedMethod(uint32_t method_idx) const {
Brian Carlstrom4a96b602011-07-26 16:40:23 -070086 return GetMethods()->Get(method_idx);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070087 }
88
89 void SetResolvedMethod(uint32_t method_idx, Method* resolved) {
90 GetMethods()->Set(method_idx, resolved);
91 }
92
93 Field* GetResolvedField(uint32_t field_idx) const {
Brian Carlstrom4a96b602011-07-26 16:40:23 -070094 return GetFields()->Get(field_idx);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070095 }
96
97 void SetResolvedfield(uint32_t field_idx, Field* resolved) {
98 GetFields()->Set(field_idx, resolved);
99 }
100
Brian Carlstrom4a96b602011-07-26 16:40:23 -0700101 ObjectArray<String>* GetStrings() const {
Brian Carlstromc4fa2c02011-08-21 03:00:12 -0700102 return static_cast<ObjectArray<String>*>(GetNonNull(kStrings));
Brian Carlstrom7e49dca2011-07-22 18:07:34 -0700103 }
Brian Carlstrom9ea1cb12011-08-24 23:18:18 -0700104 ObjectArray<Class>* GetTypes() const {
105 return static_cast<ObjectArray<Class>*>(GetNonNull(kTypes));
Brian Carlstrom7e49dca2011-07-22 18:07:34 -0700106 }
Brian Carlstrom4a96b602011-07-26 16:40:23 -0700107 ObjectArray<Method>* GetMethods() const {
Brian Carlstromc4fa2c02011-08-21 03:00:12 -0700108 return static_cast<ObjectArray<Method>*>(GetNonNull(kMethods));
Brian Carlstrom7e49dca2011-07-22 18:07:34 -0700109 }
Brian Carlstrom4a96b602011-07-26 16:40:23 -0700110 ObjectArray<Field>* GetFields() const {
Brian Carlstromc4fa2c02011-08-21 03:00:12 -0700111 return static_cast<ObjectArray<Field>*>(GetNonNull(kFields));
Brian Carlstrom7e49dca2011-07-22 18:07:34 -0700112 }
Brian Carlstromc4fa2c02011-08-21 03:00:12 -0700113
114 private:
115 Object* GetNonNull(ArrayIndex array_index) const {
116 Object* obj = Get(array_index);
117 DCHECK(obj != NULL);
118 return obj;
119 }
120 DISALLOW_IMPLICIT_CONSTRUCTORS(DexCache);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -0700121};
122
123} // namespace art
124
125#endif // ART_SRC_DEX_CACHE_H_