SFormsFastMapDirect () { SFormsFastMapDirect map = new SFormsFastMapDirect(false); map.size = size; FastSparseSet[][] mapelements = map.elements; int[][] mapnext = map.next; for (int i = 2; i >= 0; i--) { FastSparseSet<Integer>[] arr = elements[i]; int length = arr.length; if (length > 0) { int[] arrnext = next[i]; @SuppressWarnings("unchecked") FastSparseSet<Integer>[] arrnew = new FastSparseSet[length]; int[] arrnextnew = Arrays.copyOf(arrnext, length); mapelements[i] = arrnew; mapnext[i] = arrnextnew; int pointer = 0; do { FastSparseSet<Integer> set = arr[pointer]; if (set != null) { arrnew[pointer] = set.getCopy(); } pointer = arrnext[pointer]; } while (pointer != 0); } else { mapelements[i] = FastSparseSet.EMPTY_ARRAY; mapnext[i] = InterpreterUtil.EMPTY_INT_ARRAY; } } return map; }