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