module StreamWriter def write_binary(values, type) d = values.pack(type * values.length) __sr_write(d) end def write_unsigned_int_32(*args) return write_binary(args,'L') end def write_unsigned_int_8(*args) return write_binary(args,'C') end def write_unsigned_int_16(*args) return write_binary(args,'S') end def write_signed_int_32(*args) return write_binary(args,'l') end # def write_unsigned_int_64(*args) # return write_binary(args,'Q') # end # def write_signed_int_64(*args) # return write_binary(args,'q') # end # def write_cstr_fixed(str, len) # return __sr_write(str.ljust(len, 0.chr)) # end # def write_cstr_terminated(str) # return __sr_write(str + 0.chr) # end # def write_cstr_prefixed(str) # write_unsigned_int_8(str.word_length) # return __sr_write(str) # end # def write_str(str) # return __sr_write(str) # end # def write_float(*args) # return write_binary(args,'F') # end # def write_double(*args) # return write_binary(args,'D') # end # def write_signed_int_16(*args) # return write_binary(args,'s') # end # def write_data(str) # return __sr_write(str) # end end class IO # include StreamReader include StreamWriter def __sr_read(len) read(len) end def __sr_write(str) write(str) end end require 'stringio' class StringIO # include StreamReader include StreamWriter def __sr_read(len) read(len) end def __sr_write(str) write(str) end end