我正在尝试在 C#中创建自己的循环缓冲区。我正在使用计数器来跟踪需要插入下一个项目的位置。这是完整代码的链接,这是执行此操作的(简化)代码:
public class CircularBuffer<T>
{
private bool _isFull = false;
private int _size;
private int _current = 0;
private BufferItem<T>[] _buffer;
public CircularBuffer(int size)
{
_size = size;
_buffer = new BufferItem<T>[size];
}
public void Insert(T value)
{
BufferItem<T> item = new BufferItem<T>(value);
//Removed code to check if the buffer is full, if so over-write the oldest item
//and don't insert at the current position
_buffer[_current] = item;
_isFull = (_current == (_size - 1));
_current++;
//Age all items
}
在我增加当前位置并尝试添加另一个项目之前,这一切都很好而且很花哨:
在这里,我添加了项目"first"
,并且当前位置 ( _current
) 增加了。
我添加了该项目,但当前位置被重置为 0。除了声明它、访问它和递增它之外,"third"
绝对没有其他代码。_current
世界上到底发生了什么?这是代码BufferItem<T>
:
public class BufferItem<T>
{
public int Age = 0;
public T Item;
public BufferItem(T item)
{
Item = item;
}
}