< prev index next >
src/java.base/share/classes/jdk/internal/jimage/ImageStrings.java
Print this page
@@ -23,85 +23,10 @@
* questions.
*/
package jdk.internal.jimage;
-import java.nio.ByteBuffer;
-import java.util.HashMap;
+interface ImageStrings {
+ public UTF8String get(int offset);
-class ImageStrings {
- private static final int NOT_FOUND = -1;
- static final int EMPTY_OFFSET = 0;
-
- private final HashMap<UTF8String, Integer> stringToOffsetMap;
- private final ImageStream stream;
-
- ImageStrings() {
- this.stringToOffsetMap = new HashMap<>();
- this.stream = new ImageStream();
-
- // Reserve 0 offset for empty string.
- int offset = addString(UTF8String.EMPTY_STRING);
- assert offset == 0 : "Empty string not zero offset";
- // Reserve 1 offset for frequently used ".class".
- addString(UTF8String.CLASS_STRING);
- }
-
- ImageStrings(ImageStream stream) {
- this.stringToOffsetMap = new HashMap<>();
- this.stream = stream;
- }
-
- private int addString(final UTF8String string) {
- int offset = stream.getPosition();
- string.writeTo(stream);
- stream.put('\0');
- stringToOffsetMap.put(string, offset);
-
- return offset;
- }
-
- int add(final UTF8String string) {
- int offset = find(string);
-
- return offset == NOT_FOUND ? addString(string) : offset;
- }
-
- int find(final UTF8String string) {
- Integer offset = stringToOffsetMap.get(string);
-
- return offset != null ? offset : NOT_FOUND;
- }
-
- UTF8String get(int offset) {
- ByteBuffer buffer = stream.getBuffer();
- assert 0 <= offset && offset < buffer.capacity() : "String buffer offset out of range";
- int zero = NOT_FOUND;
- for (int i = offset; i < buffer.capacity(); i++) {
- if (buffer.get(i) == '\0') {
- zero = i;
- break;
- }
- }
- assert zero != UTF8String.NOT_FOUND;
- int length = zero - offset;
- byte[] bytes = new byte[length];
- int mark = buffer.position();
- buffer.position(offset);
- buffer.get(bytes);
- buffer.position(mark);
-
- return new UTF8String(bytes, 0, length);
- }
-
- ImageStream getStream() {
- return stream;
- }
-
- int getSize() {
- return stream.getSize();
- }
-
- int getCount() {
- return stringToOffsetMap.size();
- }
+ public int add(final UTF8String string);
}
< prev index next >