RingArray.java 768 B

1234567891011121314151617181920212223242526272829303132333435
  1. package me.km.snuviscript;
  2. public class RingArray<T> {
  3. private int length = 0;
  4. private int index = 0;
  5. private final T[] data;
  6. @SuppressWarnings("unchecked")
  7. public RingArray(int maxLength) {
  8. data = (T[]) new Object[maxLength];
  9. }
  10. public void add(T t) {
  11. data[index] = t;
  12. length = Math.min(length + 1, data.length);
  13. index = (index + 1) % data.length;
  14. }
  15. public int getLength() {
  16. return length;
  17. }
  18. public T get(int index) {
  19. if(index < 0 || index >= length) {
  20. return null;
  21. }
  22. index = (this.index - length + index + data.length) % data.length;
  23. return data[index];
  24. }
  25. public void clear() {
  26. index = 0;
  27. length = 0;
  28. }
  29. }