12d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert// © 2016 and later: Unicode, Inc. and others.
22d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html#License
37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/*
47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************
5f8a0c400bbd62a2ea4ee9b77641f79cb443d2187Neil Fuller * Copyright (C) 2003-2015, International Business Machines Corporation and
67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * others. All Rights Reserved.
77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************
87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert *
97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Created on May 2, 2003
107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert *
117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * To change the template for this generated file go to
127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Window>Preferences>Java>Code Generation>Code and Comments
137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */
147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.impl;
167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.io.IOException;
187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.nio.ByteBuffer;
197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/**
227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @author ram
237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert *
247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * To change the template for this generated type comment go to
257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Window>Preferences>Java>Code Generation>Code and Comments
267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */
277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic final class StringPrepDataReader implements ICUBinary.Authenticate {
287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private final static boolean debug = ICUDebug.enabled("NormalizerDataReader");
297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert   /**
317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    * <p>private constructor.</p>
327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    * @param bytes ICU StringPrep data file buffer
337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    * @exception IOException throw if data file fails authentication
347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    */
357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public StringPrepDataReader(ByteBuffer bytes)
367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                                        throws IOException{
377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if(debug) System.out.println("Bytes in buffer " + bytes.remaining());
387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        byteBuffer = bytes;
407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        unicodeVersion = ICUBinary.readHeader(byteBuffer, DATA_FORMAT_ID, this);
417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if(debug) System.out.println("Bytes left in byteBuffer " + byteBuffer.remaining());
437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
45f8a0c400bbd62a2ea4ee9b77641f79cb443d2187Neil Fuller    public char[] read(int length) throws IOException{
467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        //Read the extra data
47f8a0c400bbd62a2ea4ee9b77641f79cb443d2187Neil Fuller        return ICUBinary.getChars(byteBuffer, length, 0);
487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
502d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert    @Override
517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public boolean isDataVersionAcceptable(byte version[]){
522d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert        return version[0] == DATA_FORMAT_VERSION[0]
532d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert               && version[2] == DATA_FORMAT_VERSION[2]
547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert               && version[3] == DATA_FORMAT_VERSION[3];
557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public int[] readIndexes(int length)throws IOException{
577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int[] indexes = new int[length];
587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        //Read the indexes
597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        for (int i = 0; i <length ; i++) {
607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert             indexes[i] = byteBuffer.getInt();
617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return indexes;
632d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert    }
647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public byte[] getUnicodeVersion(){
667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return ICUBinary.getVersionByteArrayFromCompactInt(unicodeVersion);
677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    // private data members -------------------------------------------------
697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    * ICU data file input stream
737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    */
747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private ByteBuffer byteBuffer;
757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private int unicodeVersion;
767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    * File format version that this class understands.
787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    * No guarantees are made if a older version is used
797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    * see store.c of gennorm for more information and values
807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    */
817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    ///* dataFormat="SPRP" 0x53, 0x50, 0x52, 0x50  */
827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private static final int DATA_FORMAT_ID = 0x53505250;
837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private static final byte DATA_FORMAT_VERSION[] = {(byte)0x3, (byte)0x2,
847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                                                        (byte)0x5, (byte)0x2};
857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert}
86