Home | History | Annotate | Download | only in bytecode
      1 /*
      2  * Javassist, a Java-bytecode translator toolkit.
      3  * Copyright (C) 1999-2007 Shigeru Chiba. All Rights Reserved.
      4  *
      5  * The contents of this file are subject to the Mozilla Public License Version
      6  * 1.1 (the "License"); you may not use this file except in compliance with
      7  * the License.  Alternatively, the contents of this file may be used under
      8  * the terms of the GNU Lesser General Public License Version 2.1 or later.
      9  *
     10  * Software distributed under the License is distributed on an "AS IS" basis,
     11  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
     12  * for the specific language governing rights and limitations under the
     13  * License.
     14  */
     15 
     16 package javassist.bytecode;
     17 
     18 final class LongVector {
     19     static final int ASIZE = 128;
     20     static final int ABITS = 7;  // ASIZE = 2^ABITS
     21     static final int VSIZE = 8;
     22     private ConstInfo[][] objects;
     23     private int elements;
     24 
     25     public LongVector() {
     26         objects = new ConstInfo[VSIZE][];
     27         elements = 0;
     28     }
     29 
     30     public LongVector(int initialSize) {
     31         int vsize = ((initialSize >> ABITS) & ~(VSIZE - 1)) + VSIZE;
     32         objects = new ConstInfo[vsize][];
     33         elements = 0;
     34     }
     35 
     36     public int size() { return elements; }
     37 
     38     public int capacity() { return objects.length * ASIZE; }
     39 
     40     public ConstInfo elementAt(int i) {
     41         if (i < 0 || elements <= i)
     42             return null;
     43 
     44         return objects[i >> ABITS][i & (ASIZE - 1)];
     45     }
     46 
     47     public void addElement(ConstInfo value) {
     48         int nth = elements >> ABITS;
     49         int offset = elements & (ASIZE - 1);
     50         int len = objects.length;
     51         if (nth >= len) {
     52             ConstInfo[][] newObj = new ConstInfo[len + VSIZE][];
     53             System.arraycopy(objects, 0, newObj, 0, len);
     54             objects = newObj;
     55         }
     56 
     57         if (objects[nth] == null)
     58             objects[nth] = new ConstInfo[ASIZE];
     59 
     60         objects[nth][offset] = value;
     61         elements++;
     62     }
     63 }
     64