public static <E> SetFactory<E> cow(SetFactory<E> underSetFact) {
	return new jpaul.DataStructs.COWSetFactory<E>(underSetFact);
    }
public static < E > SetFactory < E > cow ( SetFactory < E > underSetFact ) { return new jpaul . DataStructs . COWSetFactory < E > ( underSetFact ) ; }
Returns a set factory that generates "copy-on-write" (COW)
sets.  A COW set shares its representation (also a set) with
other COW sets, until a mutation occurs.  At that moment, the
COW set makes a private, exclusive copy of its underlying
representation, and mutates that copy.

<p>The internal representation of a COW set maintains a
"sharing" counter to identify cases when the representation is
not shared with anyone (and hence, no cloning is necessary
before a mutation).

<p>Cloning a COW set is a constant time operation.  COW sets
are good when it is hard to determine statically whether a
clone of a set will be mutated: they delay the real cloning
until the first mutation (if any).

@param underSetFact Set factory for generating the sets used
in the representation of the COW sets.