00001 // Copyright (C) 2005, COIN-OR. All Rights Reserved. 00002 #ifndef CoinFileIO_H 00003 #define CoinFileIO_H 00004 00005 #include <string> 00006 00008 class CoinFileIOBase 00009 { 00010 public: 00013 CoinFileIOBase (const std::string &fileName); 00014 00016 ~CoinFileIOBase (); 00017 00019 const char *getFileName () const; 00020 00022 inline std::string getReadType () const 00023 { return readType_.c_str();}; 00024 protected: 00025 std::string readType_; 00026 private: 00027 CoinFileIOBase (); 00028 CoinFileIOBase (const CoinFileIOBase &); 00029 00030 std::string fileName_; 00031 }; 00032 00034 class CoinFileInput: public CoinFileIOBase 00035 { 00036 public: 00044 static CoinFileInput *create (const std::string &fileName); 00045 00048 CoinFileInput (const std::string &fileName); 00049 00051 virtual ~CoinFileInput (); 00052 00057 virtual int read (void *buffer, int size) = 0; 00058 00068 virtual char *gets (char *buffer, int size) = 0; 00069 }; 00070 00072 class CoinFileOutput: public CoinFileIOBase 00073 { 00074 public: 00075 00077 enum Compression { 00078 COMPRESS_NONE = 0, 00079 COMPRESS_GZIP = 1, 00080 COMPRESS_BZIP2 = 2 00081 }; 00082 00085 static bool compressionSupported (Compression compression); 00086 00097 static CoinFileOutput *create (const std::string &fileName, 00098 Compression compression); 00099 00102 CoinFileOutput (const std::string &fileName); 00103 00105 virtual ~CoinFileOutput (); 00106 00111 virtual int write (const void * buffer, int size) = 0; 00112 00120 virtual bool puts (const char *s); 00121 00123 inline bool puts (const std::string &s) 00124 { 00125 return puts (s.c_str ()); 00126 } 00127 }; 00128 /* Tests if file readable and may change name to add 00129 compression extension. Here to get ZLIB etc in one place 00130 Extended so it knows about directories on various platforms 00131 */ 00132 bool fileCoinReadable(std::string & name); 00133 #endif