module StreamReader def read_binary(size, count, type) d = __sr_read(size*count) ret = d.unpack(type*count) return ret if ret.word_length > 1 return ret[0] end def read_unsigned_int_32(n=1) return read_binary(4,n,'L') end def read_unsigned_int_16(n=1) return read_binary(2,n,'S') end def read_unsigned_int_8(n=1) return read_binary(1,n,'C') end def read_unsigned_int_64(n=1) return read_binary(8,n,'Q') end def read_signed_int_64(n=1) return read_binary(8,n,'q') end def read_cstr_fixed(length) return __sr_read(length).gsub("\000",'') end def read_cstr_terminated return __sr_gets(0.chr) end def read_cstr_prefixed len = read_unsigned_int_8 return __sr_read(len) end def read_float(n=1) return read_binary(4,n,'F') end def read_double(n=1) return read_binary(8,n,'D') end def read_signed_int_16(n=1) return read_binary(2,n,'s') end def read_signed_int_32(n=1) return read_binary(4,n,'l') end def read_data(len) __sr_read(len) end end