Home | History | Annotate | Download | only in coll
      1 //  2016 and later: Unicode, Inc. and others.
      2 // License & terms of use: http://www.unicode.org/copyright.html#License
      3 /*
      4  *******************************************************************************
      5  * Copyright (C) 2014, International Business Machines Corporation and
      6  * others. All Rights Reserved.
      7  *******************************************************************************
      8  *
      9  * created on: 2014feb10
     10  * created by: Markus W. Scherer
     11  */
     12 package com.ibm.icu.impl.coll;
     13 
     14 // TODO: There must be a Java class for a growable array of longs without auto-boxing to Long?!
     15 // Keep the API parallel to the C++ version for ease of porting. Port methods only as needed.
     16 // If & when we start using something else, we might keep this as a thin wrapper for porting.
     17 public final class UVector64 {
     18     public UVector64() {}
     19     public boolean isEmpty() { return length == 0; }
     20     public int size() { return length; }
     21     public long elementAti(int i) { return buffer[i]; }
     22     public long[] getBuffer() { return buffer; }
     23     public void addElement(long e) {
     24         ensureAppendCapacity();
     25         buffer[length++] = e;
     26     }
     27     public void setElementAt(long elem, int index) { buffer[index] = elem; }
     28     public void insertElementAt(long elem, int index) {
     29         ensureAppendCapacity();
     30         System.arraycopy(buffer, index, buffer, index + 1, length - index);
     31         buffer[index] = elem;
     32         ++length;
     33     }
     34     public void removeAllElements() {
     35         length = 0;
     36     }
     37 
     38     private void ensureAppendCapacity() {
     39         if(length >= buffer.length) {
     40             int newCapacity = buffer.length <= 0xffff ? 4 * buffer.length : 2 * buffer.length;
     41             long[] newBuffer = new long[newCapacity];
     42             System.arraycopy(buffer, 0, newBuffer, 0, length);
     43             buffer = newBuffer;
     44         }
     45     }
     46     private long[] buffer = new long[32];
     47     private int length = 0;
     48 }
     49