package com.codecademy.eventhub.list;
import java.util.Arrays;
public class MemIdList implements IdList {
private long[] list;
private int numRecords;
public MemIdList(long[] list, int numRecords) {
this.list = list;
this.numRecords = numRecords;
}
@Override
public int getStartOffset(long eventId) {
int offset = Arrays.binarySearch(list, 0, numRecords, eventId);
if (offset < 0) {
offset = -offset - 1;
}
return offset;
}
@Override
public void add(long id) {
if (list.length == 0) {
list = new long[1];
}
if (numRecords == list.length) {
long[] newList = new long[list.length * 2];
System.arraycopy(list, 0, newList, 0, list.length);
list = newList;
}
list[numRecords++] = id;
}
@Override
public Iterator subList(int start, int maxRecords) {
int end = start + maxRecords;
end = Math.min(end < 0 ? Integer.MAX_VALUE : end, numRecords);
return new Iterator(list, start, end);
}
@Override
public Iterator iterator() {
return new Iterator(list, 0, numRecords);
}
@Override
public void close() {}
public long[] getList() {
return Arrays.copyOf(list, numRecords);
}
public static class Iterator implements IdList.Iterator {
private final long[] list;
private final int start;
private final int end;
private int offset;
public Iterator(long[] list, int start, int end) {
this.list = list;
this.start = start;
this.end = end;
this.offset = 0;
}
@Override
public boolean hasNext() {
return start + offset < end;
}
@Override
public long next() {
return list[start + (offset++)];
}
}
}