content: package edu.berkeley.nlp.lm.values;
  
  import edu.berkeley.nlp.lm.bits.BitList;
  import edu.berkeley.nlp.lm.bits.BitStream;
  import edu.berkeley.nlp.lm.util.Annotations.OutputParameter;
  
  public interface CompressibleValueContainer<V> extends ValueContainer<V>
  {
  	/**
  	 * Swaps values at offsets a and b.
  	 * 
  	 * @param a
  	 * @param b
  	 * @param ngramOrder
  	 */
  	public void swap(long a, long b, int ngramOrder);
  
  	/**
  	 * Compresses the value at the given offset into a list of bits.
  	 * 
  	 * @param offset
  	 * @param ngramOrder
  	 * @return
  	 */
  	public BitList getCompressed(long offset, int ngramOrder);
  
  	/**
  	 * Reads and decompresses from the bit stream bits.
  	 * 
  	 * @param bits
  	 * @param ngramOrder
  	 * @param justConsume
  	 *            If true, nothing is returned, and the function simply consumes
  	 *            the appropriate number of bits from the BitStream.
  	 * 
  	 * @return
  	 */
  	public void decompress(BitStream bits, int ngramOrder, boolean justConsume, @OutputParameter V outputVal);
  
  	public void clearStorageAfterCompression(int ngramOrder);
  
  }
  