116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giropackage org.bouncycastle.util;
216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro
3bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro/**
4bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro * Interface for Memoable objects. Memoable objects allow the taking of a snapshot of their internal state
5bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro * via the copy() method and then reseting the object back to that state later using the reset() method.
6bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro */
716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giropublic interface Memoable
816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro{
916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    /**
1016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro     * Produce a copy of this object with its configuration and in its current state.
1153b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro     * <p>
1216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro     * The returned object may be used simply to store the state, or may be used as a similar object
1316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro     * starting from the copied state.
1416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro     */
15bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro    Memoable copy();
1616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro
1716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    /**
1816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro     * Restore a copied object state into this object.
1953b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro     * <p>
2016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro     * Implementations of this method <em>should</em> try to avoid or minimise memory allocation to perform the reset.
2116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro     *
2216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro     * @param other an object originally {@link #copy() copied} from an object of the same type as this instance.
2316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro     * @throws ClassCastException if the provided object is not of the correct type.
2416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro     * @throws MemoableResetException if the <b>other</b> parameter is in some other way invalid.
2516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro     */
26bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro    void reset(Memoable other);
2716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro}
28