FrontEndCounter.java 4.94 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
  85
  86
  87
  88
  89
  90
  91
  92
  93
  94
  95
  96
  97
  98
  99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
package jcircus.newfrontendmethod;

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

public class FrontEndCounter {
HashMap <String, Integer> counter;
public FrontEndCounter () {
counter = new LinkedHashMap <String, Integer> ();
}
public FrontEndCounter (FrontEndCounter fec) {
this.counter = new LinkedHashMap <String, Integer> (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 <String, Integer> getMap () {
return this.counter;
}
public static FrontEndCounter sumFrontEnds (FrontEndCounter fec1, FrontEndCounter fec2, Vector <String> 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 <Object> keysall = new Vector <Object> (); //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 <String> 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 <String> ());
}
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 <String> channelSet = new Vector <String> ();
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;
}
}