RenamingUtil.java 3.72 KB
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
package jcircus.newutil;

import java.util.HashMap;
import java.util.LinkedHashMap;

import jcircus.parallelism.FriendshipSets;
import jcircus.parallelism.ParallelismUpdater;

import net.sourceforge.czt.circus.ast.AssignmentPairs;
import net.sourceforge.czt.circus.ast.CircusAction;
import net.sourceforge.czt.circus.ast.CircusProcess;
import net.sourceforge.czt.circus.ast.Communication;
import net.sourceforge.czt.circus.ast.PrefixingAction;
import net.sourceforge.czt.circus.ast.RenameAction;
import net.sourceforge.czt.circus.impl.ExtChoiceActionImpl;
import net.sourceforge.czt.circus.util.Factory;
import net.sourceforge.czt.z.ast.ExprList;
import net.sourceforge.czt.z.ast.NameList;
import net.sourceforge.czt.z.ast.Spec;
import net.sourceforge.czt.z.ast.ZName;
import net.sourceforge.czt.z.ast.ZNameList;
import net.sourceforge.czt.z.ast.ZParaList;

public class RenamingUtil { //Maps a channel name to its new name, when a renaming occurs in the specification
private HashMap <String, String> map;
public RenamingUtil () {
map = new LinkedHashMap <String, String> ();
}
public void merge (HashMap <String, String> map2) {
map.putAll(map2);
}
public void put (String name1, String name2) {
map.put(name1, name2);
}
public static String [] indFromTo (int x, int y, String [] znl) {
int r1 = x, r2 = y - x + 1, counter = 0;
String [] z = new String [r2];
for (int i = r1; i < r2; i++) {
z[i] = znl [counter];
counter++;
}
return z;
}
public static PrefixingAction prefixingActionWithRenamedComm (PrefixingAction pa, String str, CircusAction action, CircusProcess process, HashMap <String, FriendshipSets> spfemap, String actionParaName, ZParaList paraList, boolean rename, Spec spec) {
Factory f = new Factory();
Communication c = pa.getCommunication();
Communication c2 = f.createCommunication(
f.createRefExpr(f.createZName(c.getChannelExpr().getName().toString())),
f.createCircusFieldList(c.getCircusFieldList()),
c.getCommUsage(),
c.getCommPattern(),
c.getMultiSych(),
c.getIndexed());
PrefixingAction pa2 = f.createPrefixingAction(
/*pa.getCircusAction()*/
ParallelismUpdater.updatedParAction (pa.getCircusAction(), process, spfemap, actionParaName, paraList, rename, spec), c2);
String name = pa.getCommunication().getChannelExpr().getName().toString();
pa2.getCommunication().getChannelExpr().setName(f.createZName (str));
return pa2;
}
/*public static CircusAction makeTheRenaming (RenameAction renameAction) { //TODO TERMINAR DE IMPLEMENTAR, E TESTAR
CircusAction action = renameAction.getCircusAction();
AssignmentPairs assignPairs = renameAction.getAssignmentPairs();
NameList lhs = assignPairs.getLHS();
ExprList rhs = assignPairs.getRHS();
}*/
public static CircusAction prefActToExtChoiceActWithRenamedComms (PrefixingAction pa, String [] znl, CircusAction action, CircusProcess process, HashMap <String, FriendshipSets> spfemap, String actionParaName, ZParaList paraList, boolean rename, Spec spec) { //TODO TESTAR
int length = znl.length;
if (length == 1) {
return prefixingActionWithRenamedComm (pa, znl [0], action, process, spfemap, actionParaName, paraList, rename, spec);
}
if (length == 0) {
return pa;
}
else {
Factory f = new Factory ();
ExtChoiceActionImpl eca = (ExtChoiceActionImpl) f.createExtChoiceAction();
eca.setLeftAction (prefActToExtChoiceActWithRenamedComms (pa, indFromTo (0, length - 2, znl), action, process, spfemap, actionParaName, paraList, rename, spec));
eca.setRightAction (prefixingActionWithRenamedComm (pa, znl [length - 1], action, process, spfemap, actionParaName, paraList, rename, spec));
return eca;
}
}
//public static
}