/**
 * Interfaces for input and output
 */
interface InputConnector(T:Comparable!T,V:Writable) {
	alias Comparable!T K;
	public void initialize();
	public void open();
	public void next(K key, V val);
	public void close();
}

interface ReferenceConnector(K, V) {
	public void initialize();
	public void open();
	public V get(K key);
	public void close();
}

interface OutputConnector {
	public void initialize();
	public void open();
	public void collect(Comparable key, Writable val);
	public void close();
} 

/**
 * Writable Interface
 */
interface Writable {
	public Writable getInstance();
	public void serialize();
	public void deserialize();
	public string toString();
}
/**
 * 
 */
interface Comparable(T) : Writable {
	public bool compare();
}