package org.opendaylight.openflowjava.nx.codec.match;
import com.google.common.base.MoreObjects;
-import com.google.common.primitives.Ints;
import java.math.BigInteger;
import java.util.Objects;
import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
*
* @author msunal
*/
-public class NxmHeader {
+public final class NxmHeader {
// Full 4 or 8 byte header as big integer
private final Uint64 header;
* @param header the header as {@code BigInteger}.
* @see NxmHeader#NxmHeader(long)
*/
- public NxmHeader(Uint64 header) {
- this.headerAsLong = header.longValue();
+ public NxmHeader(final Uint64 header) {
+ headerAsLong = header.longValue();
if (isExperimenter(header)) {
- this.experimenterId = (int) this.headerAsLong;
- this.shortHeader = this.headerAsLong >>> 32;
+ experimenterId = (int) headerAsLong;
+ shortHeader = headerAsLong >>> 32;
} else {
- this.shortHeader = this.headerAsLong;
- this.experimenterId = -1;
+ shortHeader = headerAsLong;
+ experimenterId = -1;
}
this.header = header;
- this.oxmClass = Ints.checkedCast(extractSub(this.shortHeader, 16, 16));
- this.nxmField = Ints.checkedCast(extractSub(this.shortHeader, 7, 9));
- this.hasMask = extractSub(this.shortHeader, 1, 8) == 1;
- this.length = Ints.checkedCast(extractSub(this.shortHeader, 8, 0));
+ try {
+ oxmClass = Math.toIntExact(extractSub(shortHeader, 16, 16));
+ nxmField = Math.toIntExact(extractSub(shortHeader, 7, 9));
+ hasMask = extractSub(shortHeader, 1, 8) == 1;
+ length = Math.toIntExact(extractSub(shortHeader, 8, 0));
+ } catch (ArithmeticException e) {
+ throw new IllegalArgumentException(e);
+ }
}
/**
*
* @param header the header as a {@code long}.
*/
- public NxmHeader(long header) {
+ public NxmHeader(final long header) {
this(Uint64.fromLongBits(header));
}
* @param hasMask the hasMask field.
* @param length the length field.
*/
- public NxmHeader(int oxmClass, int nxmField, boolean hasMask, int length) {
+ public NxmHeader(final int oxmClass, final int nxmField, final boolean hasMask, final int length) {
this(oxmClass, nxmField, hasMask, length, -1);
}
* @param length the length field.
* @param experimenterId the esperimenter id field.
*/
- public NxmHeader(int nxmField, boolean hasMask, int length, long experimenterId) {
+ public NxmHeader(final int nxmField, final boolean hasMask, final int length, final long experimenterId) {
this(EncodeConstants.EXPERIMENTER_VALUE, nxmField, hasMask, length, experimenterId);
}
- private NxmHeader(int oxmClass, int nxmField, boolean hasMask, int length, long experimenterId) {
+ private NxmHeader(final int oxmClass, final int nxmField, final boolean hasMask, final int length,
+ final long experimenterId) {
this.oxmClass = oxmClass;
this.nxmField = nxmField;
this.hasMask = hasMask;
this.length = length;
- this.shortHeader = (long) oxmClass << 16 | nxmField << 9 | (hasMask ? 1 : 0) << 8 | length;
+ shortHeader = (long) oxmClass << 16 | nxmField << 9 | (hasMask ? 1 : 0) << 8 | length;
this.experimenterId = experimenterId;
if (isExperimenter()) {
- this.header = Uint64.fromLongBits((this.shortHeader << 32) + experimenterId);
+ header = Uint64.fromLongBits((shortHeader << 32) + experimenterId);
} else {
- this.header = Uint64.valueOf(this.shortHeader);
+ header = Uint64.valueOf(shortHeader);
}
- this.headerAsLong = this.header.longValue();
+ headerAsLong = header.longValue();
}
private static long extractSub(final long value, final int nrBits, final int offset) {
return oxmClass == EncodeConstants.EXPERIMENTER_VALUE;
}
- public static boolean isExperimenter(Uint64 uint) {
+ public static boolean isExperimenter(final Uint64 uint) {
return uint.longValue() >>> 48 == EncodeConstants.EXPERIMENTER_VALUE;
}
}
@Override
- public boolean equals(Object obj) {
+ public boolean equals(final Object obj) {
if (this == obj) {
return true;
}