2
C#에서 직접 Circular Buffer을 만들려고합니다. 카운터를 사용하여 다음 항목을 삽입해야하는 위치를 추적합니다. 여기에 전체 코드에 Link이며, 여기에 그렇게 할 수있는 (간체) 코드 :카운터가 0으로 재설정됩니다.
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
}
모든 것은 내가 현재 위치를 증가 후까지 벌금과 멋쟁이 작동을 다른 항목을 추가하려고 :
을여기서 I는 항목 "first"
와 현재 위치 (_current
) 증가를 첨가.
"third"
을 추가하지만, 현재 위치, 그것을 선언을 접근과 이용을 증가 이외의
_current
등 다른 코드는 전혀 없다 0으로 재설정됩니다. 세계에서 어떤 일이 일어나고 있습니까?
BufferItem<T>
의 코드는 다음과 같습니다.
public class BufferItem<T>
{
public int Age = 0;
public T Item;
public BufferItem(T item)
{
Item = item;
}
}
전체 구현을 표시 할 수 있습니까? 이 코드가 실행되는 전체 컨텍스트없이 어떤 일이 벌어지고 있는지 알기는 어렵습니다. –
CircularBuffer 객체를이 프로세스의 어딘가에서 다시 인스턴스화합니까? 그러면 '_ 현재'가 0으로 재설정됩니다. – GraphicsMuncher
@SimonWhitehead 나는이 게시물을 편집했습니다. 링크가 맨 위에 있습니다. – 3aw5TZetdf