RingBuffer.java :  » UnTagged » ba10-bsha-1 » ch » zhaw » ba10_bsha_1 » Android Open Source

Android Open Source » UnTagged » ba10 bsha 1 
ba10 bsha 1 » ch » zhaw » ba10_bsha_1 » RingBuffer.java
package ch.zhaw.ba10_bsha_1;


/**
 * Implementation of a ring buffer.
 *
 * @author Julian Hanhart, Dominik Giger
 * @param <Type>
 */
public class RingBuffer<Type> {

  
  //---------------------------------------------------------------------------
  // Attributes
  //---------------------------------------------------------------------------

  
  private Object[] slots;
  private int elementCount;
  private int readCursor;
  private int writeCursor;

  
  //---------------------------------------------------------------------------
  // Constructor
  //---------------------------------------------------------------------------

  
  public RingBuffer(int size) {
    if (size > 0) {
      slots = new Object[size];
      elementCount = 0;
      readCursor   = 0;
      writeCursor  = 0;
    } else {
      slots = null;
      elementCount = -1;
      readCursor   = -1;
      writeCursor  = -1;
    }
  }
  

  //---------------------------------------------------------------------------
  // Getter-methods
  //---------------------------------------------------------------------------

  
  public boolean isEmpty() {
    return (elementCount < 1);
  }
  
  public boolean isFull() {
    return (elementCount == slots.length);
  }
  
  public int getElementCount() {
    return elementCount;
  }


  //---------------------------------------------------------------------------
  // Buffer-management methods
  //---------------------------------------------------------------------------

  
  /**
   * Get next element in buffer
   */
  @SuppressWarnings("unchecked")
  public Type get() {
    Type result = (Type) slots[readCursor];
    if (slots[readCursor] != null) {
      slots[readCursor] = null;
      readCursor = (readCursor + 1) % slots.length;
      elementCount--;
    }
    return result;
  }
  
  /**
   * Add object to the buffer (is not added if buffer is full)
   * 
   * @param object
   */
  public void add(Type object) {
    if (elementCount != slots.length) {
      slots[writeCursor] = object;
      writeCursor = (writeCursor + 1) % slots.length;
      elementCount++;
    }
  }

  /**
   * Clear all elements from buffer
   */
  public void clear() {
    for (int i = 0; i < slots.length; i++) {
      slots[i] = null;
    }
    elementCount = 0;
    readCursor   = 0;
    writeCursor  = 0;
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.