--- old/src/java.base/share/classes/jdk/internal/jimage/ImageStrings.java 2015-06-23 14:28:55.000000000 +0200 +++ new/src/java.base/share/classes/jdk/internal/jimage/ImageStrings.java 2015-06-23 14:28:55.000000000 +0200 @@ -25,83 +25,8 @@ 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 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); }