ref: 28844433e49e746b81360a3a8d544b155d763095
parent: 1d36cdecdbc83a18ce4f96819ccf18955bf3b9f5
author: Ori Bernstein <[email protected]>
date: Tue Sep 10 07:51:56 EDT 2013
Add be/le integer writing functions.
--- a/bio.myr
+++ b/bio.myr
@@ -39,6 +39,8 @@
const getc : (f : file# -> char)
/* typed binary reads */
+ generic putbe : (f : file#, v : @a::(tctest,tcnum,tcint) -> std.size)
+ generic putle : (f : file#, v : @a::(tctest,tcnum,tcint) -> std.size)
generic getbe : (f : file# -> @a::(tctest,tcnum,tcint))
generic getle : (f : file# -> @a::(tctest,tcnum,tcint))
@@ -202,6 +204,25 @@
-> c
;;
-> -1
+}
+
+generic putle = {f, v : @a::(tcnum,tcint,tctest)
+ var i
+
+ for i = 0; i < sizeof(@a); i++
+ putb(f, (v & 0xff) castto(byte))
+ v >>= 8
+ ;;
+ -> sizeof(@a)
+}
+
+generic putbe = {f, v : @a::(tcnum,tcint,tctest)
+ var i
+
+ for i = sizeof(@a); i != 0; i--
+ putb(f, ((v >> (i - 1)*8) & 0xff) castto(byte))
+ ;;
+ -> sizeof(@a)
}
generic getbe = {f -> @a::(tcnum,tcint,tctest)