diff options
Diffstat (limited to 'npc/functions/bitwise.txt')
-rw-r--r-- | npc/functions/bitwise.txt | 66 |
1 files changed, 0 insertions, 66 deletions
diff --git a/npc/functions/bitwise.txt b/npc/functions/bitwise.txt deleted file mode 100644 index a2e57587..00000000 --- a/npc/functions/bitwise.txt +++ /dev/null @@ -1,66 +0,0 @@ -/** - * Gets a bitmasked value in from an integer. If the shift is omitted, it will - * be deduced from the mask. - * - * @arg 0 - the variable - * @arg 1 - mask - * @arg 2 - shift - */ -function script bitwise_get { - .@shift = getarg(2, 0); - - if (getargcount() < 3) { - // guess the shift from the mask: - for (.@shift = 0; .@shift < 32; ++.@shift) { - if ((getarg(1) & (1 << .@shift)) != 0) { - break; - } - } - } - - return (getarg(0) & getarg(1)) >> .@shift; -} - -/** - * sets a bitmasked value in a variable - * - * @arg 0 - the target variable - * @arg 1 - mask - * @arg 2 - shift - * @arg 3 - new value - * @return a reference to the variable - */ -function script bitwise_set { - if (getargcount() < 4) { - // guess the shift from the mask: - for (.@shift = 0; .@shift < 32; ++.@shift) { - if ((getarg(1) & (1 << .@shift)) != 0) { - break; - } - } - - return set(getarg(0), (getarg(0) & ~(getarg(1))) | (getarg(2, 0) << .@shift)); - } - - return set(getarg(0), (getarg(0) & ~(getarg(1))) | (getarg(3, 0) << getarg(2, 0))); -} - - -// bitmask_count(<int>) -// returns the number of bits set in <int> (up to 4096?) -function script bitmask_count { - .@n = getarg(0); // Number evaluated - .@p=0; // Bits set/unset - .@s=0; // Stack and Check - .@m=0; // Memory - - // Loop only as needed - while (.@s < .@n) { - .@s=2**.@m; - if (.@n & .@s) - .@p++; - .@m++; - } - return .@p; -} - |