Skip to content

Commit

Permalink
Fix CircularBuffer
Browse files Browse the repository at this point in the history
  • Loading branch information
mbogoevici committed Jun 8, 2012
1 parent 1d4042a commit 9b331e3
Showing 1 changed file with 16 additions and 6 deletions.
Expand Up @@ -6,32 +6,42 @@

public class CircularBuffer<T> {

private List<T> buffer;
private T[] buffer;

private volatile int cursor = 0;

private final int capacity;

public CircularBuffer(int capacity) {
buffer = Collections.synchronizedList(new ArrayList<T>());
buffer = (T[]) new Object[capacity];
this.capacity = capacity;
}

public void add(T item) {
synchronized (buffer) {
buffer.add (cursor++,item);
buffer[(cursor++)%capacity] = item;

}
}

public List<T> getContents() {
List<T> returnedItems = new ArrayList<T>();
synchronized (buffer) {
if (cursor > capacity) {
List<T> returnedItems = buffer.subList(cursor % capacity, capacity);
returnedItems.addAll(buffer.subList(0, cursor % capacity));
for (int i= cursor % capacity; i<capacity; i++) {
returnedItems.add(buffer[i]);
}
for (int i= 0; i<cursor % capacity; i++) {
returnedItems.add(buffer[i]);
}

return returnedItems;
} else {
return buffer.subList(0, cursor);
for (int i= 0; i<cursor; i++) {
returnedItems.add(buffer[i]);
}
}
}
return returnedItems;
}
}

0 comments on commit 9b331e3

Please sign in to comment.