You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
15 lines
417 B
15 lines
417 B
export interface EnumLike {
|
|
[key: number]: string | number;
|
|
}
|
|
|
|
export const bitwiseEncode = (enumValues: number[]): number => {
|
|
return enumValues.reduce((acc, curr) => acc | curr, 0);
|
|
};
|
|
|
|
export const bitwiseDecode = (
|
|
value: number,
|
|
decodeEnum: EnumLike,
|
|
): number[] => {
|
|
const enumValues = Object.keys(decodeEnum).map(Number).filter(Boolean);
|
|
return enumValues.map((b) => value & b).filter(Boolean);
|
|
};
|
|
|