gKitGL
IOFile.h
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
 All Classes Namespaces Functions Variables Typedefs Enumerator Friends