private static void replaceSingleVar(Exprent parent, VarExprent var, Exprent dest, SSAUConstructorSparseEx ssau) { parent.replaceExprent(var, dest); // live sets SFormsFastMapDirect livemap = ssau.getLiveVarVersionsMap(new VarVersionPair(var)); Set<VarVersionPair> setVars = getAllVersions(dest); for (VarVersionPair varpaar : setVars) { VarVersionNode node = ssau.getSsuversions().nodes.getWithKey(varpaar); for (Iterator<Entry<Integer, FastSparseSet<Integer>>> itent = node.live.entryList().iterator(); itent.hasNext(); ) { Entry<Integer, FastSparseSet<Integer>> ent = itent.next(); Integer key = ent.getKey(); if (!livemap.containsKey(key)) { itent.remove(); } else { FastSparseSet<Integer> set = ent.getValue(); set.complement(livemap.get(key)); if (set.isEmpty()) { itent.remove(); } } } } }
private static void replaceSingleVar(Exprent parent, VarExprent var, Exprent dest, SSAUConstructorSparseEx ssau) { parent.replaceExprent(var, dest); // live sets SFormsFastMapDirect livemap = ssau.getLiveVarVersionsMap(new VarVersionPair(var)); HashSet<VarVersionPair> setVars = getAllVersions(dest); for (VarVersionPair varpaar : setVars) { VarVersionNode node = ssau.getSsuversions().nodes.getWithKey(varpaar); for (Iterator<Entry<Integer, FastSparseSet<Integer>>> itent = node.live.entryList().iterator(); itent.hasNext(); ) { Entry<Integer, FastSparseSet<Integer>> ent = itent.next(); Integer key = ent.getKey(); if (!livemap.containsKey(key)) { itent.remove(); } else { FastSparseSet<Integer> set = ent.getValue(); set.complement(livemap.get(key)); if (set.isEmpty()) { itent.remove(); } } } } }
public void complement(SFormsFastMapDirect map) { for (int i = 2; i >= 0; i--) { FastSparseSet<Integer>[] lstOwn = elements[i]; if (lstOwn.length == 0) { continue; } FastSparseSet<Integer>[] lstExtern = map.elements[i]; int[] arrnext = next[i]; int pointer = 0; do { FastSparseSet<Integer> first = lstOwn[pointer]; if (first != null) { if (pointer >= lstExtern.length) { break; } FastSparseSet<Integer> second = lstExtern[pointer]; if (second != null) { first.complement(second); if (first.isEmpty()) { lstOwn[pointer] = null; size--; changeNext(arrnext, pointer, pointer, arrnext[pointer]); } } } pointer = arrnext[pointer]; } while (pointer != 0); } }
public void intersection(SFormsFastMapDirect map) { for (int i = 2; i >= 0; i--) { FastSparseSet<Integer>[] lstOwn = elements[i]; if (lstOwn.length == 0) { continue; } FastSparseSet<Integer>[] lstExtern = map.elements[i]; int[] arrnext = next[i]; int pointer = 0; do { FastSparseSet<Integer> first = lstOwn[pointer]; if (first != null) { FastSparseSet<Integer> second = null; if (pointer < lstExtern.length) { second = lstExtern[pointer]; } if (second != null) { first.intersection(second); } if (second == null || first.isEmpty()) { lstOwn[pointer] = null; size--; changeNext(arrnext, pointer, pointer, arrnext[pointer]); } } pointer = arrnext[pointer]; } while (pointer != 0); } }
public void complement(SFormsFastMapDirect map) { for (int i = 2; i >= 0; i--) { FastSparseSet<Integer>[] lstOwn = elements[i]; if (lstOwn.length == 0) { continue; } FastSparseSet<Integer>[] lstExtern = map.elements[i]; int[] arrnext = next[i]; int pointer = 0; do { FastSparseSet<Integer> first = lstOwn[pointer]; if (first != null) { if (pointer >= lstExtern.length) { break; } FastSparseSet<Integer> second = lstExtern[pointer]; if (second != null) { first.complement(second); if (first.isEmpty()) { lstOwn[pointer] = null; size--; changeNext(arrnext, pointer, pointer, arrnext[pointer]); } } } pointer = arrnext[pointer]; } while (pointer != 0); } }
public void intersection(SFormsFastMapDirect map) { for (int i = 2; i >= 0; i--) { FastSparseSet<Integer>[] lstOwn = elements[i]; if (lstOwn.length == 0) { continue; } FastSparseSet<Integer>[] lstExtern = map.elements[i]; int[] arrnext = next[i]; int pointer = 0; do { FastSparseSet<Integer> first = lstOwn[pointer]; if (first != null) { FastSparseSet<Integer> second = null; if (pointer < lstExtern.length) { second = lstExtern[pointer]; } if (second != null) { first.intersection(second); } if (second == null || first.isEmpty()) { lstOwn[pointer] = null; size--; changeNext(arrnext, pointer, pointer, arrnext[pointer]); } } pointer = arrnext[pointer]; } while (pointer != 0); } }