src/main/java/org/organicdesign/fp/collections/PersistentVector.java
private static Node doAssoc(int level, Node node, int i, Object val) {
        Node ret = new Node(node.edit, node.array.clone());
        if (level == 0) {
            ret.array[i & LOW_BITS] = val;
        } else {
            int subidx = (i >>> level) & LOW_BITS;
            ret.array[subidx] = doAssoc(level - NODE_LENGTH_POW_2,
                                        (Node) node.array[subidx],
                                        i, val);
        }
        return ret;
    }
private static Node doAssoc(int level, Node node, int i, Object val) {
        Node ret = new Node(node.edit, node.array.clone());
        if (level == 0) {
            ret.array[i & LOW_BITS] = val;
        } else {
            int subidx = (i >>> level) & LOW_BITS;
            ret.array[subidx] = doAssoc(level - NODE_LENGTH_POW_2,
                                        (Node) node.array[subidx],
                                        i, val);
        }
        return ret;
    }
private static Node doAssoc ( int level , Node node , int i , Object val ) { Node ret = new Node ( node . edit , node . array . clone ( ) ) ; if ( level == 0 ) { ret . array [ i & LOW_BITS ] = val ; } else { int subidx = ( i >>> level ) & LOW_BITS ; ret . array [ subidx ] = doAssoc ( level - NODE_LENGTH_POW_2 , ( Node ) node . array [ subidx ] , i , val ) ; } return ret ; }
}
}