Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

OSGThreadManager.h

Go to the documentation of this file.
00001 /*---------------------------------------------------------------------------*\
00002  *                                OpenSG                                     *
00003  *                                                                           *
00004  *                                                                           *
00005  *             Copyright (C) 2000-2002 by the OpenSG Forum                   *
00006  *                                                                           *
00007  *                            www.opensg.org                                 *
00008  *                                                                           *
00009  *   contact: dirk@opensg.org, gerrit.voss@vossg.org, jbehr@zgdv.de          *
00010  *                                                                           *
00011 \*---------------------------------------------------------------------------*/
00012 /*---------------------------------------------------------------------------*\
00013  *                                License                                    *
00014  *                                                                           *
00015  * This library is free software; you can redistribute it and/or modify it   *
00016  * under the terms of the GNU Library General Public License as published    *
00017  * by the Free Software Foundation, version 2.                               *
00018  *                                                                           *
00019  * This library is distributed in the hope that it will be useful, but       *
00020  * WITHOUT ANY WARRANTY; without even the implied warranty of                *
00021  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU         *
00022  * Library General Public License for more details.                          *
00023  *                                                                           *
00024  * You should have received a copy of the GNU Library General Public         *
00025  * License along with this library; if not, write to the Free Software       *
00026  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.                 *
00027  *                                                                           *
00028 \*---------------------------------------------------------------------------*/
00029 /*---------------------------------------------------------------------------*\
00030  *                                Changes                                    *
00031  *                                                                           *
00032  *                                                                           *
00033  *                                                                           *
00034  *                                                                           *
00035  *                                                                           *
00036  *                                                                           *
00037 \*---------------------------------------------------------------------------*/
00038 
00039 #ifndef _OSGTHREADMANAGER_H_
00040 #define _OSGTHREADMANAGER_H_
00041 #ifdef __sgi
00042 #pragma once
00043 #endif
00044 
00045 #include <OSGBase.h>
00046 #include <OSGBaseTypes.h>
00047 #include <OSGBaseFunctions.h>
00048 #include <OSGIDStringLink.h>
00049 
00050 #if defined(OSG_USE_SPROC)
00051 #include <ulocks.h>
00052 #endif
00053 
00054 #include <map>
00055 
00056 #include <OSGBaseThread.h>
00057 #include <OSGBarrier.h>
00058 #include <OSGLock.h>
00059 #include <OSGLog.h>
00060 
00061 OSG_BEGIN_NAMESPACE
00062 
00063 //---------------------------------------------------------------------------
00064 //  Class
00065 //---------------------------------------------------------------------------
00066 
00071 template <class MPFieldT>
00072 class MPFieldStore
00073 {
00074     /*==========================  PUBLIC  =================================*/
00075 
00076   public:
00077 
00078     typedef typename MPFieldT::Type MPFieldType;
00079 
00080     /*---------------------------------------------------------------------*/
00084     MPFieldStore(void);
00085 
00087     /*---------------------------------------------------------------------*/
00091     virtual ~MPFieldStore(void);
00092 
00094     /*---------------------------------------------------------------------*/
00098     MPFieldT *getMPField   (const Char8    *szName,
00099                             const Char8    *szTypeName);
00100 
00101     MPFieldT *findMPField  (const Char8    *szName);
00102 
00103     void      removeMPField(      MPFieldT *pField);
00104 
00106     /*---------------------------------------------------------------------*/
00110     void clear(void);
00111 
00113     /*---------------------------------------------------------------------*/
00117     MPFieldType *findMPFieldType(const Char8 *szName) const;
00118 
00120     /*=========================  PROTECTED  ===============================*/
00121 
00122   protected:
00123 
00124     /*---------------------------------------------------------------------*/
00128     typedef std::map<IDStringLink, MPFieldType  *>  MPFieldTypeMap;
00129     typedef typename MPFieldTypeMap::iterator       MPFieldTypeMapIt;
00130 
00131     typedef typename MPFieldTypeMap::const_iterator MPFieldTypeMapCIt;
00132 
00133     typedef std::map<IDStringLink, MPFieldT     *>  MPFieldMap;
00134     typedef typename MPFieldMap::iterator           MPFieldMapIt;
00135 
00137     /*---------------------------------------------------------------------*/
00138 
00139     MPFieldTypeMap _mFieldTypeMap;
00140     MPFieldMap     _mFieldMap;
00141 
00142     UInt32 registerMPType(MPFieldType *pType);
00143 
00144     /*==========================  PRIVATE  ================================*/
00145 
00146   private:
00147 
00148     friend class ThreadManager;
00149 
00151     MPFieldStore   (const MPFieldStore &source);
00153     void operator =(const MPFieldStore &source);
00154 };
00155 
00156 
00157 
00158 
00159 //---------------------------------------------------------------------------
00160 //  Class
00161 //---------------------------------------------------------------------------
00162 
00166 class OSG_BASE_DLLMAPPING ThreadManager
00167 {
00168     /*==========================  PUBLIC  =================================*/
00169 
00170   public:
00171 
00172     /*---------------------------------------------------------------------*/
00176     typedef MPFieldStore<BaseThread> ThreadStore;
00177     typedef MPFieldStore<Barrier   > BarrierStore;
00178     typedef MPFieldStore<Lock      > LockStore;
00179     typedef MPFieldStore<LockPool  > LockPoolStore;
00180 
00182     /*---------------------------------------------------------------------*/
00186     static void           setAppThreadType(const Char8  *szAppThreadType);
00187 
00188     static ThreadManager *the             (      void                   );
00189 
00190     static BaseThread    *getAppThread    (      void                   );
00191 
00192     static void           setNumAspects   (      UInt32  uiNumApects    );
00193     static UInt32         getNumAspects   (      void                   );
00194 
00196     /*---------------------------------------------------------------------*/
00200     BaseThread   *getThread   (const Char8 *szName,
00201                                const Char8 *szTypeName = "OSGThread");
00202     Barrier      *getBarrier  (const Char8 *szName,
00203                                const Char8 *szTypeName = "OSGBarrier");
00204     Lock         *getLock     (const Char8 *szName,
00205                                const Char8 *szTypeName = "OSGLock");
00206     LockPool     *getLockPool (const Char8 *szName,
00207                                const Char8 *szTypeName = "OSGLockPool");
00208 
00209     BaseThread   *findThread  (const Char8 *szName);
00210     Barrier      *findBarrier (const Char8 *szName);
00211     Lock         *findLock    (const Char8 *szName);
00212     LockPool     *findLockPool(const Char8 *szName);
00213 
00214 #if defined(OSG_USE_SPROC)
00215 
00216     /*---------------------------------------------------------------------*/
00220     usptr_t *getArena(void);
00221 #endif
00222 
00224     /*=========================  PROTECTED  ===============================*/
00225 
00226   protected:
00227 
00228     static bool   initialize          (void                     );
00229     static bool   terminate           (void                     );
00230 
00231            void   removeThread        (BaseThread     *pThread  );
00232            void   removeBarrier       (Barrier        *pBarrier );
00233            void   removeLock          (Lock           *pLock    );
00234            void   removeLockPool      (LockPool       *pLockPool);
00235 
00236            UInt32 registerThreadType  (MPThreadType   *pType    );
00237            UInt32 registerBarrierType (MPBarrierType  *pType    );
00238            UInt32 registerLockType    (MPLockType     *pType    );
00239            UInt32 registerLockPoolType(MPLockPoolType *pType    );
00240 
00241            bool   init                (void                     );
00242            bool   shutdown            (void                     );
00243 
00244     /*---------------------------------------------------------------------*/
00248     ThreadManager(void);
00249 
00251     /*---------------------------------------------------------------------*/
00255     virtual ~ThreadManager(void);
00256 
00258     /*==========================  PRIVATE  ================================*/
00259 
00260   private:
00261 
00262     /*---------------------------------------------------------------------*/
00266     friend class MPThreadType;
00267     friend class MPBarrierType;
00268     friend class MPLockType;
00269     friend class MPLockPoolType;
00270 
00271     friend class BaseThread;
00272     friend class Barrier;
00273     friend class Lock;
00274     friend class LockPool;
00275 
00276     OSG_BASE_DLLMAPPING 
00277     friend bool osgInit(Int32 argc, Char8 **argv);
00278 
00279     OSG_BASE_DLLMAPPING 
00280     friend bool osgExit(void                    );
00281 
00283     /*---------------------------------------------------------------------*/
00287     static ThreadManager   *_pThreadManager;
00288     static BaseThread      *_pAppThread;
00289 
00290     static bool             _bShutdownInProgress;
00291 
00292     static UInt32          _uiNumAspects;
00293 
00294 #ifdef OSG_RUNTIME_NUM_ASPECTS
00295     static bool            _bNumAspectSet;
00296 #endif
00297 
00299     /*---------------------------------------------------------------------*/
00303     ThreadStore    _sThreadStore;
00304     BarrierStore   _sBarrierStore;
00305     LockStore      _sLockStore;
00306     LockPoolStore  _sLockPoolStore;
00307 
00308     Lock          *_storePLock;
00309 
00310     static Char8  *_szAppThreadType;
00311 
00312 #if defined(OSG_USE_SPROC)
00313     usptr_t *_pArena;
00314 #endif
00315 
00317     /*---------------------------------------------------------------------*/
00318 
00320     ThreadManager  (const ThreadManager &source);
00322     void operator =(const ThreadManager &source);
00323 };
00324 
00325 OSG_END_NAMESPACE
00326 
00327 #include <OSGThreadManager.inl>
00328 
00329 #define OSGTHREADMANAGER_HEADER_CVSID "@(#)$Id: $"
00330 
00331 #endif /* _OSGTHREADMANAGER_H_ */
00332 
00333 

Generated on Thu Aug 25 04:11:39 2005 for OpenSG by  doxygen 1.4.3