Refactor: Use enum values in KeyValue.Kind

instead of maintaining a separate set of constants and a conversion
function.
This commit is contained in:
Jules Aguillon 2022-11-13 15:19:50 +01:00
parent e213834f67
commit 22a7df6632
2 changed files with 25 additions and 39 deletions

View File

@ -19,7 +19,7 @@ public class Emoji
protected Emoji(String name, String bytecode, String desc) protected Emoji(String name, String bytecode, String desc)
{ {
_name = name; _name = name;
_kv = new KeyValue(bytecode, KeyValue.KIND_STRING, 0, 0); _kv = new KeyValue(bytecode, KeyValue.Kind.String, 0, 0);
_desc = desc; _desc = desc;
emojis_by_name.put(name, this); emojis_by_name.put(name, this);
} }

View File

@ -52,6 +52,11 @@ final class KeyValue
FN, // Must be placed last to be applied first FN, // Must be placed last to be applied first
} }
public static enum Kind
{
Char, String, Keyevent, Event, Modifier
}
// Behavior flags. // Behavior flags.
public static final int FLAG_LATCH = (1 << 20); public static final int FLAG_LATCH = (1 << 20);
public static final int FLAG_LOCK = (1 << 21); public static final int FLAG_LOCK = (1 << 21);
@ -66,13 +71,6 @@ final class KeyValue
public static final int FLAG_LOCKED = (1 << 28); public static final int FLAG_LOCKED = (1 << 28);
public static final int FLAG_FAKE_PTR = (1 << 29); public static final int FLAG_FAKE_PTR = (1 << 29);
// Kinds
public static final int KIND_CHAR = (0 << 29);
public static final int KIND_STRING = (1 << 29);
public static final int KIND_KEYEVENT = (2 << 29);
public static final int KIND_EVENT = (3 << 29);
public static final int KIND_MODIFIER = (4 << 29);
// Ranges for the different components // Ranges for the different components
private static final int FLAGS_BITS = (0b111111111 << 20); // 9 bits wide private static final int FLAGS_BITS = (0b111111111 << 20); // 9 bits wide
private static final int KIND_BITS = (0b111 << 29); // 3 bits wide private static final int KIND_BITS = (0b111 << 29); // 3 bits wide
@ -85,29 +83,12 @@ final class KeyValue
private final String _symbol; private final String _symbol;
/** This field encodes three things: /** This field encodes three things: Kind, flags and value. */
- The kind
- The flags
- The value for Char, Event and Modifier keys.
*/
private final int _code; private final int _code;
public static enum Kind
{
Char, String, Keyevent, Event, Modifier
}
public Kind getKind() public Kind getKind()
{ {
switch (_code & KIND_BITS) return Kind.values()[(_code & KIND_BITS) >>> 29];
{
case KIND_CHAR: return Kind.Char;
case KIND_STRING: return Kind.String;
case KIND_KEYEVENT: return Kind.Keyevent;
case KIND_EVENT: return Kind.Event;
case KIND_MODIFIER: return Kind.Modifier;
default: throw new RuntimeException("Corrupted kind flags");
}
} }
public int getFlags() public int getFlags()
@ -154,12 +135,12 @@ final class KeyValue
/* Update the char and the symbol. */ /* Update the char and the symbol. */
public KeyValue withChar(char c) public KeyValue withChar(char c)
{ {
return new KeyValue(String.valueOf(c), KIND_CHAR, c, getFlags()); return new KeyValue(String.valueOf(c), Kind.Char, c, getFlags());
} }
public KeyValue withString(String s) public KeyValue withString(String s)
{ {
return new KeyValue(s, KIND_STRING, 0, getFlags()); return new KeyValue(s, Kind.String, 0, getFlags());
} }
public KeyValue withSymbol(String s) public KeyValue withSymbol(String s)
@ -169,7 +150,7 @@ final class KeyValue
public KeyValue withKeyevent(int code) public KeyValue withKeyevent(int code)
{ {
return new KeyValue(_symbol, KIND_KEYEVENT, code, getFlags()); return new KeyValue(_symbol, Kind.Keyevent, code, getFlags());
} }
public KeyValue withFlags(int f) public KeyValue withFlags(int f)
@ -201,32 +182,37 @@ final class KeyValue
_code = kind | flags | value; _code = kind | flags | value;
} }
public KeyValue(String s, Kind k, int v, int f)
{
this(s, (k.ordinal() << 29), v, f);
}
public static KeyValue getKeyByName(String name) public static KeyValue getKeyByName(String name)
{ {
KeyValue kv = keys.get(name); KeyValue kv = keys.get(name);
if (kv != null) if (kv != null)
return kv; return kv;
if (name.length() == 1) if (name.length() == 1)
return new KeyValue(name, KIND_CHAR, name.charAt(0), 0); return new KeyValue(name, Kind.Char, name.charAt(0), 0);
else else
return new KeyValue(name, KIND_STRING, 0, 0); return new KeyValue(name, Kind.String, 0, 0);
} }
private static void addKey(String name, String symbol, int kind, int code, int flags) private static void addKey(String name, String symbol, Kind kind, int code, int flags)
{ {
keys.put(name, new KeyValue(symbol, kind, code, flags)); keys.put(name, new KeyValue(symbol, kind, code, flags));
} }
private static void addCharKey(String name, String symbol, char c, int flags) private static void addCharKey(String name, String symbol, char c, int flags)
{ {
addKey(name, symbol, KIND_CHAR, c, flags); addKey(name, symbol, Kind.Char, c, flags);
} }
private static void addModifierKey(String name, String symbol, Modifier m, int flags) private static void addModifierKey(String name, String symbol, Modifier m, int flags)
{ {
if (symbol.length() > 1) if (symbol.length() > 1)
flags |= FLAG_SMALLER_FONT; flags |= FLAG_SMALLER_FONT;
addKey(name, symbol, KIND_MODIFIER, m.ordinal(), addKey(name, symbol, Kind.Modifier, m.ordinal(),
FLAG_LATCH | FLAG_SPECIAL | FLAG_SECONDARY | flags); FLAG_LATCH | FLAG_SPECIAL | FLAG_SECONDARY | flags);
} }
@ -237,13 +223,13 @@ final class KeyValue
private static void addDiacritic(String name, int symbol, Modifier m) private static void addDiacritic(String name, int symbol, Modifier m)
{ {
addKey(name, String.valueOf((char)symbol), KIND_MODIFIER, m.ordinal(), addKey(name, String.valueOf((char)symbol), Kind.Modifier, m.ordinal(),
FLAG_LATCH | FLAG_SPECIAL | FLAG_KEY_FONT); FLAG_LATCH | FLAG_SPECIAL | FLAG_KEY_FONT);
} }
private static void addEventKey(String name, String symbol, Event e, int flags) private static void addEventKey(String name, String symbol, Event e, int flags)
{ {
addKey(name, symbol, KIND_EVENT, e.ordinal(), flags | FLAG_SPECIAL | FLAG_SECONDARY); addKey(name, symbol, Kind.Event, e.ordinal(), flags | FLAG_SPECIAL | FLAG_SECONDARY);
} }
private static void addEventKey(String name, int symbol, Event e, int flags) private static void addEventKey(String name, int symbol, Event e, int flags)
@ -253,7 +239,7 @@ final class KeyValue
private static void addKeyeventKey(String name, String symbol, int code, int flags) private static void addKeyeventKey(String name, String symbol, int code, int flags)
{ {
addKey(name, symbol, KIND_KEYEVENT, code, flags | FLAG_SECONDARY); addKey(name, symbol, Kind.Keyevent, code, flags | FLAG_SECONDARY);
} }
private static void addKeyeventKey(String name, int symbol, int code, int flags) private static void addKeyeventKey(String name, int symbol, int code, int flags)
@ -268,7 +254,7 @@ final class KeyValue
placeholders (it is the empty string). */ placeholders (it is the empty string). */
private static void addPlaceholderKey(String name) private static void addPlaceholderKey(String name)
{ {
addKey(name, "", KIND_STRING, placeholder_unique_id++, 0); addKey(name, "", Kind.String, placeholder_unique_id++, 0);
} }
static static