package com.datascience.core.results;
import com.datascience.core.base.LObject;
import com.datascience.core.base.Worker;
import java.util.Collection;
import java.util.Map;
/**
* @Author: konrad
* T - object class
* U - datum results class
* V - worker results class
*/
public interface IResults<T, U, V> {
Map<Worker, V> getWorkerResults(Collection<Worker> workers);
Map<LObject<T>, U> getDatumResults(Collection<LObject<T>> objects);
U getOrCreateDatumResult(LObject<T> obj);
U uncheckedGetDatumResults(LObject<T> obj);
U getDatumResult(LObject<T> obj);
boolean hasDatumResult(LObject<T> obj);
void addDatumResult(LObject<T> obj, U result);
V getOrCreateWorkerResult(Worker wor);
V uncheckedGetWorkerResult(Worker worker);
V createEmptyWorkerResult(Worker wor);
V getWorkerResult(Worker worker);
boolean hasWorkerResult(Worker worker);
void addWorkerResult(Worker worker, V result);
void setNotifyEnabled(boolean enabled);
boolean isNotifyEnabled();
void addNewResultsListener(INewResultsListener<T, U, V> newResultsListener);
void notifyAllNewResults();
}