@ SuppressWarnings ( "unchecked" ) @ Override public PersistentVector < E > append ( E val ) { //room in tail? // if(tail.length < MAX_NODE_LENGTH) if ( size - tailoff ( ) < MAX_NODE_LENGTH ) { E [ ] newTail = ( E [ ] ) new Object [ tail . length + 1 ] ; System . arraycopy ( tail , 0 , newTail , 0 , tail . length ) ; newTail [ tail . length ] = val ; return new PersistentVector <> ( size + 1 , shift , root , newTail ) ; } //full tail, push into tree Node newroot ; Node tailnode = new Node ( root . edit , tail ) ; int newshift = shift ; //overflow root? if ( ( size >>> NODE_LENGTH_POW_2 ) > ( 1 << shift ) ) { newroot = new Node ( root . edit ) ; newroot . array [ 0 ] = root ; newroot . array [ 1 ] = newPath ( root . edit , shift , tailnode ) ; newshift += NODE_LENGTH_POW_2 ; } else { newroot = pushTail ( shift , root , tailnode ) ; } return new PersistentVector <> ( size + 1 , newshift , newroot , ( E [ ] ) new Object [ ] { val } ) ; }
Inserts a new item at the end of the Vecsicle .