blob: d2b395c73c427ea9b45d1e54c5b077c5626be887 [file] [log] [blame]
Murat Parlakisik34863382016-12-05 00:53:17 -08001
2//:: from generic_utils import OrderedSet
3//:: from java_gen.java_model import model
4 @Override
5 public <F extends OFValueType<F>> F get(StatField<F> field)
6 throws UnsupportedOperationException {
7 if (!supports(field))
8 throw new UnsupportedOperationException("${msg.name} does not support statistics on field " + field.getName());
9
10 OFOxs<F> oxs = this.oxsFields.get(field);
11
12 if (oxs == null)
13 return null;
14
15 return oxs.getValue();
16 }
17
18 @Override
19 public Iterable<StatField<?>> getStatFields() {
20 return new Iterable<StatField<?>>() {
21 public Iterator<StatField<?>> iterator() {
22 return new StatFieldIterator();
23 }
24 };
25 }
26
27 @Override
28 public boolean supports(StatField<?> field) {
29 return supportsField(field);
30 }
31
32 private static boolean supportsField(StatField<?> field) {
33 switch (field.id) {
34 //:: for id_constant in sorted(set(id_constant for _, id_constant, _ in model.oxs_map.values())):
35 case ${id_constant}:
36 //:: #endfor
37 return true;
38 default:
39 return false;
40 }
41 }
42
43 private class StatFieldIterator extends AbstractIterator<StatField<?>> {
44 private Iterator<OFOxs<?>> oxsIterator;
45
46 StatFieldIterator() {
47 oxsIterator = oxsFields.iterator();
48 }
49
50 @Override
51 protected StatField<?> computeNext() {
52 while(oxsIterator.hasNext()) {
53 OFOxs<?> oxs = oxsIterator.next();
54 return oxs.getStatField();
55 }
56 endOfData();
57 return null;
58 }
59 }