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)); } }
static public PersistentVector create(IReduceInit items) { TransientVector ret = (TransientVector)EMPTY.asTransient(); items.reduce(_transientVectorConj, ret); return((PersistentVector)ret.persistent()); }