1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/javap/src/main/java/org/apidesign/javap/TypeArray.java Fri Dec 07 15:02:35 2012 +0100
1.3 @@ -0,0 +1,100 @@
1.4 +/*
1.5 + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
1.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
1.7 + *
1.8 + * This code is free software; you can redistribute it and/or modify it
1.9 + * under the terms of the GNU General Public License version 2 only, as
1.10 + * published by the Free Software Foundation. Oracle designates this
1.11 + * particular file as subject to the "Classpath" exception as provided
1.12 + * by Oracle in the LICENSE file that accompanied this code.
1.13 + *
1.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
1.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1.16 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
1.17 + * version 2 for more details (a copy is included in the LICENSE file that
1.18 + * accompanied this code).
1.19 + *
1.20 + * You should have received a copy of the GNU General Public License version
1.21 + * 2 along with this work; if not, write to the Free Software Foundation,
1.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
1.23 + *
1.24 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
1.25 + * or visit www.oracle.com if you need additional information or have any
1.26 + * questions.
1.27 + */
1.28 +
1.29 +package org.apidesign.javap;
1.30 +
1.31 +public class TypeArray {
1.32 + private static final int CAPACITY_INCREMENT = 16;
1.33 +
1.34 + private int[] types;
1.35 + private int size;
1.36 +
1.37 + public void add(final int newType) {
1.38 + ensureCapacity(size + 1);
1.39 + types[size++] = newType;
1.40 + }
1.41 +
1.42 + public void addAll(final int[] newTypes) {
1.43 + if (newTypes.length > 0) {
1.44 + ensureCapacity(size + newTypes.length);
1.45 + arraycopy(newTypes, 0, types, size, newTypes.length);
1.46 + size += newTypes.length;
1.47 + }
1.48 + }
1.49 +
1.50 + public void setAll(final int[] newTypes) {
1.51 + if (newTypes.length > 0) {
1.52 + ensureCapacity(newTypes.length);
1.53 + arraycopy(newTypes, 0, types, 0, newTypes.length);
1.54 + size = newTypes.length;
1.55 + } else {
1.56 + clear();
1.57 + }
1.58 + }
1.59 +
1.60 + public void setSize(final int newSize) {
1.61 + ensureCapacity(newSize);
1.62 + size = newSize;
1.63 + }
1.64 +
1.65 + public void clear() {
1.66 + size = 0;
1.67 + }
1.68 +
1.69 + public int getSize() {
1.70 + return size;
1.71 + }
1.72 +
1.73 + public int get(final int index) {
1.74 + return types[index];
1.75 + }
1.76 +
1.77 + private void ensureCapacity(final int minCapacity) {
1.78 + if ((minCapacity == 0)
1.79 + || (types != null) && (minCapacity <= types.length)) {
1.80 + return;
1.81 + }
1.82 +
1.83 + final int newCapacity =
1.84 + ((minCapacity + CAPACITY_INCREMENT - 1) / CAPACITY_INCREMENT)
1.85 + * CAPACITY_INCREMENT;
1.86 + final int[] newTypes = new int[newCapacity];
1.87 +
1.88 + if (size > 0) {
1.89 + arraycopy(types, 0, newTypes, 0, size);
1.90 + }
1.91 +
1.92 + types = newTypes;
1.93 + }
1.94 +
1.95 + // no System.arraycopy
1.96 + private void arraycopy(final int[] src, final int srcPos,
1.97 + final int[] dest, final int destPos,
1.98 + final int length) {
1.99 + for (int i = 0; i < length; ++i) {
1.100 + dest[destPos + i] = src[srcPos + i];
1.101 + }
1.102 + }
1.103 +}