static public PersistentVector create(IReduceInit items) { TransientVector ret = (TransientVector)EMPTY.asTransient(); items.reduce(_transientVectorConj, ret); return((PersistentVector)ret.persistent()); }
static public PersistentVector create(ISeq items) { ITransientCollection ret = EMPTY.asTransient(); for (; items != null; items = items.next()) { ret = ret.conj(items.first()); } return((PersistentVector)ret.persistent()); }
static public PersistentVector create(ISeq items) { Object[] arr = new Object[32]; int i = 0; for (; items != null && i < 32; items = items.next()) { arr[i++] = items.first(); } if (items != null) { // >32, construct with array directly PersistentVector start = new PersistentVector(32, 5, EmptyNode, arr); TransientVector ret = (TransientVector)start.asTransient(); for (; items != null; items = items.next()) { ret = (TransientVector)ret.conj(items.first()); } return((PersistentVector)ret.persistent()); } else if (i == 32) { // exactly 32, skip copy return(new PersistentVector(32, 5, EmptyNode, arr)); } else { // <32, copy to minimum array and construct Object[] arr2 = new Object[i]; Array.Copy(arr, 0, arr2, 0, i); return(new PersistentVector(i, 5, EmptyNode, arr2)); } }
public static PersistentVector create(ISeq items) { Object[] arr = new Object[32]; int i = 0; for (; items != null && i < 32; items = items.next()) arr[i++] = items.first(); if (items != null) { // >32, construct with array directly PersistentVector start = new PersistentVector(32, 5, EmptyNode, arr); TransientVector ret = (TransientVector)start.asTransient(); for (; items != null; items = items.next()) ret = (TransientVector)ret.conj(items.first()); return (PersistentVector)ret.persistent(); } else if (i == 32) { // exactly 32, skip copy return new PersistentVector(32, 5, EmptyNode, arr); } else { // <32, copy to minimum array and construct Object[] arr2 = new Object[i]; Array.Copy(arr, 0, arr2, 0, i); return new PersistentVector(i, 5, EmptyNode, arr2); } }