package jcircus.parallelism; import java.util.*; public class FriendshipSets { HashSet > friendshipSets = new HashSet > (); public FriendshipSets () { friendshipSets = new HashSet > (); } public FriendshipSets (HashSet > x) { this.friendshipSets = x; } public HashSet > getFriendshipSets () { return this.friendshipSets; } public void setFriendshipSets (HashSet > x) { this.friendshipSets = x; } public static Vector intersection (Vector str1, Vector str2) { Vector intersec = new Vector (); for (int i = 0; i < str1.size(); i++) { if (str2.contains(str1.elementAt(i))) { intersec.addElement(str1.elementAt(i)); } } return intersec; } public static Vector forcedInter (Vector str1, Vector str2, Vector channelSet) { Vector intersec = intersection (str1, str2); Vector forced = new Vector (); for (int i = 0; i < intersec.size(); i++) { if (!channelSet.contains(intersec.elementAt(i))) { forced.addElement(intersec.elementAt(i)); } } return forced; } private static HashSet union (HashSet x, HashSet y) { HashSet z = new HashSet (); z.addAll(x); z.addAll(y); return z; } public static HashSet > interleave (HashSet > x, HashSet > y) { HashSet > z = new HashSet > (); z.addAll(x); z.addAll(y); return z; } public static HashSet > cartesianProduct (HashSet > x, HashSet > y) { HashSet > setset = new HashSet > (); for (int i = 0; i < x.size(); i++) { for (int j = 0; j < y.size(); j++) { HashSet > z = new HashSet > (); setset.add(union ((HashSet )x.toArray() [i], (HashSet )y.toArray() [j])); } } return setset; } public static Vector allIndexes (String chan, HashMap map) { FriendshipSets fs = map.get(chan); Vector all = new Vector (); HashSet > fs2 = fs.getFriendshipSets(); Object [] fs2Array = fs2.toArray(); for (int i = 0; i < fs2Array.length; i++) { Object [] fs2ArrayArray = ((HashSet ) fs2Array [i]).toArray(); for (int j = 0; j < fs2ArrayArray.length; j++) { //if (!all.contains(fs2ArrayArray [j])) //all.add((Integer) fs2ArrayArray [j]); } all.add(i); } return all; } public void interleave (HashSet > y) { this.friendshipSets = interleave (this.friendshipSets, y); } public void cartesianProductSync (HashSet > y) { this.friendshipSets = cartesianProduct (this.friendshipSets, y); } public static Integer [] renamingIndexes (HashSet > friendsSet, int index) { int counter = 0, aux = 0; Object/*HashSet */ [] friendsSetArray = /*(HashSet [])*/ friendsSet.toArray(); for (int i = 0; i < friendsSet.size(); i++) { if (((HashSet )friendsSetArray [i]).contains(index)) { counter++; } } Integer [] indexes = new Integer [counter]; for (int i = 0; i < friendsSet.size(); i++) { if (((HashSet )friendsSetArray [i]).contains(index)) { indexes[aux] = i; aux++; } } /*if (indexes.length == 0) { return new Integer [] {0}; }*/ return indexes; } public static HashMap renamingIndexes (HashMap spfemap, int index) { //Mapeia nomes de canais a indices de renomeacao. HashMap mapstrint = new HashMap (); //sera usado para construir acoes renomeadas Object [] keys = spfemap.keySet().toArray(); for (int i = 0; i < spfemap.size(); i++) { mapstrint.put((String) keys [i], ((Integer []) renamingIndexes (spfemap.get(keys[i]).getFriendshipSets(), index))); } return mapstrint; } public static void printSetOfSets (FriendshipSets pfe) { if (pfe != null) printSetOfSets (pfe.getFriendshipSets()); } public static String printMap (HashMap map) { String str = ""; Object [] keys = map.keySet().toArray(); for (int i = 0; i < keys.length; i++) { str = str + (String)keys [i] + " -> " + printSetOfSets (map.get((String)keys [i]).getFriendshipSets()); str = str + "\n"; } return str; } public static String printSetOfSets (HashSet > setofsets) { String str = ""; str = str + "{"; for (int i = 0; i < setofsets.size(); i++) { if (i != 0) { str = str + ", "; } str = str + "{"; Set set = (Set ) setofsets.toArray()[i]; for (int j = 0; j < set.size(); j++) { if (j != 0) { str = str + ", "; } Integer x = (Integer) set.toArray() [j]; str = str + x; } str = str + "}"; } str = str + "}"; return str; } public static void main (String args []) { /**ABAIXO TRECHO DE C�DIGO USADO PARA TESTAR OS M�TODOS DE PRODUTO CARTESIANO E INTERLEAVE**/ HashSet > h0; HashSet > h1; HashSet > h2; HashSet > h3; HashSet > h4; HashSet > h5; HashSet > h6; HashSet > h7; HashSet > h8; HashSet > h9; HashSet zero = new HashSet (); zero.add(0); HashSet > zeroset = new HashSet > (); zeroset.add(zero); HashSet um = new HashSet (); um.add(1); HashSet > umset = new HashSet > (); umset.add(um); HashSet dois = new HashSet (); dois.add(2); HashSet > doisset = new HashSet > (); doisset.add(dois); HashSet tres = new HashSet (); tres.add(3); HashSet > tresset = new HashSet > (); tresset.add(tres); HashSet quatro = new HashSet (); quatro.add(4); HashSet > quatroset = new HashSet > (); quatroset.add(quatro); HashSet cinco = new HashSet (); cinco.add(5); HashSet > cincoset = new HashSet > (); cincoset.add(cinco); HashSet > seisset = interleave (doisset, tresset); HashSet > seteset = interleave (quatroset, cincoset); HashSet > oitoset = cartesianProduct (seisset, seteset); HashSet > noveset = interleave (oitoset, umset); HashSet > dezset = cartesianProduct (zeroset, noveset); printSetOfSets (dezset); /**ACIMA TRECHO DE C�DIGO USADO PARA TESTAR OS M�TODOS DE PRODUTO CARTESIANO E INTERLEAVE**/ } /*public static HashSet > miniDispute (HashSet set1, HashSet set2) throws Exception { HashSet set = new HashSet (); HashSet > setofsets = new HashSet > (); if (set1.size() == 1 && set2.size () == 1) { Integer x = (Integer) set1.toArray()[0]; Integer y = (Integer) set2.toArray()[0]; set.add(x); set.add(y); setofsets.add(set); return setofsets; } else if (set1.size () == 1 && set2.size() == 2) { Integer x = (Integer) set1.toArray()[0]; Integer y = (Integer) set2.toArray()[0]; Integer z = (Integer) set2.toArray()[1]; HashSet s1 = new HashSet (); HashSet s2 = new HashSet (); HashSet s3 = new HashSet (); s1.add(x); s1.add(y); s2.add(x); s2.add(z); s3.add(y); s3.add(z); setofsets.add(s1); setofsets.add(s2); setofsets.add(s3); return setofsets; } else if (set1.size () == 2 && set2.size() == 1) { Integer x = (Integer) set1.toArray()[0]; Integer y = (Integer) set1.toArray()[1]; Integer z = (Integer) set2.toArray()[0]; HashSet s1 = new HashSet (); HashSet s2 = new HashSet (); HashSet s3 = new HashSet (); s1.add(x); s1.add(y); s2.add(x); s2.add(z); s3.add(y); s3.add(z); setofsets.add(s1); setofsets.add(s2); setofsets.add(s3); return setofsets; } else if (set1.size () == 2 && set2.size() == 2) { Integer x = (Integer) set1.toArray()[0]; Integer y = (Integer) set1.toArray()[1]; Integer z = (Integer) set2.toArray()[0]; Integer w = (Integer) set2.toArray()[1]; System.out.println ("Dispute: " + x + ", " + y + ", " + z + ", " + w); HashSet s1 = new HashSet (); HashSet s2 = new HashSet (); HashSet s3 = new HashSet (); HashSet s4 = new HashSet (); HashSet s5 = new HashSet (); HashSet s6 = new HashSet (); s1.add(x); s1.add(z); s2.add(x); s2.add(w); s3.add(y); s3.add(z); s4.add(y); s4.add(w); s5.add(x); s5.add(y); s6.add(z); s6.add(w); setofsets.add(s1); setofsets.add(s2); setofsets.add(s3); setofsets.add(s4); setofsets.add(s5); setofsets.add(s6); return setofsets; } else { throw new Exception ("Wrong combination of sets"); } } public static HashSet > disputeMerge (HashSet > set1, HashSet > set2) throws Exception { //N�O TESTADA AINDA HashSet > set = new HashSet > (); for (int i = 0; i < set1.size(); i++) { for (int j = 0; j < set2.size(); j++) { set.addAll(miniDispute((HashSet ) set1.toArray()[i], (HashSet ) set2.toArray()[i])); } } return set; } public static void printMiniDispute (HashSet > setofsets) { System.out.print ("{"); for (int i = 0; i < setofsets.size(); i++) { if (i != 0) { System.out.print (", "); } System.out.print ("{"); Set set = (Set ) setofsets.toArray()[i]; for (int j = 0; j < set.size(); j++) { if (j != 0) { System.out.print (", "); } Integer x = (Integer) set.toArray()[j]; System.out.print (x); } System.out.print ("}"); } System.out.print ("}"); } public static void main (String args []) { HashSet set1 = new HashSet (); HashSet set2 = new HashSet (); set1.add(1); set1.add(2); set2.add(3); set2.add(4); try { printMiniDispute (miniDispute (set1, set2)); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }*/ }