00001 /*! \file DataBase.h 00002 \brief Gestion base de données. 00003 00004 Gestionnaire de base de données avec notion de tables et entrée indexé et libélé. \n 00005 00006 Fichiers (dans le repertoire "DB"): \n 00007 00008 DB.sys : info sur la base \n 00009 int Id : Id d'une table \n 00010 int Size : taille du nom de la table \n 00011 char Name[Size] : nom de la table \n 00012 ... jusqu'a la fin pour chaque table \n 00013 00014 x.dbt : une table (x = Id de la table) \n 00015 int NbData : nombre de Data dans une entrée \n 00016 int Size : taille du nom du label \n 00017 char Name[Size] : nom du label \n 00018 ... NbData fois pour chaque label\n 00019 int NbEntry : nombre d'entrée \n 00020 int Id : Id de l'entrée \n 00021 int Size : taille de la data \n 00022 char Data[Size] : la data \n 00023 ... jusqu'a la fin pour chaque entrée \n 00024 00025 \author aerith (www.aerith.fr) 00026 \version 1.0 00027 \date 01/11/2007 00028 */ 00029 00030 #ifndef INCLUDE_RSRC_DB 00031 #define INCLUDE_RSRC_DB 00032 00033 #include "../Surcouche/SurcoucheFichier.h" 00034 #include "DataBaseTable.h" 00035 00036 00037 //! Gestion base de données. 00038 /*! Gestionnaire de base de données avec notion de tables et entrée indexer. 00039 */ 00040 class DataBase 00041 { 00042 private : 00043 char Repertoire[DB_REPERTOIRE]; /*!< Repertoire où ce trouve la base. */ 00044 int NbTable; /*!< Nombre de tables. */ 00045 std::vector<DataBaseTable *> Tables; /*!< Chaque lignes est une table. */ 00046 int IdMax; /*!< Contien l'Id maximum des tables. */ 00047 static int DBInstance; /*!< Compte les instance de la class. */ 00048 static MUTEX DBMutex; /*!< Utiliser des que l'on accede au fichier "DB.sys". */ 00049 00050 //! Charge le fichier des tables. 00051 /*! Charge le fichier "DB.sys", d'info sur les tables et la base en memoire. 00052 \return code d'erreur 00053 */ 00054 int LoadTables(); 00055 00056 //! Sauve le fichier des tables. 00057 /*! Sauve le fichier "DB.sys", d'info sur les tables et la base. 00058 \return code d'erreur 00059 */ 00060 int SaveTables(); 00061 00062 public : 00063 /*! Charge la base en mémoire. 00064 \param pRepertoire repertoire de la base. 00065 */ 00066 DataBase(char *pRepertoire); 00067 00068 /*! Libere proprement la mémoire, ne sauve pas la base dans les fichiers. 00069 \sa SaveBase(). 00070 */ 00071 ~DataBase(); 00072 00073 //! Ajoute une table. 00074 /*! Ajoute une table avec un nouvelle Id. 00075 \param pName nom de la table 00076 \param iNbData nombre de champs de la table. 00077 \return Code d'erreur. 00078 \sa DelTable(), GetTable(), GetTableNo() et GetNbTable(). 00079 */ 00080 int AddTable(char *pName, int iNbData); 00081 00082 //! Supprime une table. 00083 /*! Supprime la table ayant l'id \a iId. 00084 \param iId Id de la table. 00085 \return Code d'erreur. 00086 \sa AddTable(), GetTable(), GetTableNo() et GetNbTable(). 00087 */ 00088 int DelTable(int iId); 00089 00090 //! Supprime une table. 00091 /*! Supprime la table de nom \a pName. 00092 \param pName nom de la table. 00093 \return Code d'erreur 00094 \sa AddTable(), GetTable(), GetTableNo() et GetNbTable(). 00095 */ 00096 inline int DelTable(char *pName) 00097 { 00098 for(int i = 0; i < NbTable; i++) 00099 { 00100 if(!strcmp(Tables[i]->GetName(), pName)) 00101 return DelTable(Tables[i]->GetId()); 00102 } 00103 00104 return 0; 00105 }; 00106 00107 //! Retourne une table par son Id. 00108 /*! Permet l'acces à la table ayant l'id \a iId. 00109 \param iId Id de la table. 00110 \return pointeur sur la class de la table. 00111 \sa AddTable(), DelTable(), GetTable(), GetTableNo() et GetNbTable(). 00112 */ 00113 inline DataBaseTable *GetTable(int iId) 00114 { 00115 for(int i = 0; i < NbTable; i++) 00116 { 00117 if(Tables[i]->GetId() == iId) 00118 return Tables[i]; 00119 } 00120 00121 return NULL; 00122 }; 00123 00124 //! Retourne une table par son nom. 00125 /*! Permet l'acces à la table ayant le nom \a pName. 00126 \param pName nom de la table. 00127 \return pointeur sur la class de la table. 00128 \sa AddTable(), DelTable(), GetTable(), GetTableNo() et GetNbTable(). 00129 */ 00130 inline DataBaseTable *GetTable(char *pName) 00131 { 00132 for(int i = 0; i < NbTable; i++) 00133 { 00134 if(!strcmp(Tables[i]->GetName(), pName)) 00135 return Tables[i]; 00136 } 00137 00138 return NULL; 00139 }; 00140 00141 //! Retourne une table par sa position. 00142 /*! Permet l'acces à la table étant à la position \a iPos. 00143 \param iPos position de la table. 00144 \return pointeur sur la class de la table. 00145 \sa AddTable(), DelTable(), GetTable() et GetNbTable(). 00146 */ 00147 inline DataBaseTable *GetTableNo(int iPos) 00148 { 00149 if(iPos < NbTable) 00150 return Tables[iPos]; 00151 00152 return NULL; 00153 }; 00154 00155 //! Retourne le nombre de table. 00156 /*! Retourne le nombre de table contenu dans la base. 00157 \return nombre de table dans la base. 00158 \sa AddTable(), DelTable(), GetTable() et GetTableNo(). 00159 */ 00160 inline int GetNbTable() 00161 { 00162 return NbTable; 00163 }; 00164 00165 //! Retourne le nombre d'instance. 00166 /*! Retourne le nombre d'instance de la class (pour multitache). 00167 \return nombre d'instance de la class. 00168 */ 00169 inline int GetNbInstance() 00170 { 00171 return DBInstance; 00172 }; 00173 00174 //! Retourne le repertoire de la base. 00175 /*! Retourne le repertoire \a Repertoire de la base. 00176 \return pointeur sur \a Repertoire. 00177 */ 00178 inline char *GetBaseDir() 00179 { 00180 return Repertoire; 00181 }; 00182 00183 //! Sauve la base. 00184 /*! Sauve toute la base dans les fichiers "DB.sys" et "x.dbt". 00185 \return code d'erreur 00186 */ 00187 int SaveBase(); 00188 }; 00189 00190 #endif 00191