dk.alexandra.fresco.framework.NativeProtocol Maven / Gradle / Ivy
package dk.alexandra.fresco.framework;
import dk.alexandra.fresco.framework.network.Network;
import dk.alexandra.fresco.framework.sce.resources.ResourcePool;
/**
* Native protocols should be implemented by the protocol suites developer. They are specific to a
* single protocol suite and describes how to do a basic operation such as addition or XOR. They can
* also be more advanced if the protocol suite has a specifically good way to do e.g. comparison.
*
* @param The output type produced
* @param The resource pool type
*/
public interface NativeProtocol extends
DRes {
enum EvaluationStatus {
IS_DONE, HAS_MORE_ROUNDS
}
/**
* One round of evaluating the gate. Each round consist of only local computation.
*
* @param round Number of current round, starting with round 0.
* @param resourcePool available resources can be found here. This also includes a threadpool if
* needed. It is advised to use only resources found here instead of creating them
* yourself. It is strongly advised not to use the network found here, but instead use the
* protocol network.
* @param network A protocol's view of the network. This network does not immediately send data,
* but queues it for later use by the one calling this function.
* @return HAS_MORE_ROUNDS if there are more rounds, i.e., if evaluate needs to be called again,
* IS_DONE if this is the last round.
*/
EvaluationStatus evaluate(int round, ResourcePoolT resourcePool, Network network);
}