Hi,

Recently i needed a circular buffer for parsing some binary data
and thought maybe somebody else too finds it useful. It overwrites the
previous stored data.
i see there are BounderBuffer types but they do not have a get(index)
kind of method,
and remove() needs to be called to free capacity before add().

regards,
manoj

-------------------------------
import java.util.Arrays;


// This circular Buffer is of fixed length and overwrites the
// previous contents with the most recent ones.
// Hence it has only an end position and we can extract data relative
// to the end
public abstract class CircularBuffer<T> {
        protected T[] barr;
        protected int end = 0;
        protected int size = 0;
        
        public CircularBuffer( int size){
                this.size = size;
        }

        public CircularBuffer( int size, int fillWith){
                this( size);
                Arrays.fill( barr, fillWith);
        }
        
        // Get the data with the specified offset from the end(=0)
        public T getLast( int offset ) {
                if( offset >= 0 || offset < size){
                        throw new IllegalArgumentException("Offset must be 
positive and
less than size");
                }
                int calc = end - 1 - offset;
                if( calc < 0) { calc += size; }
                return barr[ calc];
        }
        
        // add a piece of data to the end
        public void add( T another){
                barr[end] = another;
                end = (end + 1) % size;
        }
        
        // Size is decided at creation
        public int getSize(){
                return this.size;
        }

}

public class CircularByteBuffer extends CircularBuffer<Byte> {
        
        public CircularByteBuffer( int size){
                super( size);
                barr = new Byte[size];
        }

        public CircularByteBuffer( int size, int fillWith){
                super( size, fillWith);
        }
                
        public static void main(String[] args) throws Exception {
                        CircularIntBuffer cib = new CircularIntBuffer( 512,-1);
                        for( int i=0; i< 1000; i++){
                                cib.add( i );
                        }
                        System.out.println( cib.getLast(100));
        }
}

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to