1 // -*- C++ -*-
2 //==============================================================================================
3 //
4 //	This file is part of LiDIA --- a library for computational number theory
5 //
6 //	Copyright (c) 1994--2001 the LiDIA Group.  All rights reserved.
7 //
8 //	See http://www.informatik.tu-darmstadt.de/TI/LiDIA/
9 //
10 //----------------------------------------------------------------------------------------------
11 //
12 //	$Id: file_io_class.h,v 2.4 2002/06/24 09:41:36 lidiaadm Exp $
13 //
14 //	Author	: Frank Lehmann (FL), Markus Maurer (MM),
15 //                Thomas Papanikolaou (TP), Patrick Theobald (PT)
16 //	Changes	: See CVS log
17 //
18 //==============================================================================================
19 
20 
21 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
22 // *
23 // *    File        :  file_io_class < T >
24 // *
25 // *    Description :  -) definition of template class 'file_io_class < T > '
26 // *			  to provide functions to write or read elements
27 // *			  of any type T to or from files, respectively
28 // *
29 // *		       -) to use this class, a none built-in type T
30 // *			  must support the functions
31 // *			       - print_to_file()
32 // *			       - scan_from_file()
33 // *			       - write_to_file()
34 // *			       - read_from_file()
35 // *
36 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
37 
38 
39 #ifndef LIDIA_FILE_IO_CLASS_H_GUARD_
40 #define LIDIA_FILE_IO_CLASS_H_GUARD_
41 
42 
43 
44 #include	<cstdio>
45 
46 
47 
48 #ifdef LIDIA_NAMESPACE
49 namespace LiDIA {
50 # define IN_NAMESPACE_LIDIA
51 #endif
52 
53 
54 
55 template< class T > class  file_io_class
56 {
57 public:
58 
print_to_file(T & t,FILE * fp)59 	static void print_to_file(T & t , FILE * fp)
60 	{
61 		t.print_to_file(fp);
62 	}
63 
scan_from_file(T & t,FILE * fp)64 	static void scan_from_file (T & t , FILE * fp)
65 	{
66 		t.scan_from_file (fp);
67 	}
68 
write_to_file(T & t,FILE * fp)69 	static void write_to_file (T & t , FILE * fp)
70 	{
71 		t.write_to_file (fp);
72 	}
73 
read_from_file(T & t,FILE * fp)74 	static void read_from_file (T & t , FILE * fp)
75 	{
76 		t.read_from_file (fp);
77 	}
78 };
79 
80 
81 
82 template<>
83 class file_io_class< char >
84 {
85 public:
86 
print_to_file(char & t,FILE * fp)87 	static void print_to_file (char & t , FILE * fp)
88 	{
89 		fprintf (fp , "%c" , t);
90 	}
91 
scan_from_file(char & t,FILE * fp)92 	static void scan_from_file (char & t , FILE * fp)
93 	{
94 		fscanf (fp , "%c" , &t);
95 	}
96 
write_to_file(char & t,FILE * fp)97 	static void write_to_file (char & t , FILE * fp)
98 	{
99 		fwrite (&t , sizeof (char) , 1 , fp);
100 	}
101 
read_from_file(char & t,FILE * fp)102 	static void read_from_file (char & t , FILE * fp)
103 	{
104 		fread (&t , sizeof (char) , 1 , fp);
105 	}
106 };
107 
108 
109 
110 template<>
111 class file_io_class< unsigned char >
112 {
113 public:
114 
print_to_file(unsigned char & t,FILE * fp)115 	static void print_to_file (unsigned char & t , FILE * fp)
116 	{
117 		fprintf (fp , "%c" , t);
118 	}
119 
scan_from_file(unsigned char & t,FILE * fp)120 	static void scan_from_file (unsigned char & t , FILE * fp)
121 	{
122 		fscanf (fp , "%c" , &t);
123 	}
124 
write_to_file(unsigned char & t,FILE * fp)125 	static void write_to_file (unsigned char & t , FILE * fp)
126 	{
127 		fwrite (&t , sizeof (unsigned char) , 1 , fp);
128 	}
129 
read_from_file(unsigned char & t,FILE * fp)130 	static void read_from_file (unsigned char & t , FILE * fp)
131 	{
132 		fread (&t , sizeof (unsigned char) , 1 , fp);
133 	}
134 };
135 
136 
137 
138 template<>
139 class file_io_class< double >
140 {
141 public:
142 
print_to_file(double & t,FILE * fp)143 	static void print_to_file (double & t , FILE * fp)
144 	{
145 		fprintf (fp , "%f" , t);
146 	}
147 
scan_from_file(double & t,FILE * fp)148 	static void scan_from_file (double & t , FILE * fp)
149 	{
150 		fscanf (fp , "%lf" , &t);
151 	}
152 
write_to_file(double & t,FILE * fp)153 	static void write_to_file (double & t , FILE * fp)
154 	{
155 		fwrite (&t , sizeof (double) , 1 , fp);
156 	}
157 
read_from_file(double & t,FILE * fp)158 	static void read_from_file (double & t , FILE * fp)
159 	{
160 		fread (&t , sizeof (double) , 1 , fp);
161 	}
162 };
163 
164 
165 
166 template<>
167 class file_io_class< float >
168 {
169 public:
170 
print_to_file(float & t,FILE * fp)171 	static void print_to_file (float & t , FILE * fp)
172 	{
173 		fprintf (fp , "%f" , t);
174 	}
175 
scan_from_file(float & t,FILE * fp)176 	static void scan_from_file (float & t , FILE * fp)
177 	{
178 		fscanf (fp , "%f" , &t);
179 	}
180 
write_to_file(float & t,FILE * fp)181 	static void write_to_file (float & t , FILE * fp)
182 	{
183 		fwrite (&t , sizeof (float) , 1 , fp);
184 	}
185 
read_from_file(float & t,FILE * fp)186 	static void read_from_file (float & t , FILE * fp)
187 	{
188 		fread (&t , sizeof (float) , 1 , fp);
189 	}
190 };
191 
192 
193 
194 template<>
195 class file_io_class< int >
196 {
197 public:
198 
print_to_file(int & t,FILE * fp)199 	static void print_to_file (int & t , FILE * fp)
200 	{
201 		fprintf (fp , "%d" , t);
202 	}
203 
scan_from_file(int & t,FILE * fp)204 	static void scan_from_file (int & t , FILE * fp)
205 	{
206 		fscanf (fp , "%d" , &t);
207 	}
208 
write_to_file(int & t,FILE * fp)209 	static void write_to_file (int & t , FILE * fp)
210 	{
211 		fwrite (&t , sizeof (int) , 1 , fp);
212 	}
213 
read_from_file(int & t,FILE * fp)214 	static void read_from_file (int & t , FILE * fp)
215 	{
216 		fread (&t , sizeof (int) , 1 , fp);
217 	}
218 };
219 
220 
221 
222 template<>
223 class file_io_class< unsigned int >
224 {
225 public:
226 
print_to_file(unsigned int & t,FILE * fp)227 	static void print_to_file (unsigned int & t , FILE * fp)
228 	{
229 		fprintf (fp , "%u" , t);
230 	}
231 
scan_from_file(unsigned int & t,FILE * fp)232 	static void scan_from_file (unsigned int & t , FILE * fp)
233 	{
234 		fscanf (fp , "%u" , &t);
235 	}
236 
write_to_file(unsigned int & t,FILE * fp)237 	static void write_to_file (unsigned int & t , FILE * fp)
238 	{
239 		fwrite (&t , sizeof (unsigned int) , 1 , fp);
240 	}
241 
read_from_file(unsigned int & t,FILE * fp)242 	static void read_from_file (unsigned int & t , FILE * fp)
243 	{
244 		fread (&t , sizeof (unsigned int) , 1 , fp);
245 	}
246 };
247 
248 
249 
250 template<>
251 class file_io_class< long >
252 {
253 public:
254 
print_to_file(long & t,FILE * fp)255 	static void print_to_file (long & t , FILE * fp)
256 	{
257 		fprintf (fp , "%ld" , t);
258 	}
259 
scan_from_file(long & t,FILE * fp)260 	static void scan_from_file (long & t , FILE * fp)
261 	{
262 		fscanf (fp , "%ld" , &t);
263 	}
264 
write_to_file(long & t,FILE * fp)265 	static void write_to_file (long & t , FILE * fp)
266 	{
267 		fwrite (&t , sizeof (long) , 1 , fp);
268 	}
269 
read_from_file(long & t,FILE * fp)270 	static void read_from_file (long & t , FILE * fp)
271 	{
272 		fread (&t , sizeof (long) , 1 , fp);
273 	}
274 };
275 
276 
277 
278 template<>
279 class file_io_class< unsigned long >
280 {
281 public:
282 
print_to_file(unsigned long & t,FILE * fp)283 	static void print_to_file (unsigned long & t , FILE * fp)
284 	{
285 		fprintf (fp , "%lu" , t);
286 	}
287 
scan_from_file(unsigned long & t,FILE * fp)288 	static void scan_from_file (unsigned long & t , FILE * fp)
289 	{
290 		fscanf (fp , "%lu" , &t);
291 	}
292 
write_to_file(unsigned long & t,FILE * fp)293 	static void write_to_file (unsigned long & t , FILE * fp)
294 	{
295 		fwrite (&t , sizeof (unsigned long) , 1 , fp);
296 	}
297 
read_from_file(unsigned long & t,FILE * fp)298 	static void read_from_file (unsigned long & t , FILE * fp)
299 	{
300 		fread (&t , sizeof (unsigned long) , 1 , fp);
301 	}
302 };
303 
304 
305 
306 #ifdef LIDIA_NAMESPACE
307 }	// end of namespace LiDIA
308 # undef IN_NAMESPACE_LIDIA
309 #endif
310 
311 
312 
313 #endif	// LIDIA_FILE_IO_CLASS_H_GUARD_
314