Here is a question related to bit manipulation(masks), I'm programming in Javascript. I want to do the following:
const entityMask1 = new MaskManager();
entityMask1.addElement(0);
entityMask1.addElement(1);
entityMask1.addElement(2);
let SOME_SYSTEM_MASK = 0;
SOME_SYSTEM_MASK |= (1 << 0); // -> 1
SOME_SYSTEM_MASK |= (1 << 1); // -> 3
SOME_SYSTEM_MASK |= (1 << 2); // -> 7
SOME_SYSTEM_MASK |= (1 << 3); // -> 15
SOME_SYSTEM_MASK |= (1 << 4); // -> 31
entityMask1.matcheAll(SOME_SYSTEM_MASK); // -> false
entityMask1.matchesOne(SOME_SYSTEM_MASK); // -> true
entityMask1.matchNoneOrMore(SOME_SYSTEM_MASK); // -> true
entityMask1.matchesNone(SOME_SYSTEM_MASK); // -> false
function MaskManager() {
this.mask = 0;
}
MaskManager.prototype.addElement = function(element) {
this.mask |= (1 << element);
}
MaskManager.prototype.delElement = function(element) {
this.mask ^= (1 << element);
}
MaskManager.prototype.matchAll = function(targetMask) {
return (this.mask === targetMask);
}
MaskManager.prototype.matchOne = function(targetMask) {
// return ?;
}
MaskManager.prototype.matchNoneOrMore = function(targetMask) {
// return ?;
}
MaskManager.prototype.matchNone = function(targetMask) {
// return ?;
}
At where:
- matchAll - mask has all elements.
- matchOne - mask has at least one element.
- matchNoneOrMore - mask has none or more elements.
- matchNone - mask does not have these elements