Repository navigation
Expand file tree
/
Copy pathSize.java
More file actions
244 lines (206 loc) · 6.13 KB
/
Copy pathSize.java
File metadata and controls
244 lines (206 loc) · 6.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
/*
* Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved.
*
* Sun Microsystems, Inc. has intellectual property rights relating to technology embodied in the product
* that is described in this document. In particular, and without limitation, these intellectual property
* rights may include one or more of the U.S. patents listed at http://www.sun.com/patents and one or
* more additional patents or pending patent applications in the U.S. and in other countries.
*
* U.S. Government Rights - Commercial software. Government users are subject to the Sun
* Microsystems, Inc. standard license agreement and applicable provisions of the FAR and its
* supplements.
*
* Use is subject to license terms. Sun, Sun Microsystems, the Sun logo, Java and Solaris are trademarks or
* registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries. All SPARC trademarks
* are used under license and are trademarks or registered trademarks of SPARC International, Inc. in the
* U.S. and other countries.
*
* UNIX is a registered trademark in the U.S. and other countries, exclusively licensed through X/Open
* Company, Ltd.
*/
package com.sun.max.unsafe;
import com.sun.max.annotate.*;
import com.sun.max.lang.*;
/**
* Use this type rather than Address to remark that you are referring to the size of something. A "size" is always
* referring to a number of bytes. (In contrast, a "length" is bound to a given snippet unit that may differ from
* bytes.)
*
* We delegate much of the implementation to Address.
* We only need this for running on the host VM,
* because there the actual types are BoxedSize and BoxedAddress.
*
* @author Bernd Mathiske
*/
public abstract class Size extends Address {
protected Size() {
}
@INLINE
public static Size zero() {
return fromInt(0);
}
public static final Size K = Size.fromInt(Ints.K);
public static final Size M = Size.fromInt(Ints.M);
public static final Size G = Size.fromLong(Longs.G);
@INLINE
public static Size fromUnsignedInt(int value) {
return Address.fromUnsignedInt(value).asSize();
}
@INLINE
public static Size fromInt(int value) {
return Address.fromInt(value).asSize();
}
@INLINE
public static Size fromLong(long value) {
return Address.fromLong(value).asSize();
}
@Override
public String toString() {
return "#" + toUnsignedString(10);
}
@INLINE
@Override
public final Size plus(int addend) {
return asAddress().plus(addend).asSize();
}
@INLINE
@Override
public final Size plus(long addend) {
return asAddress().plus(addend).asSize();
}
@INLINE
@Override
public final Size plus(Address addend) {
return asAddress().plus(addend).asSize();
}
@INLINE
@Override
public final Size plus(Offset addend) {
return asAddress().plus(addend).asSize();
}
@INLINE
@Override
public final Size minus(Address subtrahend) {
return asAddress().minus(subtrahend).asSize();
}
@INLINE
@Override
public final Size minus(int subtrahend) {
return asAddress().minus(subtrahend).asSize();
}
@INLINE
@Override
public final Size minus(long subtrahend) {
return asAddress().minus(subtrahend).asSize();
}
@INLINE
@Override
public final Size minus(Offset subtrahend) {
return asAddress().minus(subtrahend).asSize();
}
@INLINE
@Override
public final Size times(Address factor) {
return asAddress().times(factor).asSize();
}
@INLINE
@Override
public final Size times(int factor) {
return asAddress().times(factor).asSize();
}
@INLINE
@Override
public final Size dividedBy(Address divisor) {
return asAddress().dividedBy(divisor).asSize();
}
@INLINE
@Override
public final Size dividedBy(int divisor) {
return asAddress().dividedBy(divisor).asSize();
}
@INLINE
@Override
public final Size remainder(Address divisor) {
return asAddress().remainder(divisor).asSize();
}
@INLINE
@Override
public final Size roundedUpBy(int nBytes) {
return asAddress().roundedUpBy(nBytes).asSize();
}
@INLINE
@Override
public final Size roundedDownBy(int nBytes) {
return asAddress().roundedDownBy(nBytes).asSize();
}
@INLINE
@Override
public final Size wordAligned() {
return asAddress().wordAligned().asSize();
}
@INLINE(override = true)
@Override
public Size aligned(int alignment) {
return asAddress().aligned(alignment).asSize();
}
@INLINE(override = true)
@Override
public final boolean isWordAligned() {
return asAddress().isWordAligned();
}
@INLINE
@Override
public final Size bitSet(int index) {
return asAddress().bitSet(index).asSize();
}
@INLINE
@Override
public final Size bitClear(int index) {
return asAddress().bitClear(index).asSize();
}
@INLINE
@Override
public final Size and(Address operand) {
return asAddress().and(operand).asSize();
}
@INLINE
@Override
public final Size and(int operand) {
return asAddress().and(operand).asSize();
}
@INLINE
@Override
public final Size and(long operand) {
return asAddress().and(operand).asSize();
}
@INLINE
@Override
public final Size or(Address operand) {
return asAddress().or(operand).asSize();
}
@INLINE
@Override
public final Size or(int operand) {
return asAddress().or(operand).asSize();
}
@INLINE
@Override
public final Size or(long operand) {
return asAddress().or(operand).asSize();
}
@INLINE
@Override
public final Size not() {
return asAddress().not().asSize();
}
@INLINE
@Override
public final Size shiftedLeft(int nBits) {
return asAddress().shiftedLeft(nBits).asSize();
}
@INLINE
@Override
public final Size unsignedShiftedRight(int nBits) {
return asAddress().unsignedShiftedRight(nBits).asSize();
}
}