Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ded498d4 authored by Jean Chalard's avatar Jean Chalard Committed by Android (Google) Code Review
Browse files

Merge "add readHeader." into jb-mr1-dev

parents 5ad47f0a 62ed9011
Loading
Loading
Loading
Loading
+45 −20
Original line number Diff line number Diff line
@@ -1380,6 +1380,48 @@ public class BinaryDictInputOutput {
        return NOT_A_VERSION_NUMBER;
    }

    /**
     * Helper function to get and validate the binary format version.
     * @throws UnsupportedFormatException
     * @throws IOException
     */
    private static int checkFormatVersion(final FusionDictionaryBufferInterface buffer)
            throws IOException, UnsupportedFormatException {
        final int version = getFormatVersion(buffer);
        if (version < MINIMUM_SUPPORTED_VERSION || version > MAXIMUM_SUPPORTED_VERSION) {
            throw new UnsupportedFormatException("This file has version " + version
                    + ", but this implementation does not support versions above "
                    + MAXIMUM_SUPPORTED_VERSION);
        }
        return version;
    }

    /**
     * Reads a header from a buffer.
     * @throws IOException
     * @throws UnsupportedFormatException
     */
    private static int readHeader(final FusionDictionaryBufferInterface buffer,
            final HashMap<String, String> options,
            final int version)
            throws IOException, UnsupportedFormatException {

        final int headerSize;
        if (version < FIRST_VERSION_WITH_HEADER_SIZE) {
            headerSize = buffer.position();
        } else {
            headerSize = buffer.readInt();
            populateOptions(buffer, headerSize, options);
            buffer.position(headerSize);
        }

        if (headerSize < 0) {
            throw new UnsupportedFormatException("header size can't be negative.");
        }

        return headerSize;
    }

    /**
     * Reads options from a buffer and populate a map with their contents.
     *
@@ -1414,33 +1456,16 @@ public class BinaryDictInputOutput {
    public static FusionDictionary readDictionaryBinary(
            final FusionDictionaryBufferInterface buffer, final FusionDictionary dict)
                    throws IOException, UnsupportedFormatException {
        // Check file version
        final int version = getFormatVersion(buffer);
        if (version < MINIMUM_SUPPORTED_VERSION || version > MAXIMUM_SUPPORTED_VERSION) {
            throw new UnsupportedFormatException("This file has version " + version
                    + ", but this implementation does not support versions above "
                    + MAXIMUM_SUPPORTED_VERSION);
        }

        // clear cache
        wordCache.clear();

        // Read options
        // Read header
        final int version = checkFormatVersion(buffer);
        final int optionsFlags = buffer.readUnsignedShort();

        final int headerSize;
        final HashMap<String, String> options = new HashMap<String, String>();
        if (version < FIRST_VERSION_WITH_HEADER_SIZE) {
            headerSize = buffer.position();
        } else {
            headerSize = buffer.readInt();
            populateOptions(buffer, headerSize, options);
            buffer.position(headerSize);
        }

        if (headerSize < 0) {
            throw new UnsupportedFormatException("header size can't be negative.");
        }
        final int headerSize = readHeader(buffer, options, version);

        Map<Integer, Node> reverseNodeMapping = new TreeMap<Integer, Node>();
        Map<Integer, CharGroup> reverseGroupMapping = new TreeMap<Integer, CharGroup>();