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 ******************************************************************************* 57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Copyright (C) 2014, International Business Machines Corporation and 67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * others. All Rights Reserved. 77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * 97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * created on: 2014feb10 107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * created by: Markus W. Scherer 117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.impl.coll; 137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// TODO: There must be a Java class for a growable array of ints without auto-boxing to Integer?! 157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// Keep the API parallel to the C++ version for ease of porting. Port methods only as needed. 167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// If & when we start using something else, we might keep this as a thin wrapper for porting. 177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic final class UVector32 { 187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public UVector32() {} 197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public boolean isEmpty() { return length == 0; } 207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public int size() { return length; } 217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public int elementAti(int i) { return buffer[i]; } 227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public int[] getBuffer() { return buffer; } 237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void addElement(int e) { 247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ensureAppendCapacity(); 257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buffer[length++] = e; 267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void setElementAt(int elem, int index) { buffer[index] = elem; } 287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void insertElementAt(int elem, int index) { 297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ensureAppendCapacity(); 307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert System.arraycopy(buffer, index, buffer, index + 1, length - index); 317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buffer[index] = elem; 327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ++length; 337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void removeAllElements() { 357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert length = 0; 367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private void ensureAppendCapacity() { 397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(length >= buffer.length) { 407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int newCapacity = buffer.length <= 0xffff ? 4 * buffer.length : 2 * buffer.length; 417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] newBuffer = new int[newCapacity]; 427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert System.arraycopy(buffer, 0, newBuffer, 0, length); 437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buffer = newBuffer; 447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private int[] buffer = new int[32]; 477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private int length = 0; 487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert} 49