Kukatz 3D  0.1
Török Attila szakdolgozata
projects/Kukatz 3D/src/singleton.inl
00001 /*
00002  * singleton.inl
00003  * Copyright (c) 2011 - TÖRÖK Attila (torokati44@gmail.com)
00004  *
00005  * This software is provided 'as-is', without any express or implied
00006  * warranty. In no event will the authors be held liable for any damages
00007  * arising from the use of this software.
00008  *
00009  * Permission is granted to anyone to use this software for any purpose,
00010  * including commercial applications, and to alter it and redistribute it
00011  * freely, subject to the following restrictions:
00012  *
00013  *   1. The origin of this software must not be misrepresented; you must not
00014  *      claim that you wrote the original software. If you use this software
00015  *      in a product, an acknowledgment in the product documentation would be
00016  *      appreciated but is not required.
00017  *
00018  *   2. Altered source versions must be plainly marked as such, and must not be
00019  *      misrepresented as being the original software.
00020  *
00021  *   3. This notice may not be removed or altered from any source
00022  *      distribution.
00023  */
00024 
00025 // This file is based on OGRE's OgreSingleton.h which can be found here:
00026 // http://ogre.svn.sourceforge.net/viewvc/ogre/branches/v1-7/OgreMain/include/OgreSingleton.h?revision=9527&view=markup
00027 // Thanks!
00028 
00029 #include <cassert>
00030 
00031 template< class T >
00032 T* Singleton< T >::msp_instance = 0;
00033 
00034 template< class T>
00035 Singleton< T >::Singleton()
00036 {
00037         assert(!msp_instance);
00038         msp_instance = static_cast< T* >(this);
00039 }
00040 
00041 template< class T >
00042 T& Singleton< T >::instance()
00043 {
00044         assert(msp_instance);
00045         return *msp_instance;
00046 }
00047 
00048 template< class T >
00049 T* Singleton< T >::instance_ptr()
00050 {
00051         return msp_instance;
00052 }
00053 
00054 template< class T >
00055 T& Singleton< T >::operator () ()
00056 {
00057         return &msp_instance;
00058 }
00059 
00060 template< class T >
00061 Singleton< T >::~Singleton() // DO NOT have to delete msp_instance, it is
00062 {                            // being deconstructed right now...
00063         assert(msp_instance);
00064         msp_instance = 0;
00065 }
 Összes Osztályok