package info.kghost.android.openvpn; import java.util.Iterator; import android.os.Parcel; import android.os.Parcelable; class LogQueue implements Parcelable, Iterable<String> { private String[] buffer = null; private int start = 0; private int end = 0; private final int size; public LogQueue(int size) { this.size = size + 1; buffer = new String[size+1]; } private LogQueue(Parcel in) { size = in.readInt(); start = in.readInt(); end = in.readInt(); buffer = new String[size]; in.readStringArray(buffer); } private int advance(int n) { return (n + 1) % size; } private int advanceEnd() { int o = end; end = advance(end); if (start == end) start = advance(start); return o; } public boolean isEmpty() { return start == end; } public boolean isFull() { return start == advance(end); } public void add(String s) { buffer[advanceEnd()] = s; } private class IterImpl implements Iterator<String> { private int current; public IterImpl() { current = start; } @Override public boolean hasNext() { return current != end; } @Override public String next() { String s = buffer[current]; current = advance(current); return s; } @Override public void remove() { throw new RuntimeException("Not Implemented"); } } @Override public Iterator<String> iterator() { return new IterImpl(); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(size); dest.writeInt(start); dest.writeInt(end); dest.writeStringArray(buffer); } public static final Parcelable.Creator<LogQueue> CREATOR = new Parcelable.Creator<LogQueue>() { @Override public LogQueue createFromParcel(Parcel in) { return new LogQueue(in); } @Override public LogQueue[] newArray(int size) { return new LogQueue[size]; } }; }