// Copyright (C) 2015 Jérôme Leclercq // This file is part of the "Nazara Engine - Core module" // For conditions of distribution and use, see copyright notice in Config.hpp #include template struct NzImplInitializer; template struct NzImplInitializer { static bool Init() { if (T::Initialize()) { if (NzImplInitializer::Init()) return true; else T::Uninitialize(); } return false; } static void Uninit() { NzImplInitializer::Uninit(); T::Uninitialize(); } }; template<> struct NzImplInitializer<> { static bool Init() { return true; } static void Uninit() { } }; template NzInitializer::NzInitializer() { m_initialized = NzImplInitializer::Init(); } template NzInitializer::~NzInitializer() { if (m_initialized) NzImplInitializer::Uninit(); } template bool NzInitializer::IsInitialized() const { return m_initialized; } template NzInitializer::operator bool() const { return m_initialized; } #include