blob: 534a29b319d66551544ea851f8df632111d3141b [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 {
Brian Carlstroma663ea52011-08-19 23:33:41 -070022 kLocation = 0,
23 kStrings = 1,
24 kClasses = 2,
25 kMethods = 3,
26 kFields = 4,
27 kMax = 5,
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070028 };
29
Brian Carlstroma663ea52011-08-19 23:33:41 -070030 void Init(String* location,
31 ObjectArray<String>* strings,
Brian Carlstrom4a96b602011-07-26 16:40:23 -070032 ObjectArray<Class>* classes,
33 ObjectArray<Method>* methods,
34 ObjectArray<Field>* fields);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070035
Brian Carlstroma663ea52011-08-19 23:33:41 -070036 String* GetLocation() const {
37 return Get(kLocation)->AsString();
38 }
39
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070040 size_t NumStrings() const {
41 return GetStrings()->GetLength();
42 }
43
44 size_t NumClasses() const {
45 return GetClasses()->GetLength();
46 }
47
48 size_t NumMethods() const {
49 return GetMethods()->GetLength();
50 }
51
52 size_t NumFields() const {
53 return GetFields()->GetLength();
54 }
55
56 String* GetResolvedString(uint32_t string_idx) const {
Brian Carlstrom4a96b602011-07-26 16:40:23 -070057 return GetStrings()->Get(string_idx);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070058 }
59
60 void SetResolvedString(uint32_t string_idx, String* resolved) {
61 GetStrings()->Set(string_idx, resolved);
62 }
63
64 Class* GetResolvedClass(uint32_t class_idx) const {
Brian Carlstrom4a96b602011-07-26 16:40:23 -070065 return GetClasses()->Get(class_idx);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070066 }
67
68 void SetResolvedClass(uint32_t class_idx, Class* resolved) {
69 GetClasses()->Set(class_idx, resolved);
70 }
71
72 Method* GetResolvedMethod(uint32_t method_idx) const {
Brian Carlstrom4a96b602011-07-26 16:40:23 -070073 return GetMethods()->Get(method_idx);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070074 }
75
76 void SetResolvedMethod(uint32_t method_idx, Method* resolved) {
77 GetMethods()->Set(method_idx, resolved);
78 }
79
80 Field* GetResolvedField(uint32_t field_idx) const {
Brian Carlstrom4a96b602011-07-26 16:40:23 -070081 return GetFields()->Get(field_idx);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070082 }
83
84 void SetResolvedfield(uint32_t field_idx, Field* resolved) {
85 GetFields()->Set(field_idx, resolved);
86 }
87
88 private:
Brian Carlstrom4a96b602011-07-26 16:40:23 -070089 ObjectArray<String>* GetStrings() const {
Brian Carlstroma663ea52011-08-19 23:33:41 -070090 return static_cast<ObjectArray<String>*>(Get(kStrings));
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070091 }
Brian Carlstrom4a96b602011-07-26 16:40:23 -070092 ObjectArray<Class>* GetClasses() const {
Brian Carlstroma663ea52011-08-19 23:33:41 -070093 return static_cast<ObjectArray<Class>*>(Get(kClasses));
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070094 }
Brian Carlstrom4a96b602011-07-26 16:40:23 -070095 ObjectArray<Method>* GetMethods() const {
Brian Carlstroma663ea52011-08-19 23:33:41 -070096 return static_cast<ObjectArray<Method>*>(Get(kMethods));
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070097 }
Brian Carlstrom4a96b602011-07-26 16:40:23 -070098 ObjectArray<Field>* GetFields() const {
Brian Carlstroma663ea52011-08-19 23:33:41 -070099 return static_cast<ObjectArray<Field>*>(Get(kFields));
Brian Carlstrom7e49dca2011-07-22 18:07:34 -0700100 }
101 DexCache();
102};
103
104} // namespace art
105
106#endif // ART_SRC_DEX_CACHE_H_