annotate src/share/vm/oops/fieldStreams.hpp @ 4710:41406797186b

7113012: G1: rename not-fully-young GCs as "mixed" Summary: Renamed partially-young GCs as mixed and fully-young GCs as young. Change all external output that includes those terms (GC log and GC ergo log) as well as any comments, fields, methods, etc. The changeset also includes very minor code tidying up (added some curly brackets). Reviewed-by: johnc, brutisso
author tonyp
date Fri, 16 Dec 2011 02:14:27 -0500
parents e6b1331a51d2
children 71afdabfd05b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3938
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
1 /*
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
2 * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
4 *
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
7 * published by the Free Software Foundation.
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
8 *
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
13 * accompanied this code).
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
14 *
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
18 *
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
21 * questions.
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
22 *
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
23 */
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
24
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
25 #ifndef SHARE_VM_OOPS_FIELDSTREAMS_HPP
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
26 #define SHARE_VM_OOPS_FIELDSTREAMS_HPP
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
27
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
28 #include "oops/instanceKlass.hpp"
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
29 #include "oops/fieldInfo.hpp"
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
30
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
31 // The is the base class for iteration over the fields array
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
32 // describing the declared fields in the class. Several subclasses
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
33 // are provided depending on the kind of iteration required. The
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
34 // JavaFieldStream is for iterating over regular Java fields and it
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
35 // generally the preferred iterator. InternalFieldStream only
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
36 // iterates over fields that have been injected by the JVM.
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
37 // AllFieldStream exposes all fields and should only be used in rare
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
38 // cases.
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
39 class FieldStreamBase : public StackObj {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
40 protected:
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
41 typeArrayHandle _fields;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
42 constantPoolHandle _constants;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
43 int _index;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
44 int _limit;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
45
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
46 FieldInfo* field() const { return FieldInfo::from_field_array(_fields(), _index); }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
47
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
48 FieldStreamBase(typeArrayHandle fields, constantPoolHandle constants, int start, int limit) {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
49 _fields = fields;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
50 _constants = constants;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
51 _index = start;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
52 _limit = limit;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
53 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
54
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
55 FieldStreamBase(typeArrayHandle fields, constantPoolHandle constants) {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
56 _fields = fields;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
57 _constants = constants;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
58 _index = 0;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
59 _limit = fields->length() / FieldInfo::field_slots;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
60 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
61
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
62 public:
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
63 FieldStreamBase(instanceKlass* klass) {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
64 _fields = klass->fields();
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
65 _constants = klass->constants();
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
66 _index = 0;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
67 _limit = klass->java_fields_count();
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
68 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
69 FieldStreamBase(instanceKlassHandle klass) {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
70 _fields = klass->fields();
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
71 _constants = klass->constants();
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
72 _index = 0;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
73 _limit = klass->java_fields_count();
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
74 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
75
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
76 // accessors
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
77 int index() const { return _index; }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
78
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
79 void next() { _index += 1; }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
80 bool done() const { return _index >= _limit; }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
81
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
82 // Accessors for current field
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
83 AccessFlags access_flags() const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
84 AccessFlags flags;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
85 flags.set_flags(field()->access_flags());
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
86 return flags;
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
87 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
88
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
89 void set_access_flags(u2 flags) const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
90 field()->set_access_flags(flags);
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
91 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
92
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
93 void set_access_flags(AccessFlags flags) const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
94 set_access_flags(flags.as_short());
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
95 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
96
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
97 Symbol* name() const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
98 return field()->name(_constants);
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
99 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
100
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
101 Symbol* signature() const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
102 return field()->signature(_constants);
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
103 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
104
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
105 Symbol* generic_signature() const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
106 return field()->generic_signature(_constants);
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
107 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
108
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
109 int offset() const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
110 return field()->offset();
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
111 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
112
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
113 void set_offset(int offset) {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
114 field()->set_offset(offset);
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
115 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
116 };
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
117
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
118 // Iterate over only the internal fields
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
119 class JavaFieldStream : public FieldStreamBase {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
120 public:
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
121 JavaFieldStream(instanceKlass* k): FieldStreamBase(k->fields(), k->constants(), 0, k->java_fields_count()) {}
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
122 JavaFieldStream(instanceKlassHandle k): FieldStreamBase(k->fields(), k->constants(), 0, k->java_fields_count()) {}
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
123
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
124 int name_index() const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
125 assert(!field()->is_internal(), "regular only");
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
126 return field()->name_index();
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
127 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
128 void set_name_index(int index) {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
129 assert(!field()->is_internal(), "regular only");
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
130 field()->set_name_index(index);
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
131 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
132 int signature_index() const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
133 assert(!field()->is_internal(), "regular only");
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
134 return field()->signature_index();
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
135 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
136 void set_signature_index(int index) {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
137 assert(!field()->is_internal(), "regular only");
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
138 field()->set_signature_index(index);
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
139 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
140 int generic_signature_index() const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
141 assert(!field()->is_internal(), "regular only");
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
142 return field()->generic_signature_index();
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
143 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
144 void set_generic_signature_index(int index) {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
145 assert(!field()->is_internal(), "regular only");
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
146 field()->set_generic_signature_index(index);
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
147 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
148 int initval_index() const {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
149 assert(!field()->is_internal(), "regular only");
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
150 return field()->initval_index();
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
151 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
152 void set_initval_index(int index) {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
153 assert(!field()->is_internal(), "regular only");
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
154 return field()->set_initval_index(index);
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
155 }
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
156 };
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
157
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
158
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
159 // Iterate over only the internal fields
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
160 class InternalFieldStream : public FieldStreamBase {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
161 public:
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
162 InternalFieldStream(instanceKlass* k): FieldStreamBase(k->fields(), k->constants(), k->java_fields_count(), k->all_fields_count()) {}
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
163 InternalFieldStream(instanceKlassHandle k): FieldStreamBase(k->fields(), k->constants(), k->java_fields_count(), k->all_fields_count()) {}
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
164 };
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
165
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
166
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
167 class AllFieldStream : public FieldStreamBase {
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
168 public:
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
169 AllFieldStream(typeArrayHandle fields, constantPoolHandle constants): FieldStreamBase(fields, constants) {}
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
170 AllFieldStream(instanceKlass* k): FieldStreamBase(k->fields(), k->constants()) {}
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
171 AllFieldStream(instanceKlassHandle k): FieldStreamBase(k->fields(), k->constants()) {}
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
172 };
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
173
e6b1331a51d2 7086585: make Java field injection more flexible
never
parents:
diff changeset
174 #endif // SHARE_VM_OOPS_FIELDSTREAMS_HPP