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:
Gold856
2024-06-05 00:09:10 -04:00
committed by GitHub
parent d6b66bfa55
commit b99d9c1710
95 changed files with 957 additions and 1594 deletions

View File

@@ -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");
}
}

View File

@@ -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;
}
};
}
/**