blob: 47f9bcf53c9333de5d8ea4275d7cc83d19f6b2f4 [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
6#include "globals.h"
7#include "macros.h"
8#include "object.h"
9
10namespace art {
11
12class Class;
13class Field;
14class Method;
15class String;
16union JValue;
17
Brian Carlstrom4a96b602011-07-26 16:40:23 -070018class DexCache : public ObjectArray<Object> {
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070019 public:
20
21 enum ArrayIndexes {
22 kStrings = 0,
23 kClasses = 1,
24 kMethods = 2,
25 kFields = 3,
26 kMax = 4,
27 };
28
Brian Carlstrom4a96b602011-07-26 16:40:23 -070029 void Init(ObjectArray<String>* strings,
30 ObjectArray<Class>* classes,
31 ObjectArray<Method>* methods,
32 ObjectArray<Field>* fields);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070033
34 size_t NumStrings() const {
35 return GetStrings()->GetLength();
36 }
37
38 size_t NumClasses() const {
39 return GetClasses()->GetLength();
40 }
41
42 size_t NumMethods() const {
43 return GetMethods()->GetLength();
44 }
45
46 size_t NumFields() const {
47 return GetFields()->GetLength();
48 }
49
50 String* GetResolvedString(uint32_t string_idx) const {
Brian Carlstrom4a96b602011-07-26 16:40:23 -070051 return GetStrings()->Get(string_idx);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070052 }
53
54 void SetResolvedString(uint32_t string_idx, String* resolved) {
55 GetStrings()->Set(string_idx, resolved);
56 }
57
58 Class* GetResolvedClass(uint32_t class_idx) const {
Brian Carlstrom4a96b602011-07-26 16:40:23 -070059 return GetClasses()->Get(class_idx);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070060 }
61
62 void SetResolvedClass(uint32_t class_idx, Class* resolved) {
63 GetClasses()->Set(class_idx, resolved);
64 }
65
66 Method* GetResolvedMethod(uint32_t method_idx) const {
Brian Carlstrom4a96b602011-07-26 16:40:23 -070067 return GetMethods()->Get(method_idx);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070068 }
69
70 void SetResolvedMethod(uint32_t method_idx, Method* resolved) {
71 GetMethods()->Set(method_idx, resolved);
72 }
73
74 Field* GetResolvedField(uint32_t field_idx) const {
Brian Carlstrom4a96b602011-07-26 16:40:23 -070075 return GetFields()->Get(field_idx);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070076 }
77
78 void SetResolvedfield(uint32_t field_idx, Field* resolved) {
79 GetFields()->Set(field_idx, resolved);
80 }
81
82 private:
Brian Carlstrom4a96b602011-07-26 16:40:23 -070083 ObjectArray<String>* GetStrings() const {
84 return down_cast<ObjectArray<String>*>(Get(kStrings));
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070085 }
Brian Carlstrom4a96b602011-07-26 16:40:23 -070086 ObjectArray<Class>* GetClasses() const {
87 return down_cast<ObjectArray<Class>*>(Get(kClasses));
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070088 }
Brian Carlstrom4a96b602011-07-26 16:40:23 -070089 ObjectArray<Method>* GetMethods() const {
90 return down_cast<ObjectArray<Method>*>(Get(kMethods));
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070091 }
Brian Carlstrom4a96b602011-07-26 16:40:23 -070092 ObjectArray<Field>* GetFields() const {
93 return down_cast<ObjectArray<Field>*>(Get(kFields));
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070094 }
95 DexCache();
96};
97
98} // namespace art
99
100#endif // ART_SRC_DEX_CACHE_H_