/******************************************************************************
* *
* Copyright 2016 Subterranean Security *
* *
* Licensed under the Apache License, Version 2.0 (the "License"); *
* you may not use this file except in compliance with the License. *
* You may obtain a copy of the License at *
* *
* http://www.apache.org/licenses/LICENSE-2.0 *
* *
* Unless required by applicable law or agreed to in writing, software *
* distributed under the License is distributed on an "AS IS" BASIS, *
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
* See the License for the specific language governing permissions and *
* limitations under the License. *
* *
*****************************************************************************/
package com.subterranean_security.crimson.viewer.ui.common.components.piestat;
import java.awt.Point;
import java.util.ArrayList;
/**
* A modified RingBuffer for backing history in a pie stat chart
*/
public final class PieBuffer {
private Point[] elements = null;
private int offset = 0;
public PieBuffer(int size) {
elements = new Point[size];
}
public synchronized void add(Point e) {
// write the next element, potentially overwriting an old value
elements[offset] = e;
offset = (offset + 1) % elements.length;
}
public synchronized Point[] getElements() {
ArrayList<Point> val = new ArrayList<Point>();
for (int i = 0; i < elements.length; i++) {
if (elements[(offset + i) % elements.length] != null) {
val.add(elements[(offset + i) % elements.length]);
}
}
Point[] values = new Point[val.size()];
for (int i = 0; i < values.length; i++) {
values[i] = val.get(i);
}
return values;
}
public int getSize() {
return elements.length;
}
}