00001 /*! \file Ini.h 00002 \brief Gestion de fichier ini. 00003 00004 Utilisation de fichier structurer .ini. 00005 00006 \author aerith (http://aerith.fr) 00007 \version 1.0 00008 \date 01/07/2008 00009 */ 00010 00011 #ifndef INCLUDE_RSRC_INI 00012 #define INCLUDE_RSRC_INI 00013 00014 #include "IniSection.h" 00015 #include "../Surcouche/SurcoucheMultitache.h" 00016 #include "../Tools/Tools.h" 00017 #include <stdio.h> 00018 #include <vector> 00019 #include <string> 00020 00021 using namespace std; 00022 00023 00024 #define INI_BUFFERSIZE 10240 /*!< Taille buffer de travaille. */ 00025 00026 //! Gestion de fichier ini. 00027 /*! Utilisation de fichier structurer .ini. 00028 */ 00029 class Ini 00030 { 00031 private : 00032 string fileName; /*!< Nom du fichier. */ 00033 std::vector<IniSection *> sections; /*!< Chaque lignes est une section. */ 00034 static unsigned int iniInstance; /*!< Compte les instance de la class. */ 00035 static MUTEX iniMutex; /*!< Utiliser des que l'on accede à un fichier. */ 00036 IniSection *sectionVide; /*!< Section vide pour évité les segfault. */ 00037 00038 public : 00039 /*! Charge le fichier ini en mémoire. 00040 \param pName nom du fichier ini 00041 */ 00042 Ini(const char *pName); 00043 00044 /*! Libere proprement la mémoire, ne sauve pas dans le fichier. 00045 \sa SaveIni(). 00046 */ 00047 ~Ini(); 00048 00049 //! Charge le fichier à la suite. 00050 /*! Charge le fichier à la suite des données actuelles. 00051 */ 00052 void Load(); 00053 00054 //! Sauve les données. 00055 /*! Sauve toutes les données dans le fichier ini. 00056 */ 00057 void Save(); 00058 00059 //! Ajoute une section. 00060 /*! Ajoute une section. 00061 \param pName nom de la section 00062 \sa DelSection(), GetSection() et GetNbSection(). 00063 */ 00064 void AddSection(const char *pName); 00065 00066 //! Supprime une section. 00067 /*! Supprime la section étant à la position \a iPos. 00068 \param iPos position de la section. 00069 \sa AddSection(), GetSection() et GetNbSection(). 00070 */ 00071 void DelSection(unsigned int iPos); 00072 00073 //! Supprime une section. 00074 /*! Supprime la section de nom \a pName. 00075 \param pName nom de la section. 00076 \sa AddSection(), GetSection() et GetNbSection(). 00077 */ 00078 void DelSection(const char *pName); 00079 00080 //! Retourne une section par sa position. 00081 /*! Permet l'acces à la section étant à la position \a iPos. 00082 \param iPos position de la section. 00083 \return pointeur sur la class de la section. 00084 \sa AddSection(), DelSection() et GetNbSection(). 00085 */ 00086 IniSection *GetSection(unsigned int iPos); 00087 00088 //! Retourne une section par son nom. 00089 /*! Permet l'acces à la section ayant le nom \a pName. 00090 \param pName nom de la section. 00091 \param iOcur numéro de l'occurence si plusieur section on le même nom. 00092 \return pointeur sur la class de la section. 00093 \sa AddSection(), DelSection() et GetNbSection(). 00094 */ 00095 IniSection *GetSection(const char *pName, unsigned int iOcur = 0); 00096 00097 //! Retourne le nom d'une section. 00098 /*! Retourne le nom de la section étant à la position \a iPos. 00099 \param iPos position de la section. 00100 \return nom de la section. 00101 */ 00102 const char *GetSectionName(unsigned int iPos); 00103 00104 //! Retourne le nombre de section. 00105 /*! Retourne le nombre de section contenu dans le fichier ini. 00106 \return nombre de section dans le fichier ini. 00107 \sa AddSection(), DelSection() et GetSection(). 00108 */ 00109 inline unsigned int GetNbSection() 00110 { 00111 return sections.size(); 00112 }; 00113 00114 //! Retourne le nombre de section. 00115 /*! Retourne le nombre de section ayant pour nom \a pName contenu dans le fichier ini. 00116 \param pName nom de la section. 00117 \return nombre de section dans le fichier ini se nomant \a pName. 00118 \sa AddSection(), DelSection() et GetSection(). 00119 */ 00120 unsigned int GetNbSection(const char *pName); 00121 00122 //! Retourne le nombre d'instance. 00123 /*! Retourne le nombre d'instance de la class (pour multitache). 00124 \return nombre d'instance de la class. 00125 */ 00126 inline unsigned int GetNbInstance() 00127 { 00128 return iniInstance; 00129 }; 00130 00131 //! Retourne le nom du fichier. 00132 /*! Retourne le nom le nom du fichier ini \a name. 00133 \return un pointeur sur le nom du fichier ini \a name. 00134 \sa SetName(). 00135 */ 00136 inline const char *GetName() 00137 { 00138 return fileName.data(); 00139 }; 00140 00141 //! Définie le nom du fichier. 00142 /*! Définie le nom du fichier ini \a name. 00143 \param pName nom du fichier. 00144 \return un pointeur sur le nom du fichier \a name. 00145 \sa GetName(). 00146 */ 00147 inline const char *SetName(const char *pName) 00148 { 00149 fileName = pName; 00150 return fileName.data(); 00151 }; 00152 }; 00153 00154 00155 #endif 00156