blob: 7d7c38e1d48e7dda34122c98986c2f8814fecbc6 [file] [log] [blame]
alshabib1f44e8e2014-08-14 15:19:57 -07001package org.projectfloodlight.openflow.types;
2
3import javax.annotation.concurrent.Immutable;
4
5import org.jboss.netty.buffer.ChannelBuffer;
6
7import com.google.common.hash.PrimitiveSink;
8import com.google.common.primitives.UnsignedInts;
9
10@Immutable
11public class ClassId implements OFValueType<ClassId> {
12 static final int LENGTH = 4;
13
14 private final static int NONE_VAL = 0;
15 public final static ClassId NONE = new ClassId(NONE_VAL);
16
17 private final static int NO_MASK_VAL = 0xFFFFFFFF;
18 public final static ClassId NO_MASK = new ClassId(NO_MASK_VAL);
19 public final static ClassId FULL_MASK = NONE;
20
21 private final int rawValue;
22
23 private ClassId(final int rawValue) {
24 this.rawValue = rawValue;
25 }
26
27 public static ClassId of(final int raw) {
28 if(raw == NONE_VAL)
29 return NONE;
30 else if(raw == NO_MASK_VAL)
31 return NO_MASK;
32 return new ClassId(raw);
33 }
34
35 public int getInt() {
36 return rawValue;
37 }
38
39 @Override
40 public int getLength() {
41 return LENGTH;
42 }
43
44 @Override
45 public String toString() {
46 return Integer.toString(rawValue);
47 }
48
49 @Override
50 public ClassId applyMask(ClassId mask) {
51 return ClassId.of(rawValue & mask.rawValue); }
52
53 @Override
54 public int hashCode() {
55 final int prime = 31;
56 int result = 1;
57 result = prime * result + rawValue;
58 return result;
59 }
60
61 @Override
62 public boolean equals(Object obj) {
63 if (this == obj)
64 return true;
65 if (obj == null)
66 return false;
67 if (getClass() != obj.getClass())
68 return false;
69 ClassId other = (ClassId) obj;
70 if (rawValue != other.rawValue)
71 return false;
72 return true;
73 }
74
75 public void write4Bytes(ChannelBuffer c) {
76 c.writeInt(rawValue);
77 }
78
79 public static ClassId read4Bytes(ChannelBuffer c) {
80 return ClassId.of(c.readInt());
81 }
82
83 @Override
84 public int compareTo(ClassId o) {
85 return UnsignedInts.compare(rawValue, rawValue);
86 }
87
88 @Override
89 public void putTo(PrimitiveSink sink) {
90 sink.putInt(rawValue);
91 }
92}