2012-11-05 2 views
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    
    } 

모든 것은 내가 현재 위치를 증가 후까지 벌금과 멋쟁이 작동을 다른 항목을 추가하려고 :

enter image description here

여기서 I는 항목 "first"와 현재 위치 (_current) 증가를 첨가.

enter image description here

나는 항목 "third"을 추가하지만, 현재 위치, 그것을 선언을 접근과 이용을 증가 이외의 _current 등 다른 코드는 전혀 없다 0으로 재설정됩니다. 세계에서 어떤 일이 일어나고 있습니까? BufferItem<T>의 코드는 다음과 같습니다.

public class BufferItem<T> 
{ 
    public int Age = 0; 
    public T Item; 

    public BufferItem(T item) 
    { 
     Item = item; 
    } 
} 
+0

전체 구현을 표시 할 수 있습니까? 이 코드가 실행되는 전체 컨텍스트없이 어떤 일이 벌어지고 있는지 알기는 어렵습니다. –

+0

CircularBuffer 객체를이 프로세스의 어딘가에서 다시 인스턴스화합니까? 그러면 '_ 현재'가 0으로 재설정됩니다. – GraphicsMuncher

+0

@SimonWhitehead 나는이 게시물을 편집했습니다. 링크가 맨 위에 있습니다. – 3aw5TZetdf

답변

1

클래스 메소드가 정상입니다. _current 변수도 올바르게 작동합니다. 문제는 CircularBuffer 클래스 외부에 있습니다. 이것이 어디에서 구현되는지, 문제의 CircularBuffer 객체는 어떤 식 으로든 재설정됩니다.

관련 문제