/**
* 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();
}
LyoqCiAqIEludGVyZmFjZXMgZm9yIGlucHV0IGFuZCBvdXRwdXQKICovCmludGVyZmFjZSBJbnB1dENvbm5lY3RvcihUOkNvbXBhcmFibGUhVCxWOldyaXRhYmxlKSB7CglhbGlhcyBDb21wYXJhYmxlIVQgSzsKCXB1YmxpYyB2b2lkIGluaXRpYWxpemUoKTsKCXB1YmxpYyB2b2lkIG9wZW4oKTsKCXB1YmxpYyB2b2lkIG5leHQoSyBrZXksIFYgdmFsKTsKCXB1YmxpYyB2b2lkIGNsb3NlKCk7Cn0KCmludGVyZmFjZSBSZWZlcmVuY2VDb25uZWN0b3IoSywgVikgewoJcHVibGljIHZvaWQgaW5pdGlhbGl6ZSgpOwoJcHVibGljIHZvaWQgb3BlbigpOwoJcHVibGljIFYgZ2V0KEsga2V5KTsKCXB1YmxpYyB2b2lkIGNsb3NlKCk7Cn0KCmludGVyZmFjZSBPdXRwdXRDb25uZWN0b3IgewoJcHVibGljIHZvaWQgaW5pdGlhbGl6ZSgpOwoJcHVibGljIHZvaWQgb3BlbigpOwoJcHVibGljIHZvaWQgY29sbGVjdChDb21wYXJhYmxlIGtleSwgV3JpdGFibGUgdmFsKTsKCXB1YmxpYyB2b2lkIGNsb3NlKCk7Cn0gCgovKioKICogV3JpdGFibGUgSW50ZXJmYWNlCiAqLwppbnRlcmZhY2UgV3JpdGFibGUgewoJcHVibGljIFdyaXRhYmxlIGdldEluc3RhbmNlKCk7CglwdWJsaWMgdm9pZCBzZXJpYWxpemUoKTsKCXB1YmxpYyB2b2lkIGRlc2VyaWFsaXplKCk7CglwdWJsaWMgc3RyaW5nIHRvU3RyaW5nKCk7Cn0KLyoqCiAqIAogKi8KaW50ZXJmYWNlIENvbXBhcmFibGUoVCkgOiBXcml0YWJsZSB7CglwdWJsaWMgYm9vbCBjb21wYXJlKCk7Cn0=