mirror of
https://github.com/ilyakooo0/nixpkgs.git
synced 2024-12-27 05:43:50 +03:00
lib: add the toHex and toBase utility functions
`toHex` converts the given positive integer to a string of the hexadecimal representation of that integer. For example: ``` toHex 0 => "0" toHex 16 => "10" toHex 250 => "FA" ``` `toBase base i` converts the positive integer `i` to a list of it digits in the given `base`. For example: ``` toBase 10 123 => [ 1 2 3 ] toBase 2 6 => [ 1 1 0 ] toBase 16 250 => [ 15 10 ] ```
This commit is contained in:
parent
d0c12dc612
commit
00022fbeda
@ -67,7 +67,7 @@ let
|
|||||||
inherit (trivial) id const pipe concat or and bitAnd bitOr bitXor
|
inherit (trivial) id const pipe concat or and bitAnd bitOr bitXor
|
||||||
bitNot boolToString mergeAttrs flip mapNullable inNixShell min max
|
bitNot boolToString mergeAttrs flip mapNullable inNixShell min max
|
||||||
importJSON warn info showWarnings nixpkgsVersion version mod compare
|
importJSON warn info showWarnings nixpkgsVersion version mod compare
|
||||||
splitByAndCompare functionArgs setFunctionArgs isFunction;
|
splitByAndCompare functionArgs setFunctionArgs isFunction toHex toBase;
|
||||||
inherit (fixedPoints) fix fix' converge extends composeExtensions
|
inherit (fixedPoints) fix fix' converge extends composeExtensions
|
||||||
makeExtensible makeExtensibleWithCustomName;
|
makeExtensible makeExtensibleWithCustomName;
|
||||||
inherit (attrsets) attrByPath hasAttrByPath setAttrByPath
|
inherit (attrsets) attrByPath hasAttrByPath setAttrByPath
|
||||||
|
@ -102,6 +102,16 @@ runTests {
|
|||||||
expected = 9;
|
expected = 9;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
testToHex = {
|
||||||
|
expr = toHex 250;
|
||||||
|
expected = "FA";
|
||||||
|
};
|
||||||
|
|
||||||
|
testToBase = {
|
||||||
|
expr = toBase 2 6;
|
||||||
|
expected = [ 1 1 0 ];
|
||||||
|
};
|
||||||
|
|
||||||
# STRINGS
|
# STRINGS
|
||||||
|
|
||||||
testConcatMapStrings = {
|
testConcatMapStrings = {
|
||||||
|
@ -332,4 +332,55 @@ rec {
|
|||||||
*/
|
*/
|
||||||
isFunction = f: builtins.isFunction f ||
|
isFunction = f: builtins.isFunction f ||
|
||||||
(f ? __functor && isFunction (f.__functor f));
|
(f ? __functor && isFunction (f.__functor f));
|
||||||
|
|
||||||
|
/* Convert the given positive integer to a string of its hexadecimal
|
||||||
|
representation. For example:
|
||||||
|
|
||||||
|
toHex 0 => "0"
|
||||||
|
|
||||||
|
toHex 16 => "10"
|
||||||
|
|
||||||
|
toHex 250 => "FA"
|
||||||
|
*/
|
||||||
|
toHex = i:
|
||||||
|
let
|
||||||
|
toHexDigit = d:
|
||||||
|
if d < 10
|
||||||
|
then toString d
|
||||||
|
else
|
||||||
|
{
|
||||||
|
"10" = "A";
|
||||||
|
"11" = "B";
|
||||||
|
"12" = "C";
|
||||||
|
"13" = "D";
|
||||||
|
"14" = "E";
|
||||||
|
"15" = "F";
|
||||||
|
}.${toString d};
|
||||||
|
in
|
||||||
|
lib.concatMapStrings toHexDigit (toBase 16 i);
|
||||||
|
|
||||||
|
/* `toBase base i` converts the positive integer i to a list of its
|
||||||
|
digits in the given base. For example:
|
||||||
|
|
||||||
|
toBase 10 123 => [ 1 2 3 ]
|
||||||
|
|
||||||
|
toBase 2 6 => [ 1 1 0 ]
|
||||||
|
|
||||||
|
toBase 16 250 => [ 15 10 ]
|
||||||
|
*/
|
||||||
|
toBase = base: i:
|
||||||
|
let
|
||||||
|
go = i:
|
||||||
|
if i < base
|
||||||
|
then [i]
|
||||||
|
else
|
||||||
|
let
|
||||||
|
r = i - ((i / base) * base);
|
||||||
|
q = (i - r) / base;
|
||||||
|
in
|
||||||
|
[r] ++ go q;
|
||||||
|
in
|
||||||
|
assert (base >= 2);
|
||||||
|
assert (i >= 0);
|
||||||
|
lib.reverseList (go i);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user