blob: fcabdcd269ac71a9175f679725cb28d69e4e478d [file] [log] [blame]
alshabib1f44e8e2014-08-14 15:19:57 -07001package org.projectfloodlight.openflow.types;
2
3import org.jboss.netty.buffer.ChannelBuffer;
4
5import com.google.common.hash.PrimitiveSink;
6
7public class OFMetadata implements OFValueType<OFMetadata> {
8
9 static int LENGTH = 8;
10
11 private final U64 u64;
12
13 public static final OFMetadata NONE = OFMetadata.of(U64.ZERO);
14
15 public static final OFMetadata NO_MASK = OFMetadata.of(U64.ofRaw(0xFFFFFFFFFFFFFFFFl));
16 public static final OFMetadata FULL_MASK = OFMetadata.of(U64.ofRaw(0x0));
17
18 public OFMetadata(U64 ofRaw) {
19 u64 = ofRaw;
20 }
21
22 public static OFMetadata of(U64 u64) {
23 return new OFMetadata(u64);
24 }
25
26 public static OFMetadata ofRaw(long raw) {
27 return new OFMetadata(U64.ofRaw(raw));
28 }
29
30 public U64 getValue() {
31 return u64;
32 }
33
34 public static OFMetadata read8Bytes(ChannelBuffer cb) {
35 return OFMetadata.ofRaw(cb.readLong());
36 }
37
38 public void write8Bytes(ChannelBuffer cb) {
39 u64.writeTo(cb);
40 }
41
42 @Override
43 public int getLength() {
44 return u64.getLength();
45 }
46
47 @Override
48 public OFMetadata applyMask(OFMetadata mask) {
49 return OFMetadata.of(this.u64.applyMask(mask.u64));
50 }
51
52 @Override
53 public boolean equals(Object arg0) {
54 if (!(arg0 instanceof OFMetadata))
55 return false;
56 OFMetadata other = (OFMetadata)arg0;
57
58 return this.u64.equals(other.u64);
59 }
60
61 @Override
62 public int hashCode() {
63 int prime = 53;
64 return this.u64.hashCode() * prime;
65 }
66
67 @Override
68 public String toString() {
69 return "Metadata: " + u64.toString();
70 }
71
72 @Override
73 public int compareTo(OFMetadata o) {
74 return u64.compareTo(o.u64);
75 }
76
77 @Override
78 public void putTo(PrimitiveSink sink) {
79 u64.putTo(sink);
80 }
81}