1
2use std::io;
3
4use conversions::u::*;
5use conversions::i::*;
6use conversions::f::*;
7
8pub trait Read
9{
10 fn read_usize(&mut self)-> io::Result<usize>;
12 fn read_isize(&mut self)-> io::Result<isize>;
13
14 fn read_u8(&mut self)-> io::Result<u8>;
16 fn read_i8(&mut self)-> io::Result<i8>;
17
18 fn read_u16(&mut self)-> io::Result<u16>;
20 fn read_i16(&mut self)-> io::Result<i16>;
21
22 fn read_u32(&mut self)-> io::Result<u32>;
24 fn read_i32(&mut self)-> io::Result<i32>;
25 fn read_f32(&mut self)-> io::Result<f32>;
26
27 fn read_u64(&mut self)-> io::Result<u64>;
29 fn read_i64(&mut self)-> io::Result<i64>;
30 fn read_f64(&mut self)-> io::Result<f64>;
31}
32
33impl<T> Read for T
34 where T: io::Read
35{
36 #[cfg(target_pointer_width = "64")]
40 fn read_usize(&mut self)-> io::Result<usize>
41 {
42 let num = self.read_u64()?;
43 Ok(num as usize)
44 }
45
46 #[cfg(target_pointer_width = "32")]
47 fn read_usize(&mut self)-> io::Result<usize>
48 {
49 let num = self.read_u32()?;
50 Ok(num as usize)
51 }
52
53 #[cfg(target_pointer_width = "64")]
54 fn read_isize(&mut self) -> io::Result<isize>
55 {
56 let num = self.read_i64()?;
57 Ok(num as isize)
58 }
59
60 #[cfg(target_pointer_width = "32")]
61 fn read_isize(&mut self) -> io::Result<isize>
62 {
63 let num = self.read_i32()?;
64 Ok(num as isize)
65 }
66
67 fn read_u8(&mut self)-> io::Result<u8>
71 {
72 let mut buf: [u8; 1] = [0; 1];
73 self.read_exact(&mut buf)?;
74 Ok(buf[0])
75 }
76
77 fn read_i8(&mut self)-> io::Result<i8>
78 {
79 let num = self.read_u8()?;
80 Ok(num as i8)
81 }
82
83 fn read_u16(&mut self)-> io::Result<u16>
87 {
88 let mut buf: [u8; 2] = [0; 2];
89 self.read_exact(&mut buf)?;
90 Ok(bytes_to_u16(&buf))
91 }
92
93 fn read_i16(&mut self)-> io::Result<i16>
94 {
95 let mut buf: [u8; 2] = [0; 2];
96 self.read_exact(&mut buf)?;
97 Ok(bytes_to_i16(&buf))
98 }
99
100 fn read_u32(&mut self)-> io::Result<u32>
104 {
105 let mut buf: [u8; 4] = [0; 4];
106 self.read_exact(&mut buf)?;
107 Ok(bytes_to_u32(&buf))
108 }
109
110 fn read_i32(&mut self)-> io::Result<i32>
111 {
112 let mut buf: [u8; 4] = [0; 4];
113 self.read_exact(&mut buf)?;
114 Ok(bytes_to_i32(&buf))
115 }
116
117 fn read_f32(&mut self)-> io::Result<f32>
118 {
119 let mut buf: [u8; 4] = [0; 4];
120 self.read_exact(&mut buf)?;
121 Ok(bytes_to_f32(&buf))
122 }
123
124 fn read_u64(&mut self)-> io::Result<u64>
128 {
129 let mut buf: [u8; 8] = [0; 8];
130 self.read_exact(&mut buf)?;
131 Ok(bytes_to_u64(&buf))
132 }
133
134 fn read_i64(&mut self)-> io::Result<i64>
135 {
136 let mut buf: [u8; 8] = [0; 8];
137 self.read_exact(&mut buf)?;
138 Ok(bytes_to_i64(&buf))
139 }
140
141 fn read_f64(&mut self)-> io::Result<f64>
142 {
143 let mut buf: [u8; 8] = [0; 8];
144 self.read_exact(&mut buf)?;
145 Ok(bytes_to_f64(&buf))
146 }
147}
148
149