From dec92d392e59075ceee750b4b816a84c873a5212 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Thu, 31 Mar 2011 11:54:52 -0700 Subject: stdlib: Add a write_be_uint() function to writers --- src/lib/io.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/lib') diff --git a/src/lib/io.rs b/src/lib/io.rs index 84de1815..11e6408c 100644 --- a/src/lib/io.rs +++ b/src/lib/io.rs @@ -345,6 +345,7 @@ type writer = impure fn write_bytes(vec[u8] bytes); impure fn write_le_uint(uint n, uint size); impure fn write_le_int(int n, uint size); + impure fn write_be_uint(uint n, uint size); }; fn uint_to_le_bytes(uint n, uint size) -> vec[u8] { @@ -357,6 +358,16 @@ fn uint_to_le_bytes(uint n, uint size) -> vec[u8] { ret bytes; } +fn uint_to_be_bytes(uint n, uint size) -> vec[u8] { + let vec[u8] bytes = vec(); + auto i = (size - 1u) as int; + while (i >= 0) { + bytes += vec(((n >> ((i * 8) as uint)) & 255u) as u8); + i -= 1; + } + ret bytes; +} + state obj new_writer(buf_writer out) { fn get_buf_writer() -> buf_writer { ret out; @@ -383,6 +394,9 @@ state obj new_writer(buf_writer out) { impure fn write_le_int(int n, uint size) { out.write(uint_to_le_bytes(n as uint, size)); } + impure fn write_be_uint(uint n, uint size) { + out.write(uint_to_be_bytes(n, size)); + } } // FIXME: Remove me once objects are exported. -- cgit v1.2.3