1 package cz.cuni.amis.pogamut.udk.agent.module.utils;
2
3 import java.util.Collection;
4 import java.util.HashMap;
5 import java.util.HashSet;
6 import java.util.Map;
7 import java.util.Set;
8
9 import cz.cuni.amis.pogamut.base.communication.worldview.IWorldView;
10 import cz.cuni.amis.pogamut.base.communication.worldview.event.IWorldEventListener;
11 import cz.cuni.amis.pogamut.udk.bot.impl.UDKBot;
12 import cz.cuni.amis.pogamut.udk.communication.messages.gbinfomessages.BeginMessage;
13
14
15
16
17
18
19
20
21
22 public class TabooSet<T> {
23
24
25
26
27 private Map<T, Double> taboo = new HashMap<T, Double>();
28
29
30
31
32
33 public void add(T item) {
34 taboo.put(item, (double)-1);
35 }
36
37
38
39
40
41
42 public void add(T item, double timeout) {
43 taboo.put(item, time+timeout);
44 }
45
46
47
48
49
50 public void remove(T item) {
51 taboo.remove(item);
52 }
53
54
55
56
57
58
59
60 public boolean isTaboo(T item) {
61 if (taboo.containsKey(item)) {
62 double tabuTime = taboo.get(item);
63 if (tabuTime < 0) {
64 return true;
65 }
66 if (tabuTime < time) {
67 taboo.remove(item);
68 return false;
69 } else {
70 return true;
71 }
72 } else {
73 return false;
74 }
75 }
76
77
78
79
80
81
82
83
84 public Set<T> filter(Collection<T> collection) {
85 Set<T> set = new HashSet<T>();
86 for (T t : collection) {
87 if (isTaboo(t)) continue;
88 set.add(t);
89 }
90 return set;
91 }
92
93
94
95
96 public void clear() {
97 taboo.clear();
98 }
99
100
101
102
103 public double getTime() {
104 return time;
105 }
106
107
108
109
110 private double time;
111
112
113
114
115
116 private class BeginMessageListener implements IWorldEventListener<BeginMessage> {
117
118
119 public BeginMessageListener(IWorldView worldView) {
120 worldView.addEventListener(BeginMessage.class, this);
121 }
122
123 @Override
124 public void notify(BeginMessage event) {
125 time = event.getTime();
126 }
127
128 };
129
130
131
132
133 BeginMessageListener beginMessageListener;
134
135
136
137
138
139 public TabooSet(UDKBot bot) {
140 beginMessageListener = new BeginMessageListener(bot.getWorldView());
141 }
142
143 }