mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-26 01:51:41 +00:00
Use Java 17 features (#6691)
Uses enhanced instanceof (and simplify equals methods) Uses switch expressions and arrow labels Seal and finalize some Shuffleboard classes Co-authored-by: Sam Carlberg <sam@slfc.dev>
This commit is contained in:
@@ -579,23 +579,14 @@ public final class DynamicStruct {
|
||||
"arrIndex (" + arrIndex + ") is larger than array size (" + field.m_arraySize + ")");
|
||||
}
|
||||
|
||||
long val;
|
||||
switch (field.m_size) {
|
||||
case 1:
|
||||
val = m_data.get(field.m_offset + arrIndex);
|
||||
break;
|
||||
case 2:
|
||||
val = m_data.getShort(field.m_offset + arrIndex * 2);
|
||||
break;
|
||||
case 4:
|
||||
val = m_data.getInt(field.m_offset + arrIndex * 4);
|
||||
break;
|
||||
case 8:
|
||||
val = m_data.getLong(field.m_offset + arrIndex * 8);
|
||||
break;
|
||||
default:
|
||||
throw new IllegalStateException("invalid field size");
|
||||
}
|
||||
long val =
|
||||
switch (field.m_size) {
|
||||
case 1 -> m_data.get(field.m_offset + arrIndex);
|
||||
case 2 -> m_data.getShort(field.m_offset + arrIndex * 2);
|
||||
case 4 -> m_data.getInt(field.m_offset + arrIndex * 4);
|
||||
case 8 -> m_data.getLong(field.m_offset + arrIndex * 8);
|
||||
default -> throw new IllegalStateException("invalid field size");
|
||||
};
|
||||
|
||||
if (field.isUint() || field.getType() == StructFieldType.kBool) {
|
||||
// for unsigned fields, we can simply logical shift and mask
|
||||
@@ -623,60 +614,42 @@ public final class DynamicStruct {
|
||||
// common case is no bit shift and no masking
|
||||
if (!field.isBitField()) {
|
||||
switch (field.m_size) {
|
||||
case 1:
|
||||
m_data.put(field.m_offset + arrIndex, (byte) value);
|
||||
break;
|
||||
case 2:
|
||||
m_data.putShort(field.m_offset + arrIndex * 2, (short) value);
|
||||
break;
|
||||
case 4:
|
||||
m_data.putInt(field.m_offset + arrIndex * 4, (int) value);
|
||||
break;
|
||||
case 8:
|
||||
m_data.putLong(field.m_offset + arrIndex * 8, value);
|
||||
break;
|
||||
default:
|
||||
throw new IllegalStateException("invalid field size");
|
||||
case 1 -> m_data.put(field.m_offset + arrIndex, (byte) value);
|
||||
case 2 -> m_data.putShort(field.m_offset + arrIndex * 2, (short) value);
|
||||
case 4 -> m_data.putInt(field.m_offset + arrIndex * 4, (int) value);
|
||||
case 8 -> m_data.putLong(field.m_offset + arrIndex * 8, value);
|
||||
default -> throw new IllegalStateException("invalid field size");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// handle bit shifting and masking into current value
|
||||
switch (field.m_size) {
|
||||
case 1:
|
||||
{
|
||||
byte val = m_data.get(field.m_offset + arrIndex);
|
||||
val &= (byte) ~(field.getBitMask() << field.m_bitShift);
|
||||
val |= (byte) ((value & field.getBitMask()) << field.m_bitShift);
|
||||
m_data.put(field.m_offset + arrIndex, val);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
short val = m_data.getShort(field.m_offset + arrIndex * 2);
|
||||
val &= (short) ~(field.getBitMask() << field.m_bitShift);
|
||||
val |= (short) ((value & field.getBitMask()) << field.m_bitShift);
|
||||
m_data.putShort(field.m_offset + arrIndex * 2, val);
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
int val = m_data.getInt(field.m_offset + arrIndex * 4);
|
||||
val &= (int) ~(field.getBitMask() << field.m_bitShift);
|
||||
val |= (int) ((value & field.getBitMask()) << field.m_bitShift);
|
||||
m_data.putInt(field.m_offset + arrIndex * 4, val);
|
||||
break;
|
||||
}
|
||||
case 8:
|
||||
{
|
||||
long val = m_data.getLong(field.m_offset + arrIndex * 8);
|
||||
val &= ~(field.getBitMask() << field.m_bitShift);
|
||||
val |= (value & field.getBitMask()) << field.m_bitShift;
|
||||
m_data.putLong(field.m_offset + arrIndex * 8, val);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
throw new IllegalStateException("invalid field size");
|
||||
case 1 -> {
|
||||
byte val = m_data.get(field.m_offset + arrIndex);
|
||||
val &= (byte) ~(field.getBitMask() << field.m_bitShift);
|
||||
val |= (byte) ((value & field.getBitMask()) << field.m_bitShift);
|
||||
m_data.put(field.m_offset + arrIndex, val);
|
||||
}
|
||||
case 2 -> {
|
||||
short val = m_data.getShort(field.m_offset + arrIndex * 2);
|
||||
val &= (short) ~(field.getBitMask() << field.m_bitShift);
|
||||
val |= (short) ((value & field.getBitMask()) << field.m_bitShift);
|
||||
m_data.putShort(field.m_offset + arrIndex * 2, val);
|
||||
}
|
||||
case 4 -> {
|
||||
int val = m_data.getInt(field.m_offset + arrIndex * 4);
|
||||
val &= (int) ~(field.getBitMask() << field.m_bitShift);
|
||||
val |= (int) ((value & field.getBitMask()) << field.m_bitShift);
|
||||
m_data.putInt(field.m_offset + arrIndex * 4, val);
|
||||
}
|
||||
case 8 -> {
|
||||
long val = m_data.getLong(field.m_offset + arrIndex * 8);
|
||||
val &= ~(field.getBitMask() << field.m_bitShift);
|
||||
val |= (value & field.getBitMask()) << field.m_bitShift;
|
||||
m_data.putLong(field.m_offset + arrIndex * 8, val);
|
||||
}
|
||||
default -> throw new IllegalStateException("invalid field size");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -27,43 +27,24 @@ public class Lexer {
|
||||
} while (m_current == ' ' || m_current == '\t' || m_current == '\n' || m_current == '\r');
|
||||
m_tokenStart = m_pos - 1;
|
||||
|
||||
switch (m_current) {
|
||||
case '[':
|
||||
return TokenKind.kLeftBracket;
|
||||
case ']':
|
||||
return TokenKind.kRightBracket;
|
||||
case '{':
|
||||
return TokenKind.kLeftBrace;
|
||||
case '}':
|
||||
return TokenKind.kRightBrace;
|
||||
case ':':
|
||||
return TokenKind.kColon;
|
||||
case ';':
|
||||
return TokenKind.kSemicolon;
|
||||
case ',':
|
||||
return TokenKind.kComma;
|
||||
case '=':
|
||||
return TokenKind.kEquals;
|
||||
case '-':
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
return scanInteger();
|
||||
case '\0':
|
||||
return TokenKind.kEndOfInput;
|
||||
default:
|
||||
return switch (m_current) {
|
||||
case '[' -> TokenKind.kLeftBracket;
|
||||
case ']' -> TokenKind.kRightBracket;
|
||||
case '{' -> TokenKind.kLeftBrace;
|
||||
case '}' -> TokenKind.kRightBrace;
|
||||
case ':' -> TokenKind.kColon;
|
||||
case ';' -> TokenKind.kSemicolon;
|
||||
case ',' -> TokenKind.kComma;
|
||||
case '=' -> TokenKind.kEquals;
|
||||
case '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' -> scanInteger();
|
||||
case '\0' -> TokenKind.kEndOfInput;
|
||||
default -> {
|
||||
if (Character.isLetter(m_current) || m_current == '_') {
|
||||
return scanIdentifier();
|
||||
yield scanIdentifier();
|
||||
}
|
||||
return TokenKind.kUnknown;
|
||||
}
|
||||
yield TokenKind.kUnknown;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user