gKitGL
|
00001 00002 #ifndef _IOFILE_H 00003 #define _IOFILE_H 00004 00005 #include <cassert> 00006 #include "IOFileSystem.h" 00007 00008 00009 namespace gk 00010 { 00011 00012 class IOFileInfo; 00013 class IOFileManager; 00014 00015 //! representation interne de l'etat (taille + date) d'un fichier charge par l'application. 00016 //! IOFileManager conserve la description de tous les fichiers charges par l'application. 00017 class IOFile 00018 { 00019 // non copyable 00020 IOFile( ); 00021 IOFile( const IOFile& ); 00022 IOFile& operator=( const IOFile& ); 00023 00024 public: 00025 std::string filename; //!< nom du fichier. 00026 IOInfo info; //!< taille + date fichier. 00027 00028 IOFile( const std::string& _filename, const IOInfo& _info= IOInfo() ) 00029 : 00030 filename(_filename), 00031 info(_info) 00032 {} 00033 }; 00034 00035 00036 //! descripteur de fichier charge par l'application. 00037 //! (representation publique). 00038 class IOFileInfo 00039 { 00040 public: 00041 IOFile *file; //!< identifiant du fichier. 00042 IOInfo info; //!< version du fichier lu par l'application. 00043 00044 //! constructeur par defaut. 00045 IOFileInfo( ) 00046 : 00047 file(NULL), 00048 info() 00049 {} 00050 00051 //! constructeur. 00052 IOFileInfo( IOFile *_file, const IOInfo& _info ) 00053 : 00054 file(_file), 00055 info(_info) 00056 {} 00057 00058 //! constructeur. 00059 IOFileInfo( IOFile *_file ) 00060 : 00061 file(_file), 00062 info() 00063 { 00064 if(file != NULL) 00065 info= _file->info; 00066 } 00067 00068 ~IOFileInfo( ) {} 00069 00070 IOFileInfo( const IOFileInfo& b ) 00071 : 00072 file(b.file), 00073 info(b.info) 00074 {} 00075 00076 IOFileInfo& operator=( const IOFileInfo & b ) 00077 { 00078 file= b.file; 00079 info= b.info; 00080 return *this; 00081 } 00082 00083 //! renvoie vrai si le descripteur de fichier est correct / initialise. 00084 bool isValid( ) const 00085 { 00086 return (file != NULL); 00087 } 00088 00089 //! renvoie 1 si le fichier a ete modifie depuis son chargement par l'application. 00090 int modified( ) const 00091 { 00092 if(file == NULL) 00093 return -1; 00094 00095 // compare la date des infos a celles du fichier 00096 return (info != file->info) ? 1 : 0; 00097 } 00098 00099 //! met a jour le descripteur. 00100 int update( ) 00101 { 00102 if(file == NULL) 00103 return -1; 00104 00105 info= file->info; 00106 return 0; 00107 } 00108 00109 //! renvoie le nom du fichier designe par le descripteur. 00110 const std::string& filename( ) const 00111 { 00112 assert(file != NULL); 00113 return file->filename; 00114 } 00115 }; 00116 00117 } // namespace gk 00118 00119 #endif