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

ModuleDynamique.h

Aller à la documentation de ce fichier.
00001 /*! \file ModuleDynamique.h
00002     \brief Gestion de module dynamique.
00003 
00004     Permet l'utilisation de module dynamique comme simple classe. \n
00005 
00006     Dans le fichier conf : \n
00007     [moduleWIN] \n
00008     <nom>   =<fichier> \n
00009     [moduleNUX] \n
00010     <nom>   =<fichier> \n
00011 
00012 
00013     ex : \n
00014         [moduleWIN]
00015         test1   =modules/test.dll \n
00016         [moduleNUX]
00017         test1   =modules/test.so \n
00018 
00019     \author     aerith (www.aerith.fr)
00020     \version    1.0
00021     \date       01/11/2007
00022 */
00023 
00024 #ifndef INCLUDE_RSRC_MODULEDYNAMIQUE
00025 #define INCLUDE_RSRC_MODULEDYNAMIQUE
00026 
00027 #include    "../Tools/Tools.h"
00028 #include    "../Error/Error.h"
00029 #include    "../Surcouche/SurcoucheModule.h"
00030 #include    "../Surcouche/SurcoucheMultitache.h"
00031 #include    "../INI/Ini.h"
00032 #include    "ModuleDynamiqueModule.h"
00033 #include    <stdio.h>
00034 #include    <string.h>
00035 #include    <vector>
00036 #include    <stdlib.h>
00037 
00038 //! Gestion de module dynamique.
00039 /*! Permet l'utilisation de module dynamique comme simple classe.
00040 */
00041 class ModuleDynamique
00042 {
00043 private :
00044     static int                          NbModule;       /*!< Nombre de fonction importées.                  */
00045     static std::vector<ModuleDynamiqueModule *> Modules;        /*!< Chaque lignes est un module dynamique.         */
00046     static int                          ModuleInstance; /*!< Compte les instance de la class.               */
00047     static MUTEX                        ModuleMutex;    /*!< Utiliser des que l'on accede à un fichier.     */
00048 
00049 public  :
00050     /*! Initialise.
00051     */
00052     ModuleDynamique();
00053 
00054     /*! Libere proprement la mémoire, décharge les modules.
00055     */
00056     ~ModuleDynamique();
00057 
00058     //! Charge les modules.
00059     /*! Efectue une mise à jour, charge les modules depuis le fichier de configuration \a pFile et \n
00060         décharge ceux avec le paramètre 'u'.
00061         \param pFile fichier de configuration
00062         \return code d'erreur.
00063         \sa UnLoadModules().
00064     */
00065     int     LoadModules(char *pFile);
00066 
00067     //! Decharge tous les modules.
00068     /*! Decharge tous les modules.
00069         \return code d'erreur.
00070         \sa LoadModules().
00071     */
00072     int     UnLoadModules();
00073 
00074     //! Ajoute un module.
00075     /*! Ajoute un module de fichier \a pFile .
00076         \param pName nom du module
00077         \param pFile fichier du module
00078         \return code d'erreur.
00079         \sa DelModule(), GetModule() et GetNbModule().
00080     */
00081     int     AddModule(char *pName, char *pFile);
00082 
00083     //! Supprime un module.
00084     /*! Supprime le module étant à la position \a iPos.
00085         \param iPos position du module.
00086         \return code d'erreur.
00087         \sa AddModule(), GetModule() et GetNbModule().
00088     */
00089     int     DelModule(int iPos);
00090 
00091     //! Supprime un module.
00092     /*! Supprime le module de nom \a pName.
00093         \param pName nom du module.
00094         \return code d'erreur.
00095         \sa AddModule(), GetModule() et GetNbModule().
00096     */
00097     inline int      DelModule(char *pName)
00098     {
00099         for(int i = 0; i < NbModule; i++)
00100         {
00101             if(!strcmp(Modules[i]->GetName(), pName))
00102                 return DelModule(i);
00103         }
00104     };
00105 
00106     //! Retourne un module par sa position.
00107     /*! Permet l'acces au module étant a la position \a iPos.
00108         \param iPos position du module.
00109         \return pointeur sur la class du module.
00110         \sa AddModule(), DelModule() et GetNbModule().
00111     */
00112     inline ModuleDynamiqueModule        *GetModule(int iPos)
00113     {
00114         if(iPos < NbModule)
00115             return Modules[iPos];
00116 
00117         return NULL;
00118     };
00119 
00120     //! Retourne un module par son nom.
00121     /*! Permet l'acces au module ayant le nom \a pName que l'on a donnée.
00122         \param pName nom du module.
00123         \return pointeur sur la class du module.
00124         \sa AddModule(), DelModule() et GetNbModule().
00125     */
00126     inline ModuleDynamiqueModule        *GetModule(char *pName)
00127     {
00128         for(int i = 0; i < NbModule; i++)
00129         {
00130             if(!strcmp(Modules[i]->GetName(), pName))
00131                 return Modules[i];
00132         }
00133 
00134         return NULL;
00135     };
00136 
00137     //! Retourne le nombre de module.
00138     /*! Retourne le nombre de module géré.
00139         \return nombre de module géré.
00140         \sa AddModule(), DelModule() et GetModule().
00141     */
00142     inline int      GetNbModule()
00143     {
00144         return NbModule;
00145     };
00146 
00147     //! Retourne le nombre d'instance.
00148     /*! Retourne le nombre d'instance de la class (pour multitache).
00149         \return nombre d'instance de la class.
00150     */
00151     inline int      GetNbInstance()
00152     {
00153         return ModuleInstance;
00154     };
00155 };
00156 
00157 
00158 #endif
00159 

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