file_utils/
read.rs

1
2use std::io;
3
4use conversions::u::*;
5use conversions::i::*;
6use conversions::f::*;
7
8pub trait Read
9{
10	// Conditional
11	fn read_usize(&mut self)-> io::Result<usize>;
12	fn read_isize(&mut self)-> io::Result<isize>;
13
14	// 8-bit
15	fn read_u8(&mut self)-> io::Result<u8>;
16	fn read_i8(&mut self)-> io::Result<i8>;
17
18	// 16-bit
19	fn read_u16(&mut self)-> io::Result<u16>;
20	fn read_i16(&mut self)-> io::Result<i16>;
21
22	// 32-bit
23	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	// 64-bit
28	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	/*
37		Based on architecture
38	*/
39	#[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	/*
68		8-bit
69	*/
70	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	/*
84		16-bit
85	*/
86	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	/*
101		32-bit
102	*/
103	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	/*
125		64-bit
126	*/
127	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