blob: f34dbe44e6b0146b494153f7ad58db815fd521c0 [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
Brian Carlstromc4fa2c02011-08-21 03:00:12 -070021 enum ArrayIndex {
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
Brian Carlstrom4a96b602011-07-26 16:40:23 -070088 ObjectArray<String>* GetStrings() const {
Brian Carlstromc4fa2c02011-08-21 03:00:12 -070089 return static_cast<ObjectArray<String>*>(GetNonNull(kStrings));
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070090 }
Brian Carlstrom4a96b602011-07-26 16:40:23 -070091 ObjectArray<Class>* GetClasses() const {
Brian Carlstromc4fa2c02011-08-21 03:00:12 -070092 return static_cast<ObjectArray<Class>*>(GetNonNull(kClasses));
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070093 }
Brian Carlstrom4a96b602011-07-26 16:40:23 -070094 ObjectArray<Method>* GetMethods() const {
Brian Carlstromc4fa2c02011-08-21 03:00:12 -070095 return static_cast<ObjectArray<Method>*>(GetNonNull(kMethods));
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070096 }
Brian Carlstrom4a96b602011-07-26 16:40:23 -070097 ObjectArray<Field>* GetFields() const {
Brian Carlstromc4fa2c02011-08-21 03:00:12 -070098 return static_cast<ObjectArray<Field>*>(GetNonNull(kFields));
Brian Carlstrom7e49dca2011-07-22 18:07:34 -070099 }
Brian Carlstromc4fa2c02011-08-21 03:00:12 -0700100
101 private:
102 Object* GetNonNull(ArrayIndex array_index) const {
103 Object* obj = Get(array_index);
104 DCHECK(obj != NULL);
105 return obj;
106 }
107 DISALLOW_IMPLICIT_CONSTRUCTORS(DexCache);
Brian Carlstrom7e49dca2011-07-22 18:07:34 -0700108};
109
110} // namespace art
111
112#endif // ART_SRC_DEX_CACHE_H_