/* Moonfall Copyright (C) 2008 Alex Yatskov This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #pragma once template Monostate::Monostate() : m_member(NULL) { } template Monostate::~Monostate() { Reset(); } template T* Monostate::operator ->() { return GetMemberSafe(); } template const T* Monostate::operator ->() const { return GetMemberSafe(); } template T& Monostate::operator *() { return *GetMemberSafe(); } template const T& Monostate::operator *() const { return *GetMemberSafe(); } template Monostate::operator T* () { return GetMemberSafe(); } template Monostate::operator const T* () const { return GetMemberSafe(); } template void Monostate::Reset() { if (m_member != NULL) { delete m_member; m_member = NULL; } } template const T* Monostate::GetMemberSafe() const { if (m_member == NULL) { m_member = new T(); } return m_member; } template T* Monostate::GetMemberSafe() { if (m_member == NULL) { m_member = new T(); } return m_member; }