Page principale | Liste alphabétique | Liste des classes | Liste des fichiers | Membres de classe | Membres de fichier | Pages associées

DataBaseTable.h

Aller à la documentation de ce fichier.
00001 /*! \file DataBaseTable.h
00002     \brief Gestion base de données.
00003 
00004     Gestion d'une table dans la base de données \a DataBase.
00005 
00006     \author     aerith (www.aerith.fr)
00007     \version    1.0
00008     \date       01/11/2007
00009 */
00010 
00011 #ifndef INCLUDE_RSRC_DB_TABLE
00012 #define INCLUDE_RSRC_DB_TABLE
00013 
00014 #include    "../Tools/Tools.h"
00015 #include    "../Surcouche/SurcoucheMultitache.h"
00016 #include    "DataBaseEntry.h"
00017 #include    <stdio.h>
00018 #include    <stdlib.h>
00019 
00020 #define     DB_BUFFERSIZE   10240   /*!< Taille buffer de travaille.                            */
00021 #define     DB_REPERTOIRE   256     /*!< Taille max du nom du repertoire de la base.            */
00022 #define     DB_NAME         32      /*!< Taille max du nom de la table.                         */
00023 
00024 //! Gestion d'une table.
00025 /*! Gestion d'une table dans la base de données \a DataBase.
00026 */
00027 class DataBaseTable
00028 {
00029 private :
00030     char                            Repertoire[DB_REPERTOIRE];  /*!< Repertoire où ce trouve la base.           */
00031     int                             Id;             /*!< Id de la table.                                        */
00032     char                            Name[DB_NAME];  /*!< Nom de la table.                                       */
00033     int                             NbData;         /*!< Nombre de data dans une entrée.                        */
00034     std::vector<char *>             Labels;         /*!< Chaque ligne est un label.                             */
00035     int                             NbEntry;        /*!< Nombre d'entrée dans la table.                         */
00036     std::vector<DataBaseEntry *>    Entrys;         /*!< Chaque ligne est une entrée.                           */
00037     int                             IdMax;          /*!< Id maximum des entrée de la table.                     */
00038     int                             AllocSize;      /*!< Nombre d'entrée allouée.                               */
00039     static int                      DBTableCount;   /*!< Compte les instance de la class.                       */
00040     static MUTEX                    DBMutexTable;   /*!< Utiliser des que l'on accede à un fichier "DB.sys".    */
00041 
00042     //! Charge le fichier des entrées.
00043     /*! Charge le fichier "x.dbt", d'info sur les entrées et la table.
00044         \return code d'erreur
00045     */
00046     int     LoadEntrys();
00047 
00048 public  :
00049     /*! Charge la table en mémoire avec des paramétres par defauts.
00050         \param pRepertoire repertoire de la base.
00051         \param iId Id de la table.
00052         \param iNbData nombre de champs.
00053         \param pName nom de la table.
00054     */
00055     DataBaseTable(char *pRepertoire, int iId, int iNbData = 0, char *pName = NULL);
00056 
00057     /*! Sauve la table dans un fichier.
00058     */
00059     ~DataBaseTable();
00060 
00061     //! Ajoute une entrée.
00062     /*! Ajoute une entrée avec un nouvelle Id.
00063         \return Code d'erreur.
00064         \sa DelEntry(), GetEntry() et GetNbEntry().
00065     */
00066     int     AddEntry();
00067 
00068     //! Supprime une entrée.
00069     /*! Supprime l'entrée ayant l'id \a iId.
00070         \param iId Id de l'entrée.
00071         \return Code d'erreur.
00072         \sa AddEntry() et GetNbEntry().
00073     */
00074     int     DelEntry(int iId);
00075 
00076     //! Retourne une entrée.
00077     /*! Permet l'acces à l'entrée ayant l'id \a iId.
00078         \param iId Id de l'entrée.
00079         \return pointeur sur la classe \a DataBaseEntry de l'entrée.
00080         \sa GetEntryNo().
00081     */
00082     inline DataBaseEntry    *GetEntry(int iId)
00083     {
00084         for(int i = 0; i < NbEntry; i++)
00085         {
00086             if(Entrys[i]->GetId() == iId)
00087                 return Entrys[i];
00088         }
00089 
00090         return NULL;
00091     };
00092 
00093     //! Retourne une entrée.
00094     /*! Permet l'acces à l'entrée étant a la position \a iPos.
00095         \param iPos position de l'entrée.
00096         \return pointeur sur la classe \a DataBaseEntry de l'entrée.
00097         \sa GetEntry().
00098     */
00099     inline DataBaseEntry    *GetEntryNo(int iPos)
00100     {
00101         if(iPos < NbEntry)
00102             return Entrys[iPos];
00103 
00104         return NULL;
00105     };
00106 
00107     //! Retourne l'id d'une entrée.
00108     /*! Retourne l'id de l'entrée étant a la position \a iPos.
00109         \param iPos position de l'entrée.
00110         \return Id de l'entrée.
00111     */
00112     inline int      GetEntryId(int iPos)
00113     {
00114         if(iPos < NbEntry)
00115             return Entrys[iPos]->GetId();
00116 
00117         return 0;
00118     };
00119 
00120     //! Retourne une data d'une entrée.
00121     /*! Permet l'acces à la data à la position \a iPos de l'entrée ayant l'id \a iId.
00122         \param iId Id de l'entrée.
00123         \param iPos position du label.
00124         \return pointeur sur la classe \a DataBaseData de la data.
00125         \sa GetDataNo().
00126     */
00127     inline DataBaseData     *GetData(int iId, int iPos)
00128     {
00129         if(iPos < NbData)
00130         {
00131             for(int i = 0; i < NbEntry; i++)
00132             {
00133                 if(Entrys[i]->GetId() == iId)
00134                     return Entrys[i]->GetData(iPos);
00135             }
00136         }
00137 
00138         return NULL;
00139     };
00140 
00141     //! Retourne une data d'une entrée.
00142     /*! Permet l'acces à la data de label \a pName de l'entrée ayant l'id \a iId.
00143         \param iId Id de l'entrée.
00144         \param pName nom du label.
00145         \return pointeur sur la classe \a DataBaseData de la data.
00146         \sa GetDataNo().
00147     */
00148     inline DataBaseData     *GetData(int iId, char *pName)
00149     {
00150         for(int i = 0; i < NbEntry; i++)
00151         {
00152             if(Entrys[i]->GetId() == iId)
00153             {
00154                 for(int j = 0; j < NbData; j++)
00155                 {
00156                     if(!strcmp(Labels[j], pName))
00157                         return Entrys[i]->GetData(j);
00158                 }
00159             }
00160         }
00161 
00162         return NULL;
00163     };
00164 
00165     //! Retourne une data d'une entrée.
00166     /*! Permet l'acces à la data à la position \a iPos de l'entrée étant à la position \a iPos.
00167         \param iPos position de l'entrée.
00168         \param iPos2 position du label.
00169         \return pointeur sur la classe \a DataBaseData de la data.
00170         \sa GetData().
00171     */
00172     inline DataBaseData     *GetDataNo(int iPos, int iPos2)
00173     {
00174         if((iPos < NbEntry) && (iPos2 < NbData))
00175             return Entrys[iPos]->GetData(iPos2);
00176 
00177         return NULL;
00178     };
00179 
00180     //! Retourne une data d'une entrée.
00181     /*! Permet l'acces à la data de label \a pName de l'entrée étant à la position \a iPos.
00182         \param iPos position de l'entrée.
00183         \param pName nom du label.
00184         \return pointeur sur la classe \a DataBaseData de la data.
00185         \sa GetData().
00186     */
00187     inline DataBaseData     *GetDataNo(int iPos, char *pName)
00188     {
00189         if(iPos < NbEntry)
00190         {
00191             for(int i = 0; i < NbData; i++)
00192             {
00193                 if(!strcmp(Labels[i], pName))
00194                     return Entrys[iPos]->GetData(i);
00195             }
00196         }
00197 
00198         return NULL;
00199     };
00200 
00201     //! Retourne le nombre d'entrée.
00202     /*! Retourne le nombre d'entrée contenu dans la table.
00203         \return nombre d'entrée dans la table.
00204         \sa AddEntry(), DelEntry(), GetEntryNo() et GetEntry().
00205     */
00206     inline int      GetNbEntry()
00207     {
00208         return NbEntry;
00209     };
00210 
00211     //! Retourne l'id de la table.
00212     /*! Retourne l'id \a Id de la table.
00213         \return l'id \a Id de la table.
00214         \sa GetNbEntry().
00215     */
00216     inline int      GetId()
00217     {
00218         return Id;
00219     };
00220 
00221     //! Retourne le nom de la table.
00222     /*! Retourne le nom \a Name de la table.
00223         \return un pointeur sur le nom \a Name de la table.
00224         \sa SetName().
00225     */
00226     inline char     *GetName()
00227     {
00228         return Name;
00229     };
00230 
00231     //! Définie le nom de la table.
00232     /*! Définie le nom \a Name de la table.
00233         \param pName nom de la table.
00234         \return un pointeur sur le nom \a Name de la table.
00235         \sa GetName().
00236     */
00237     inline char     *SetName(char *pName)
00238     {
00239         return strncpy(Name, pName, DB_NAME);
00240     };
00241 
00242     //! Retourne le nombre de data d'une entrée.
00243     /*! Retourne le nombre de data \a NbData d'une entrée de la table.
00244         \return le nombre de data d'une entrée de la table.
00245     */
00246     inline int      GetNbData()
00247     {
00248         return NbData;
00249     };
00250 
00251     //! Ajoute un label.
00252     /*! Ajoute le label \a pName à la table.
00253         \param pName nom du label.
00254         \return Code d'erreur.
00255         \sa DelLabel().
00256     */
00257     int     AddLabel(char *pName);
00258 
00259     //! Supprimse un label.
00260     /*! Supprime le label \a pName de la table.
00261         \param pName nom du label.
00262         \return Code d'erreur.
00263         \sa AddLabel().
00264     */
00265     int     DelLabel(char *pName);
00266 
00267     //! Retourne le nom d'un champ.
00268     /*! Retourne le nom du champ à la position \a iPos.
00269         \param iPos position du champ.
00270         \return un pointeur sur le nom du champ.
00271         \sa SetLabel().
00272     */
00273     inline char     *GetLabel(int iPos)
00274     {
00275         if(iPos < NbData)
00276             return Labels[iPos];
00277 
00278         return NULL;
00279     };
00280 
00281     //! Définie le nom d'un champ.
00282     /*! Définie le nom du champ à la position \a iPos.
00283         \param iPos position du champ.
00284         \param pName nom du champ.
00285         \return un pointeur sur le nom du champ.
00286         \sa GetLabel().
00287     */
00288     char    *SetLabel(int iPos, char *pName);
00289 
00290     //! Sauve le fichier des entrées.
00291     /*! Sauve le fichier "x.dbt", d'info sur les entrées et la table.
00292         \return code d'erreur
00293     */
00294     int     SaveEntrys();
00295 };
00296 
00297 #endif
00298 

Généré le Thu Jun 12 09:12:29 2008 pour A.I.F. par  doxygen 1.3.9.1