Revert "lib: bitAnd, bitOr, bitXor"

This commit is contained in:
Profpatsch 2018-06-05 18:43:42 +02:00
parent 6842319f81
commit f98272d6e2
3 changed files with 4 additions and 62 deletions

View File

@ -56,10 +56,10 @@ let
hasAttr head isAttrs isBool isInt isList isString length hasAttr head isAttrs isBool isInt isList isString length
lessThan listToAttrs pathExists readFile replaceStrings seq lessThan listToAttrs pathExists readFile replaceStrings seq
stringLength sub substring tail; stringLength sub substring tail;
inherit (trivial) id const concat or and bitAnd bitOr bitXor inherit (trivial) id const concat or and boolToString mergeAttrs
boolToString mergeAttrs flip mapNullable inNixShell min max flip mapNullable inNixShell min max importJSON warn info
importJSON warn info nixpkgsVersion version mod compare nixpkgsVersion version mod compare splitByAndCompare
splitByAndCompare functionArgs setFunctionArgs isFunction; functionArgs setFunctionArgs isFunction;
inherit (fixedPoints) fix fix' extends composeExtensions inherit (fixedPoints) fix fix' extends composeExtensions
makeExtensible makeExtensibleWithCustomName; makeExtensible makeExtensibleWithCustomName;

View File

@ -45,21 +45,6 @@ runTests {
expected = true; expected = true;
}; };
testBitAnd = {
expr = (bitAnd 3 10);
expected = 2;
};
testBitOr = {
expr = (bitOr 3 10);
expected = 11;
};
testBitXor = {
expr = (bitXor 3 10);
expected = 9;
};
# STRINGS # STRINGS
testConcatMapStrings = { testConcatMapStrings = {

View File

@ -1,38 +1,4 @@
{ lib }: { lib }:
let
zipIntBits = f: x: y:
let
# (intToBits 6) -> [ 0 1 1 ]
intToBits = x:
if x==0 then
[]
else
let
headbit = if (x / 2) * 2 != x then 1 else 0; # x & 1
tailbits = if x < 0 then 9223372036854775807 + ((x+1) / 2) else x / 2; # x >>> 1
in
[headbit] ++ (intToBits tailbits);
# (bitsToInt [ 0 1 1 ]) -> 6
bitsToInt = l:
if l==[] then
0
else
(builtins.head l) + (2 * (bitsToInt (builtins.tail l)));
zipListsWith' = fst: snd:
if fst==[] && snd==[] then
[]
else if fst==[] then
[(f 0 (builtins.head snd))] ++ (zipListsWith' [] (builtins.tail snd))
else if snd==[] then
[(f (builtins.head fst) 0 )] ++ (zipListsWith' (builtins.tail fst) [] )
else
[(f (builtins.head fst) (builtins.head snd))] ++ (zipListsWith' (builtins.tail fst) (builtins.tail snd));
in
assert (builtins.isInt x) && (builtins.isInt y);
bitsToInt (zipListsWith' (intToBits x) (intToBits y));
in
rec { rec {
/* The identity function /* The identity function
@ -65,15 +31,6 @@ rec {
/* boolean and */ /* boolean and */
and = x: y: x && y; and = x: y: x && y;
/* bitwise and */
bitAnd = builtins.bitAnd or zipIntBits (a: b: if a==1 && b==1 then 1 else 0);
/* bitwise or */
bitOr = builtins.bitOr or zipIntBits (a: b: if a==1 || b==1 then 1 else 0);
/* bitwise xor */
bitXor = builtins.bitXor or zipIntBits (a: b: if a!=b then 1 else 0);
/* Convert a boolean to a string. /* Convert a boolean to a string.
Note that toString on a bool returns "1" and "". Note that toString on a bool returns "1" and "".
*/ */