blob: 7b124f213f0a41d6ce7e6811d000b563cffc948d [file] [log] [blame]
Sovietaced92603b02014-01-28 18:23:24 -08001package org.projectfloodlight.openflow.types;
2
3import org.jboss.netty.buffer.ChannelBuffer;
4import org.projectfloodlight.openflow.exceptions.OFParseError;
5
Sovietaced0f9dddf2014-01-28 19:45:07 -08006import com.google.common.hash.PrimitiveSink;
Sovietaced92603b02014-01-28 18:23:24 -08007import com.google.common.primitives.Shorts;
8
Sovietaced0f9dddf2014-01-28 19:45:07 -08009public class OFAuxId implements Comparable<OFAuxId>, PrimitiveSinkable {
Sovietaced92603b02014-01-28 18:23:24 -080010
11 private static final short VALIDATION_MASK = 0xFF;
12
13 private static final short MAIN_VAL = 0x0000;
14
Sovietaced0f9dddf2014-01-28 19:45:07 -080015 public static final OFAuxId MAIN = new OFAuxId(MAIN_VAL);
Sovietaced92603b02014-01-28 18:23:24 -080016
17 private final short id;
18
Sovietaced0f9dddf2014-01-28 19:45:07 -080019 private OFAuxId(short id) {
Sovietaced92603b02014-01-28 18:23:24 -080020 this.id = id;
21 }
22
Sovietaced0f9dddf2014-01-28 19:45:07 -080023 public static OFAuxId of(short id) {
Sovietaced92603b02014-01-28 18:23:24 -080024 switch(id) {
25 case MAIN_VAL:
26 return MAIN;
27 default:
28 if ((id & VALIDATION_MASK) != id)
29 throw new IllegalArgumentException("Illegal Aux id value: " + id);
Sovietaced0f9dddf2014-01-28 19:45:07 -080030 return new OFAuxId(id);
Sovietaced92603b02014-01-28 18:23:24 -080031 }
32 }
33
Sovietaced0f9dddf2014-01-28 19:45:07 -080034 public static OFAuxId of(int id) {
Sovietaced92603b02014-01-28 18:23:24 -080035 if((id & VALIDATION_MASK) != id)
36 throw new IllegalArgumentException("Illegal Aux id value: "+id);
37 return of((short) id);
38 }
39
40 @Override
41 public String toString() {
42 return "0x" + Integer.toHexString(id);
43 }
44
45 public short getValue() {
46 return id;
47 }
48
49 public void writeByte(ChannelBuffer c) {
50 c.writeByte(this.id);
51 }
52
Sovietaced0f9dddf2014-01-28 19:45:07 -080053 public static OFAuxId readByte(ChannelBuffer c) throws OFParseError {
54 return OFAuxId.of(c.readUnsignedByte());
Sovietaced92603b02014-01-28 18:23:24 -080055 }
56
57 @Override
58 public boolean equals(Object obj) {
59 if (!(obj instanceof TableId))
60 return false;
Sovietaced0f9dddf2014-01-28 19:45:07 -080061 OFAuxId other = (OFAuxId)obj;
Sovietaced92603b02014-01-28 18:23:24 -080062 if (other.id != this.id)
63 return false;
64 return true;
65 }
66
67 @Override
68 public int hashCode() {
69 int prime = 13873;
70 return this.id * prime;
71 }
72
73 @Override
Sovietaced0f9dddf2014-01-28 19:45:07 -080074 public int compareTo(OFAuxId other) {
Sovietaced92603b02014-01-28 18:23:24 -080075 return Shorts.compare(this.id, other.id);
76 }
77
Sovietaced0f9dddf2014-01-28 19:45:07 -080078 @Override
79 public void putTo(PrimitiveSink sink) {
80 sink.putByte((byte) id);
81 }
82
Sovietaced92603b02014-01-28 18:23:24 -080083}