blob: ead7d62b39858eb29fb14235417a9f3aca3b6b1b [file] [log] [blame]
Yotam Harcholf3f11152013-09-05 16:47:16 -07001package org.projectfloodlight.openflow.types;
2
3
4
5public class Masked<T extends OFValueType<T>> implements OFValueType<Masked<T>> {
6 protected T value;
7 protected T mask;
8
9 protected Masked(T value, T mask) {
10 this.value = value.applyMask(mask);
11 this.mask = mask;
12 }
13
14 public T getValue() {
15 return value;
16 }
17
18 public T getMask() {
19 return mask;
20 }
21
22 public static <T extends OFValueType<T>> Masked<T> of(T value, T mask) {
23 return new Masked<T>(value, mask);
24 }
25
26 @Override
27 public int getLength() {
28 return this.value.getLength() + this.mask.getLength();
29 }
30
31 @Override
32 public boolean equals(Object obj) {
33 if (!(obj instanceof Masked<?>))
34 return false;
35 Masked<?> mobj = (Masked<?>)obj;
36 return this.value.equals(mobj.value) && this.mask.equals(mobj.mask);
37 }
38
39 @Override
40 public int hashCode() {
41 final int prime = 59;
42 int result = 1;
43 result = prime * result + this.value.hashCode();
44 result = prime * result + this.mask.hashCode();
45 return result;
46 }
47
48 @Override
49 public String toString() {
50 // General representation: value/mask
51 StringBuilder sb = new StringBuilder();
52 sb.append(value.toString()).append('/').append(mask.toString());
53 return sb.toString();
54 }
55
56 @Override
57 public Masked<T> applyMask(Masked<T> mask) {
58 return this;
59 }
60
61}