You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

LongVector.java 1.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /*
  2. * Javassist, a Java-bytecode translator toolkit.
  3. * Copyright (C) 1999- 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. * or the Apache License Version 2.0.
  10. *
  11. * Software distributed under the License is distributed on an "AS IS" basis,
  12. * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  13. * for the specific language governing rights and limitations under the
  14. * License.
  15. */
  16. package javassist.bytecode;
  17. final class LongVector {
  18. static final int ASIZE = 128;
  19. static final int ABITS = 7; // ASIZE = 2^ABITS
  20. static final int VSIZE = 8;
  21. private ConstInfo[][] objects;
  22. private int elements;
  23. public LongVector() {
  24. objects = new ConstInfo[VSIZE][];
  25. elements = 0;
  26. }
  27. public LongVector(int initialSize) {
  28. int vsize = ((initialSize >> ABITS) & ~(VSIZE - 1)) + VSIZE;
  29. objects = new ConstInfo[vsize][];
  30. elements = 0;
  31. }
  32. public int size() { return elements; }
  33. public int capacity() { return objects.length * ASIZE; }
  34. public ConstInfo elementAt(int i) {
  35. if (i < 0 || elements <= i)
  36. return null;
  37. return objects[i >> ABITS][i & (ASIZE - 1)];
  38. }
  39. public void addElement(ConstInfo value) {
  40. int nth = elements >> ABITS;
  41. int offset = elements & (ASIZE - 1);
  42. int len = objects.length;
  43. if (nth >= len) {
  44. ConstInfo[][] newObj = new ConstInfo[len + VSIZE][];
  45. System.arraycopy(objects, 0, newObj, 0, len);
  46. objects = newObj;
  47. }
  48. if (objects[nth] == null)
  49. objects[nth] = new ConstInfo[ASIZE];
  50. objects[nth][offset] = value;
  51. elements++;
  52. }
  53. }