/*
* ome.util.mem.Copiable
*
* Copyright 2006 University of Dundee. All rights reserved.
* Use is subject to license terms supplied in LICENSE.txt
*/
package ome.util.mem;
/**
* Requires an implementing class to provide <i>deep</i> copies of its
* instances. More precisely, an invocation of the {@link #copy() copy} method,
* such as <code>y = x.copy()</code>, is required to return an object
* <code>y</code> for which the following conditions hold true:
* <ul>
* <li>The state of <code>y</code> is the same as the state of <code>x</code>.</li>
* <li>The state of any object <code>w</code> referenced by <code>y</code>
* is the same as the corresponding object referenced by <code>x</code>, and
* so on recursively for every object referenced by <code>w</code>.</li>
* <li>Any subsequent state change in <code>y</code> or, recursively, in any
* other object referenced by <code>y</code>, is not going to affect
* <code>x</code> or recursively, any other object referenced by
* <code>x</code>.</li>
* </ul>
* Note that a deep copy would satisfy the above conditions. However, a
* non-complete deep copy might comply with the above as well for example
* immutable objects don't need to be copied.
*
* @author Jean-Marie Burel <a
* href="mailto:j.burel@dundee.ac.uk">j.burel@dundee.ac.uk</a>
* @author <br>
* Andrea Falconi <a
* href="mailto:a.falconi@dundee.ac.uk"> a.falconi@dundee.ac.uk</a>
* @version 2.2 <small> (<b>Internal version:</b> $Revision$ $Date:
* 2005/06/09 15:01:57 $) </small>
* @since OME2.2
*/
public interface Copiable {
/**
* Makes a copy of this object. The implementation is required to stick to
* the copy semantics defined by this interface.
*
* @return The new object.
*/
public Object copy();
}