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