package jcircus.newfrontendmethod; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Vector; public class FrontEndCounter { HashMap counter; public FrontEndCounter () { counter = new LinkedHashMap (); } public FrontEndCounter (FrontEndCounter fec) { this.counter = new LinkedHashMap (fec.getMap()); } public void put (String channel) { Integer xis; if (this.counter.containsKey (channel)) { /*xis = this.counter.get(channel); this.counter.remove(channel); this.counter.put(channel, xis + 1);*/ } else { this.counter.put(channel, 1); } } public void put (String channel, Integer x) { if (this.counter.containsKey (channel)) { this.counter.remove(channel); } this.counter.put(channel, x); } public static FrontEndCounter createOneCounter (Object [] keys) { FrontEndCounter fec = new FrontEndCounter (); for (int i = 0; i < keys.length; i++) { fec.put((String)keys [i], 1); } return fec; } public void putPlus (String channel, Integer x) { if (this.counter.containsKey (channel)) { this.counter.put(channel, this.counter.get(channel) + x); } this.counter.put(channel, x); } public Integer get (String channel) { if (this.counter.containsKey (channel)) return this.counter.get(channel); else return new Integer (0); } public HashMap getMap () { return this.counter; } public static FrontEndCounter sumFrontEnds (FrontEndCounter fec1, FrontEndCounter fec2, Vector channelSet) { Object [] keys1 = fec1.getMap().keySet().toArray(); Object [] keys2 = fec2.getMap().keySet().toArray(); Object [] keysall = withoutDuplicates (keys1, keys2); FrontEndCounter fecall = new FrontEndCounter (); for (int i = 0; i < keysall.length; i++) { Integer x1 = fec1.get((String) keysall [i]); Integer x2 = fec2.get((String) keysall [i]); fecall.put((String)keysall [i], x1 + x2); } return fecall; } private static Object [] withoutDuplicates (Object [] keys1, Object [] keys2) { Vector keysall = new Vector (); //new Object [keys1.length + keys2.length]; for (int i = 0; i < keys1.length; i++) { keysall.addElement(keys1 [i]); } for (int i = 0; i < keys2.length; i++) { if (!keysall.contains (keys2 [i])) keysall.addElement(keys2 [i]); } return keysall.toArray(); } public static FrontEndCounter mergeFrontEndCounters (FrontEndCounter fem1, FrontEndCounter fem2, Vector channelSet) { FrontEndCounter fem = new FrontEndCounter (); Object [] keys1 = fem1.getMap().keySet().toArray(); Object [] keys2 = fem2.getMap().keySet().toArray(); Object [] keysall = withoutDuplicates (keys1, keys2); for (int i = 0; i < keysall.length; i++) { Integer x1 = fem1.get((String) keysall [i]); Integer x2 = fem2.get((String) keysall [i]); if (channelSet.contains((String)keysall [i])) fem.put((String)keysall [i], x1 + x2); else fem.put((String)keysall [i], (x1 > x2)? x1 : x2); } return fem; } public static FrontEndCounter mergeFrontEndCounters (FrontEndCounter fem1, FrontEndCounter fem2) { return FrontEndCounter.mergeFrontEndCounters(fem1, fem2, new Vector ()); } public static void main (String args []) { //TESTE DE mergeParallel e mergeNormal FrontEndCounter fem1 = new FrontEndCounter (); FrontEndCounter fem2 = new FrontEndCounter (); FrontEndCounter femparallel = new FrontEndCounter (); FrontEndCounter femnormal = new FrontEndCounter (); fem1.put("a"); fem1.put("a"); fem1.put("a"); fem1.put("b"); fem1.put("b"); fem2.put("a"); fem2.put("a"); fem2.put("b"); Vector channelSet = new Vector (); channelSet.add("a"); channelSet.add("b"); femnormal = mergeFrontEndCounters (fem1, fem2); femparallel = mergeFrontEndCounters (fem1, fem2, channelSet); System.out.println ("MergeNormal = \n" + frontEndMapAsString (femnormal)); //Como esperado System.out.println ("MergeParallel = \n" + frontEndMapAsString (femparallel)); //Como esperado } private static String frontEndMapAsString (FrontEndCounter fem) { String str = "FrontEndMap {\n"; Object [] allkeys = fem.getMap().keySet().toArray(); for (int i = 0; i < allkeys.length; i++) { str = str + " " + (String) allkeys [i] + " --> " + fem.get((String)allkeys [i]) + "\n"; } str = str + "}"; return str; } public static FrontEndCounter mergeNormal (FrontEndCounter fem1, FrontEndCounter fem2) { FrontEndCounter fem = new FrontEndCounter (); Object [] keys1 = fem1.getMap().keySet().toArray(); Object [] keys2 = fem2.getMap().keySet().toArray(); Object [] keysall = withoutDuplicates (keys1, keys2); for (int i = 0; i < keysall.length; i++) { Integer x1 = fem1.get((String) keysall [i]); Integer x2 = fem2.get((String) keysall [i]); fem.put((String)keysall [i], (x1 > x2)? x1 : x2); } return fem; } }