| // © 2016 and later: Unicode, Inc. and others. |
| // License & terms of use: http://www.unicode.org/copyright.html#License |
| /* |
| ******************************************************************************* |
| * Copyright (C) 2014, International Business Machines Corporation and |
| * others. All Rights Reserved. |
| ******************************************************************************* |
| * |
| * created on: 2014feb10 |
| * created by: Markus W. Scherer |
| */ |
| package com.ibm.icu.impl.coll; |
| |
| // TODO: There must be a Java class for a growable array of longs without auto-boxing to Long?! |
| // Keep the API parallel to the C++ version for ease of porting. Port methods only as needed. |
| // If & when we start using something else, we might keep this as a thin wrapper for porting. |
| public final class UVector64 { |
| public UVector64() {} |
| public boolean isEmpty() { return length == 0; } |
| public int size() { return length; } |
| public long elementAti(int i) { return buffer[i]; } |
| public long[] getBuffer() { return buffer; } |
| public void addElement(long e) { |
| ensureAppendCapacity(); |
| buffer[length++] = e; |
| } |
| public void setElementAt(long elem, int index) { buffer[index] = elem; } |
| public void insertElementAt(long elem, int index) { |
| ensureAppendCapacity(); |
| System.arraycopy(buffer, index, buffer, index + 1, length - index); |
| buffer[index] = elem; |
| ++length; |
| } |
| public void removeAllElements() { |
| length = 0; |
| } |
| |
| private void ensureAppendCapacity() { |
| if(length >= buffer.length) { |
| int newCapacity = buffer.length <= 0xffff ? 4 * buffer.length : 2 * buffer.length; |
| long[] newBuffer = new long[newCapacity]; |
| System.arraycopy(buffer, 0, newBuffer, 0, length); |
| buffer = newBuffer; |
| } |
| } |
| private long[] buffer = new long[32]; |
| private int length = 0; |
| } |