blob: 9e762e13ee788bd61e1e8b87ea79ea9674f7689c [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
buzbee5cd21802011-08-26 10:40:14 -070041 static MemberOffset StringsOffset() {
42 return MemberOffset(DataOffset().Int32Value() +
43 kStrings * sizeof(Object*));
buzbeec5ef0462011-08-25 18:44:49 -070044 }
45
buzbee5cd21802011-08-26 10:40:14 -070046 static MemberOffset FieldsOffset() {
47 return MemberOffset(DataOffset().Int32Value() +
48 kFields * sizeof(Object*));
buzbeec5ef0462011-08-25 18:44:49 -070049 }
50
buzbee5cd21802011-08-26 10:40:14 -070051 static MemberOffset MethodsOffset() {
52 return MemberOffset(DataOffset().Int32Value() +
53 kMethods * sizeof(Object*));
buzbeec5ef0462011-08-25 18:44:49 -070054 }
55
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070056 size_t NumStrings() const {
57 return GetStrings()->GetLength();
58 }
59
Brian Carlstrom9ea1cb12011-08-24 23:18:18 -070060 size_t NumTypes() const {
61 return GetTypes()->GetLength();
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070062 }
63
64 size_t NumMethods() const {
65 return GetMethods()->GetLength();
66 }
67
68 size_t NumFields() const {
69 return GetFields()->GetLength();
70 }
71
72 String* GetResolvedString(uint32_t string_idx) const {
Brian Carlstrom4a96b602011-07-26 16:40:23 -070073 return GetStrings()->Get(string_idx);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070074 }
75
76 void SetResolvedString(uint32_t string_idx, String* resolved) {
77 GetStrings()->Set(string_idx, resolved);
78 }
79
Brian Carlstrom9ea1cb12011-08-24 23:18:18 -070080 Class* GetResolvedType(uint32_t type_idx) const {
81 return GetTypes()->Get(type_idx);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070082 }
83
Brian Carlstrom9ea1cb12011-08-24 23:18:18 -070084 void SetResolvedType(uint32_t type_idx, Class* resolved) {
85 GetTypes()->Set(type_idx, resolved);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070086 }
87
88 Method* GetResolvedMethod(uint32_t method_idx) const {
Brian Carlstrom4a96b602011-07-26 16:40:23 -070089 return GetMethods()->Get(method_idx);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070090 }
91
92 void SetResolvedMethod(uint32_t method_idx, Method* resolved) {
93 GetMethods()->Set(method_idx, resolved);
94 }
95
96 Field* GetResolvedField(uint32_t field_idx) const {
Brian Carlstrom4a96b602011-07-26 16:40:23 -070097 return GetFields()->Get(field_idx);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070098 }
99
100 void SetResolvedfield(uint32_t field_idx, Field* resolved) {
101 GetFields()->Set(field_idx, resolved);
102 }
103
Brian Carlstrom4a96b602011-07-26 16:40:23 -0700104 ObjectArray<String>* GetStrings() const {
Brian Carlstromc4fa2c02011-08-21 03:00:12 -0700105 return static_cast<ObjectArray<String>*>(GetNonNull(kStrings));
Brian Carlstrom7e49dca2011-07-22 18:07:34 -0700106 }
Brian Carlstrom9ea1cb12011-08-24 23:18:18 -0700107 ObjectArray<Class>* GetTypes() const {
108 return static_cast<ObjectArray<Class>*>(GetNonNull(kTypes));
Brian Carlstrom7e49dca2011-07-22 18:07:34 -0700109 }
Brian Carlstrom4a96b602011-07-26 16:40:23 -0700110 ObjectArray<Method>* GetMethods() const {
Brian Carlstromc4fa2c02011-08-21 03:00:12 -0700111 return static_cast<ObjectArray<Method>*>(GetNonNull(kMethods));
Brian Carlstrom7e49dca2011-07-22 18:07:34 -0700112 }
Brian Carlstrom4a96b602011-07-26 16:40:23 -0700113 ObjectArray<Field>* GetFields() const {
Brian Carlstromc4fa2c02011-08-21 03:00:12 -0700114 return static_cast<ObjectArray<Field>*>(GetNonNull(kFields));
Brian Carlstrom7e49dca2011-07-22 18:07:34 -0700115 }
Brian Carlstromc4fa2c02011-08-21 03:00:12 -0700116
117 private:
118 Object* GetNonNull(ArrayIndex array_index) const {
119 Object* obj = Get(array_index);
120 DCHECK(obj != NULL);
121 return obj;
122 }
123 DISALLOW_IMPLICIT_CONSTRUCTORS(DexCache);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -0700124};
125
126} // namespace art
127
128#endif // ART_SRC_DEX_CACHE_H_