コード例 #1
0
        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));
            }
        }
コード例 #2
0
        static public PersistentVector create(IReduceInit items)
        {
            TransientVector ret = (TransientVector)EMPTY.asTransient();

            items.reduce(_transientVectorConj, ret);
            return((PersistentVector)ret.persistent());
        }