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