org.jcodec.common.LongArrayList Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jcodec Show documentation
Show all versions of jcodec Show documentation
Pure Java implementation of video/audio codecs and formats
package org.jcodec.common;
import static java.lang.System.arraycopy;
import java.util.Arrays;
/**
* This class is part of JCodec ( www.jcodec.org ) This software is distributed
* under FreeBSD License
*
* @author The JCodec project
*
*/
public class LongArrayList {
private static final int DEFAULT_GROW_AMOUNT = 128;
private long[] storage;
private int limit;
private int start;
private int growAmount;
public static LongArrayList createLongArrayList() {
return new LongArrayList(DEFAULT_GROW_AMOUNT);
}
public LongArrayList(int growAmount) {
this.growAmount = growAmount;
this.storage = new long[growAmount];
}
public long[] toArray() {
long[] result = new long[limit - start];
arraycopy(storage, start, result, 0, limit - start);
return result;
}
public void add(long val) {
if (limit > storage.length - 1) {
long[] ns = new long[storage.length + growAmount - start];
arraycopy(storage, start, ns, 0, storage.length - start);
storage = ns;
limit -= start;
start = 0;
}
storage[limit++] = val;
}
public void push(long id) {
this.add(id);
}
public long pop() {
if (limit <= start)
throw new IllegalStateException();
return storage[limit--];
}
public void set(int index, int value) {
storage[index + start] = value;
}
public long get(int index) {
return storage[index + start];
}
public long shift() {
if(start >= limit)
throw new IllegalStateException();
return storage[start++];
}
public void fill(int from, int to, int val) {
if (to > storage.length) {
long[] ns = new long[to + growAmount - start];
arraycopy(storage, start, ns, 0, storage.length - start);
storage = ns;
}
Arrays.fill(storage, from, to, val);
limit = Math.max(limit, to);
}
public int size() {
return limit - start;
}
public void addAll(long[] other) {
if (limit + other.length >= storage.length) {
long[] ns = new long[limit + growAmount + other.length - start];
arraycopy(storage, start, ns, 0, limit);
storage = ns;
}
arraycopy(other, 0, storage, limit, other.length);
limit += other.length;
}
public void clear() {
limit = 0;
start = 0;
}
public boolean contains(long needle) {
for (int i = start; i < limit; i++)
if (storage[i] == needle)
return true;
return false;
}
}