Blame view

circus/src/jcircus/newutil/RenamingUtil.java 3.72 KB
8d0dc533f   Madiel de Souza Conserva Filho   first
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 
  }