Modifier operation enumeration

This commit is contained in:
Vftdan 2024-08-17 15:17:49 +02:00
parent f67a8842cc
commit 5048728022
1 changed files with 59 additions and 0 deletions

View File

@ -11,6 +11,12 @@ typedef struct {
typedef int32_t Modifier; typedef int32_t Modifier;
typedef enum {
MODOP_SET,
MODOP_UNSET,
MODOP_TOGGLE,
} ModifierOperation;
#define EMPTY_MODIFIER_SET ((ModifierSet) {.byte_length = 0, .bits = NULL}) #define EMPTY_MODIFIER_SET ((ModifierSet) {.byte_length = 0, .bits = NULL})
#define MODIFIER_MAX ((Modifier) 0xFFFFF) #define MODIFIER_MAX ((Modifier) 0xFFFFF)
@ -142,4 +148,57 @@ modifier_set_toggle(ModifierSet * target, Modifier element)
target->bits[byte_index] ^= mask; target->bits[byte_index] ^= mask;
} }
__attribute__((unused)) inline static void
modifier_set_operation_from(ModifierSet * target, const ModifierSet source, ModifierOperation op)
{
switch (op) {
case MODOP_SET:
modifier_set_set_from(target, source);
return;
case MODOP_UNSET:
modifier_set_unset_from(target, source);
return;
case MODOP_TOGGLE:
modifier_set_toggle_from(target, source);
return;
}
}
__attribute__((unused)) inline static void
modifier_set_operation(ModifierSet * target, Modifier element, ModifierOperation op)
{
switch (op) {
case MODOP_SET:
modifier_set_set(target, element);
return;
case MODOP_UNSET:
modifier_set_unset(target, element);
return;
case MODOP_TOGGLE:
modifier_set_toggle(target, element);
return;
}
}
__attribute__((unused)) inline static ModifierOperation
modifier_operation_parse(const char* name)
{
if (!name) {
return -1;
}
if (strcmp(name, "set") == 0) {
return MODOP_SET;
}
if (strcmp(name, "unset") == 0) {
return MODOP_UNSET;
}
if (strcmp(name, "reset") == 0) {
return MODOP_UNSET;
}
if (strcmp(name, "togggle") == 0) {
return MODOP_TOGGLE;
}
return -1;
}
#endif /* end of include guard: MODIFIERS_H_ */ #endif /* end of include guard: MODIFIERS_H_ */