Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/libraries/src/core/DynLibManager.cc @ 5629

Last change on this file since 5629 was 5626, checked in by landauf, 15 years ago

Added a dynamic library loader (more or less a copy of Ogre::DynLibManager but with some adjustments for Orxonox). This allows us to load plugins at runtime. Plugin-libraries must be declared with the "PLUGIN" switch in ORXONOX_ADD_LIBRARY in CMake.

File size: 2.8 KB
Line 
1/*
2-----------------------------------------------------------------------------
3This source file is part of OGRE
4    (Object-oriented Graphics Rendering Engine)
5For the latest info, see http://www.ogre3d.org/
6
7Copyright (c) 2000-2006 Torus Knot Software Ltd
8Also see acknowledgements in Readme.html
9
10This program is free software; you can redistribute it and/or modify it under
11the terms of the GNU Lesser General Public License as published by the Free Software
12Foundation; either version 2 of the License, or (at your option) any later
13version.
14
15This program is distributed in the hope that it will be useful, but WITHOUT
16ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
17FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
18
19You should have received a copy of the GNU Lesser General Public License along with
20this program; if not, write to the Free Software Foundation, Inc., 59 Temple
21Place - Suite 330, Boston, MA 02111-1307, USA, or go to
22http://www.gnu.org/copyleft/lesser.txt.
23
24You may alternatively use this source under the terms of a specific version of
25the OGRE Unrestricted License provided you have obtained such a license from
26Torus Knot Software Ltd.
27-----------------------------------------------------------------------------
28*/
29
30// 08/11/2009: Small adjustments for Orxonox by Fabian 'x3n' Landau
31
32#include "DynLibManager.h"
33
34#include "DynLib.h"
35
36namespace orxonox
37{
38    //-----------------------------------------------------------------------
39    //! Static pointer to the singleton
40    DynLibManager* DynLibManager::singletonPtr_s  = 0;
41
42    //-----------------------------------------------------------------------
43        DynLibManager::DynLibManager()
44        {
45        }
46        //-----------------------------------------------------------------------
47    DynLib* DynLibManager::load( const std::string& filename)
48    {
49                DynLibList::iterator i = mLibList.find(filename);
50                if (i != mLibList.end())
51                {
52                        return i->second;
53                }
54                else
55                {
56                DynLib* pLib = new DynLib(filename);
57                        pLib->load();
58                mLibList[filename] = pLib;
59                return pLib;
60                }
61    }
62        //-----------------------------------------------------------------------
63        void DynLibManager::unload(DynLib* lib)
64        {
65                DynLibList::iterator i = mLibList.find(lib->getName());
66                if (i != mLibList.end())
67                {
68                        mLibList.erase(i);
69                }
70                lib->unload();
71                delete lib;
72        }
73        //-----------------------------------------------------------------------
74    DynLibManager::~DynLibManager()
75    {
76        // Unload & delete resources in turn
77        for( DynLibList::iterator it = mLibList.begin(); it != mLibList.end(); ++it )
78        {
79            it->second->unload();
80            delete it->second;
81        }
82
83        // Empty the list
84        mLibList.clear();
85    }
86}
Note: See TracBrowser for help on using the repository browser.