blob: 72ed3da63074c66b4178333d222116b59a10ded2 [file] [log] [blame]
xinwued8d5582013-09-18 17:19:31 -07001package org.projectfloodlight.openflow.types;
2
3import javax.annotation.concurrent.Immutable;
4
Andreas Wundsam22ba3af2013-10-04 16:00:30 -07005import com.google.common.hash.PrimitiveSink;
Andreas Wundsam85c961f2013-09-29 21:22:12 -07006import com.google.common.primitives.UnsignedInts;
7
xinwued8d5582013-09-18 17:19:31 -07008@Immutable
Andreas Wundsam299f3622013-09-30 13:19:56 -07009public class ClassId implements OFValueType<ClassId> {
xinwued8d5582013-09-18 17:19:31 -070010 static final int LENGTH = 4;
Andreas Wundsamb75c4ad2013-09-23 14:45:35 -070011
12 private final static int NONE_VAL = 0;
Andreas Wundsam299f3622013-09-30 13:19:56 -070013 public final static ClassId NONE = new ClassId(NONE_VAL);
Andreas Wundsamb75c4ad2013-09-23 14:45:35 -070014
xinwued8d5582013-09-18 17:19:31 -070015 private final int rawValue;
16
Andreas Wundsam299f3622013-09-30 13:19:56 -070017 private ClassId(final int rawValue) {
xinwued8d5582013-09-18 17:19:31 -070018 this.rawValue = rawValue;
19 }
20
Andreas Wundsam299f3622013-09-30 13:19:56 -070021 public static ClassId of(final int raw) {
Andreas Wundsamb75c4ad2013-09-23 14:45:35 -070022 if(raw == NONE_VAL)
23 return NONE;
24
Andreas Wundsam299f3622013-09-30 13:19:56 -070025 return new ClassId(raw);
xinwued8d5582013-09-18 17:19:31 -070026 }
27
28 public int getInt() {
29 return rawValue;
30 }
31
Andreas Wundsam85c961f2013-09-29 21:22:12 -070032 @Override
xinwued8d5582013-09-18 17:19:31 -070033 public int getLength() {
34 return LENGTH;
35 }
36
37 @Override
Andreas Wundsam85c961f2013-09-29 21:22:12 -070038 public String toString() {
39 return Integer.toString(rawValue);
40 }
41
42 @Override
Andreas Wundsam299f3622013-09-30 13:19:56 -070043 public ClassId applyMask(ClassId mask) {
44 return ClassId.of(rawValue & mask.rawValue); }
Andreas Wundsam85c961f2013-09-29 21:22:12 -070045
46 @Override
xinwued8d5582013-09-18 17:19:31 -070047 public int hashCode() {
48 final int prime = 31;
49 int result = 1;
50 result = prime * result + rawValue;
51 return result;
52 }
53
54 @Override
55 public boolean equals(Object obj) {
56 if (this == obj)
57 return true;
58 if (obj == null)
59 return false;
60 if (getClass() != obj.getClass())
61 return false;
Andreas Wundsam299f3622013-09-30 13:19:56 -070062 ClassId other = (ClassId) obj;
xinwued8d5582013-09-18 17:19:31 -070063 if (rawValue != other.rawValue)
64 return false;
65 return true;
66 }
67
68 @Override
Andreas Wundsam299f3622013-09-30 13:19:56 -070069 public int compareTo(ClassId o) {
Andreas Wundsam85c961f2013-09-29 21:22:12 -070070 return UnsignedInts.compare(rawValue, rawValue);
xinwued8d5582013-09-18 17:19:31 -070071 }
Andreas Wundsam22ba3af2013-10-04 16:00:30 -070072
73 @Override
74 public void putTo(PrimitiveSink sink) {
75 sink.putInt(rawValue);
76 }
xinwued8d5582013-09-18 17:19:31 -070077}