/**
* Contains a set of immutable collection interfaces and wrapper implementations. Two versions of immutable collections
* are implemented:
*
* - A version, identified by Immutable.COPY, where the immutable collection can neither be changed by any object
* "using" the ImmutableCollection nor anymore by objects that have a pointer to the collection, as an internal
* (shallow) copy is made of the collection. This is the default implementation.
* - A version, identified by Immutable.WRAP, where the immutable collection can not be changed by any object "using"
* the ImmutableCollection, but it can still be changed by any object that has a pointer to the original collection that
* is "wrapped". Instead of a (shallow) copy of the collection, a pointer to the collection is stored.
*
*
* Copyright (c) 2016-2018 Delft University of Technology, Jaffalaan 5, 2628 BX Delft, the Netherlands. All rights
* reserved. See for project information
* https://simulation.tudelft.nl. The DSOL project is distributed under a three-clause BSD-style license, which can
* be found at
* https://simulation.tudelft.nl/dsol/3.0/license.html.
*
* @author Alexander Verbraeck
* @author Peter Knoppers
* @author Wouter Schakel
*/
package nl.tudelft.simulation.immutablecollections;