
/**
 * Represent a strand for the shotgun program
 * @author Owen Astrachan
 *
 */
public interface IStrand {

    /**
     * Return the name of this strand.
     * @return the strand's name
     */
    public String getName();
    
    /**
     * Returns a string form of the strand's sequence
     * @return the sequence for this strand
     */
    public String getSequence();
    
    /**
     * Returns true if this strand wholly contains the other strand,
     * and returns false otherise
     * @param other the strand checked for containment
     * @return true iff this strand contains other
     */
    public boolean contains(IStrand other);
    
    /**
     * Determine if this strand overlaps with another strand within
     * a specific threshold. If so, return the strand resulting from the
     * merge --- the returned strand has a name formed from the names of
     * the merged strands.
     * @param other strand tested for overlap with this strand
     * @param threshold specifies how large a match is valid for merging
     * @return a new strand resulting from the merge, or null if no merge possible
     */
    public IStrand merge(IStrand other, int threshold);
}
