Vector.java
上传用户:afrynkmhm
上传日期:2007-01-06
资源大小:1262k
文件大小:3k
源码类别:

编译器/解释器

开发平台:

Others

  1. package antlr.collections.impl;
  2. /* ANTLR Translator Generator
  3.  * Project led by Terence Parr at http://www.jGuru.com
  4.  * Software rights: http://www.antlr.org/RIGHTS.html
  5.  *
  6.  * $Id: //depot/code/org.antlr/release/antlr-2.7.0/antlr/collections/impl/Vector.java#1 $
  7.  */
  8. import java.util.Enumeration;
  9. import java.util.NoSuchElementException;
  10. import antlr.collections.Enumerator;
  11. public class Vector implements Cloneable {
  12. protected Object[] data;
  13. protected int lastElement = -1;
  14. public Vector() {
  15. this(10);
  16. }
  17. public Vector(int size) {
  18. data = new Object[size];
  19. }
  20. public synchronized void appendElement(Object o) {
  21. ensureCapacity(lastElement+2);
  22. data[++lastElement] = o;
  23. }
  24. /**
  25.  * Returns the current capacity of the vector.
  26.  */
  27. public int capacity() {
  28. return data.length;
  29. }
  30. public Object clone() {
  31.     Vector v=null;
  32.     try {
  33.     v = (Vector)super.clone();
  34.     }
  35.     catch (CloneNotSupportedException e) {
  36.     System.err.println("cannot clone Vector.super");
  37.     return null;
  38.     }
  39.     v.data = new Object[size()];
  40.     System.arraycopy(data, 0, v.data, 0, size());
  41.     return v;
  42. }
  43. /**
  44.  * Returns the element at the specified index.
  45.  * @param index the index of the desired element
  46.  * @exception ArrayIndexOutOfBoundsException If an invalid
  47.  * index was given.
  48.  */
  49. public synchronized Object elementAt(int i) {
  50. if (i >= data.length) {
  51. throw new ArrayIndexOutOfBoundsException(i + " >= " + data.length);
  52. }
  53. if ( i<0 ) {
  54. throw new ArrayIndexOutOfBoundsException(i + " < 0 ");
  55. }
  56. return data[i];
  57. }
  58. public synchronized Enumeration elements() {
  59. return new VectorEnumerator(this);
  60. }
  61. public synchronized void ensureCapacity(int minIndex) {
  62. if ( minIndex+1 > data.length ) {
  63. Object oldData[] = data;
  64. int n = data.length * 2;
  65. if ( minIndex+1 > n ) {
  66. n = minIndex+1;
  67. }
  68. data = new Object[n];
  69. System.arraycopy(oldData, 0, data, 0, oldData.length);
  70. }
  71. }
  72. public synchronized boolean removeElement(Object o) {
  73. // find element
  74. int i;
  75. for (i=0; i<=lastElement && data[i]!=o; i++) {
  76. ;
  77. }
  78. if ( i<=lastElement ) { // if found it
  79. data[i] = null; // kill ref for GC
  80. int above = lastElement - i;
  81. if (above > 0) {
  82. System.arraycopy(data, i + 1, data, i, above);
  83. }
  84. lastElement--;
  85. return true;
  86. }
  87. else {
  88. return false;
  89. }
  90. }
  91. public synchronized void setElementAt(Object obj, int i) {
  92. if (i >= data.length) {
  93. throw new ArrayIndexOutOfBoundsException(i + " >= " + data.length);
  94. }
  95. data[i] = obj;
  96. // track last element in the vector so we can append things
  97. if ( i>lastElement ) {
  98. lastElement = i;
  99. }
  100. }
  101. // return number of slots in the vector; e.g., you can set
  102. // the 30th element and size() will return 31.
  103. public int size() {
  104. return lastElement+1;
  105. }
  106. }