package edu.berkeley.nlp.lm.values; import java.io.Serializable; import edu.berkeley.nlp.lm.map.NgramMap; import edu.berkeley.nlp.lm.util.Annotations.OutputParameter; /** * Manages storage of arbitrary values in an NgramMap * * @author adampauls * * @param <V> */ public interface ValueContainer<V> extends Serializable { /** * Adds a new value at the specified offset. * * @param ngramOrder * As always, ngramOrder is 0-based (0=unigram) * @param offset * @param contextOffset * @param word * @param val * @param suffixOffset * @return Whether or not the add was successful */ public boolean add(int[] ngram, int startPos, int endPos, int ngramOrder, long offset, long contextOffset, int word, V val, long suffixOffset, boolean ngramIsNew); /** * Sets internal storage for size for a particular n-gram order * * @param size * @param ngramOrder */ public void setSizeAtLeast(long size, int ngramOrder); /** * Creates a fresh value container for copying purposes. * * @return */ public ValueContainer<V> createFreshValues(long[] numNgramsForEachOrder); /** * Gets the value living at a particular offset. * * @param offset * @param ngramOrder * @return */ public void getFromOffset(long offset, int ngramOrder, @OutputParameter V outputVal); /** * Destructively sets internal storage from another object. * * @param other */ public void setFromOtherValues(ValueContainer<V> other); /** * Clear storage after an n-gram order is complete * * @param ngramOrder * @param size */ public void trimAfterNgram(int ngramOrder, long size); /** * Final clean up of storage. */ public void trim(); /** * Creates a fresh value of object (useful for passing as an output * parameter) * * @return */ public V getScratchValue(); /** * Initializes a value container with the map that contains it */ public void setMap(NgramMap<V> map); public void clearStorageForOrder(final int ngramOrder); public boolean storeSuffixoffsets(); public int numValueBits(int ngramOrder); }