blob: 4d88793aff9b614390e8968a07d03de3d8ba795a [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;
Andreas Wundsam85c961f2013-09-29 21:22:12 -07008
Yotam Harcholf3f11152013-09-05 16:47:16 -07009 protected Masked(T value, T mask) {
10 this.value = value.applyMask(mask);
11 this.mask = mask;
12 }
Andreas Wundsam85c961f2013-09-29 21:22:12 -070013
Yotam Harcholf3f11152013-09-05 16:47:16 -070014 public T getValue() {
15 return value;
16 }
Andreas Wundsam85c961f2013-09-29 21:22:12 -070017
Yotam Harcholf3f11152013-09-05 16:47:16 -070018 public T getMask() {
19 return mask;
20 }
Andreas Wundsam85c961f2013-09-29 21:22:12 -070021
Yotam Harcholf3f11152013-09-05 16:47:16 -070022 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 }
Andreas Wundsam85c961f2013-09-29 21:22:12 -070030
31 @Override
32 public String toString() {
33 // General representation: value/mask
34 StringBuilder sb = new StringBuilder();
35 sb.append(value.toString()).append('/').append(mask.toString());
36 return sb.toString();
37 }
38
39 @Override
40 public Masked<T> applyMask(Masked<T> mask) {
41 return this;
42 }
43
Yotam Harcholf3f11152013-09-05 16:47:16 -070044 @Override
45 public boolean equals(Object obj) {
46 if (!(obj instanceof Masked<?>))
47 return false;
48 Masked<?> mobj = (Masked<?>)obj;
49 return this.value.equals(mobj.value) && this.mask.equals(mobj.mask);
50 }
51
52 @Override
53 public int hashCode() {
54 final int prime = 59;
55 int result = 1;
56 result = prime * result + this.value.hashCode();
57 result = prime * result + this.mask.hashCode();
58 return result;
59 }
60
61 @Override
Andreas Wundsam85c961f2013-09-29 21:22:12 -070062 public int compareTo(Masked<T> o) {
63 int res = value.compareTo(o.value);
64 if(res != 0)
65 return res;
66 else
67 return mask.compareTo(o.mask);
Yotam Harcholf3f11152013-09-05 16:47:16 -070068 }
Yotam Harcholf3f11152013-09-05 16:47:16 -070069}