ref: 7f27f03b1887e599d6e9be6644895e8ab2bd5940
parent: da811fdf191b82d2706f86b82c39f9f6eb1dbb4b
author: Ori Bernstein <ori@eigenstate.org>
date: Mon Jan 19 18:19:07 EST 2015
Add putint.myr. Forgot to add the int packing and unpacking code. NB, the function names may need a bit of rethink.
--- /dev/null
+++ b/libstd/putint.myr
@@ -1,0 +1,44 @@
+use "types.use"
+use "die.use"
+
+pkg std =
+ generic putle64 : (buf : byte[:], v : @a::(numeric,integral) -> size)
+ generic putbe64 : (buf : byte[:], v : @a::(numeric,integral) -> size)
+ generic putle32 : (buf : byte[:], v : @a::(numeric,integral) -> size)
+ generic putbe32 : (buf : byte[:], v : @a::(numeric,integral) -> size)
+ generic putle16 : (buf : byte[:], v : @a::(numeric,integral) -> size)
+ generic putbe16 : (buf : byte[:], v : @a::(numeric,integral) -> size)
+ generic putle8 : (buf : byte[:], v : @a::(numeric,integral) -> size)
+ generic putbe8 : (buf : byte[:], v : @a::(numeric,integral) -> size)
+;;
+
+generic putle64 = {buf, v; -> putle(buf, v castto(uint64), 8)}
+generic putbe64 = {buf, v; -> putbe(buf, v castto(uint64), 8)}
+generic putle32 = {buf, v; -> putle(buf, v castto(uint64), 4)}
+generic putbe32 = {buf, v; -> putbe(buf, v castto(uint64), 4)}
+generic putle16 = {buf, v; -> putle(buf, v castto(uint64), 2)}
+generic putbe16 = {buf, v; -> putbe(buf, v castto(uint64), 2)}
+generic putle8 = {buf, v; -> putle(buf, v castto(uint64), 1)}
+generic putbe8 = {buf, v; -> putbe(buf, v castto(uint64), 1)}
+
+const putbe = {buf, val, n
+ var i, k
+
+ assert(buf.len >= n, "buffer too small")
+ for i = 0; i < n; i++
+ k = val >> (8*(n-i-1))
+ buf[i] = (k & 0xff) castto(byte)
+ ;;
+ -> n castto(size)
+}
+
+const putle = {buf, val, n
+ var i
+
+ assert(buf.len >= n, "buffer too small")
+ for i = 0; i < n; i++
+ buf[i] = (val & 0xff) castto(byte)
+ val >>= 8
+ ;;
+ -> n castto(size)
+}