blob: ea2317a69cbeb5fe5d235ba19fbd18564f4346dc [file] [log] [blame]
Yotam Harcholf3f11152013-09-05 16:47:16 -07001package org.projectfloodlight.openflow.types;
2
Andreas Wundsam22ba3af2013-10-04 16:00:30 -07003import com.google.common.hash.PrimitiveSink;
4
Yotam Harcholf3f11152013-09-05 16:47:16 -07005
6
7public class Masked<T extends OFValueType<T>> implements OFValueType<Masked<T>> {
8 protected T value;
9 protected T mask;
Andreas Wundsam85c961f2013-09-29 21:22:12 -070010
Yotam Harcholf3f11152013-09-05 16:47:16 -070011 protected Masked(T value, T mask) {
12 this.value = value.applyMask(mask);
13 this.mask = mask;
14 }
Andreas Wundsam85c961f2013-09-29 21:22:12 -070015
Yotam Harcholf3f11152013-09-05 16:47:16 -070016 public T getValue() {
17 return value;
18 }
Andreas Wundsam85c961f2013-09-29 21:22:12 -070019
Yotam Harcholf3f11152013-09-05 16:47:16 -070020 public T getMask() {
21 return mask;
22 }
Andreas Wundsam85c961f2013-09-29 21:22:12 -070023
Yotam Harcholf3f11152013-09-05 16:47:16 -070024 public static <T extends OFValueType<T>> Masked<T> of(T value, T mask) {
25 return new Masked<T>(value, mask);
26 }
27
28 @Override
29 public int getLength() {
30 return this.value.getLength() + this.mask.getLength();
31 }
Andreas Wundsam85c961f2013-09-29 21:22:12 -070032
33 @Override
34 public String toString() {
35 // General representation: value/mask
36 StringBuilder sb = new StringBuilder();
37 sb.append(value.toString()).append('/').append(mask.toString());
38 return sb.toString();
39 }
40
41 @Override
42 public Masked<T> applyMask(Masked<T> mask) {
43 return this;
44 }
45
Yotam Harcholf3f11152013-09-05 16:47:16 -070046 @Override
47 public boolean equals(Object obj) {
48 if (!(obj instanceof Masked<?>))
49 return false;
50 Masked<?> mobj = (Masked<?>)obj;
51 return this.value.equals(mobj.value) && this.mask.equals(mobj.mask);
52 }
53
54 @Override
55 public int hashCode() {
56 final int prime = 59;
57 int result = 1;
58 result = prime * result + this.value.hashCode();
59 result = prime * result + this.mask.hashCode();
60 return result;
61 }
62
63 @Override
Andreas Wundsam85c961f2013-09-29 21:22:12 -070064 public int compareTo(Masked<T> o) {
65 int res = value.compareTo(o.value);
66 if(res != 0)
67 return res;
68 else
69 return mask.compareTo(o.mask);
Yotam Harcholf3f11152013-09-05 16:47:16 -070070 }
Andreas Wundsam22ba3af2013-10-04 16:00:30 -070071
72 @Override
73 public void putTo(PrimitiveSink sink) {
74 value.putTo(sink);
75 mask.putTo(sink);
76 }
Yotam Harcholf3f11152013-09-05 16:47:16 -070077}