//===-- MIUtilSingletonHelper.h ---------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #pragma once // In house headers: #include "MICmnResources.h" #include "MIUtilString.h" namespace MI { //++ //============================================================================ // Details: Short cut helper function to simplify repeated initialisation of // MI components (singletons) required by a client module. // Type: Template method. // Args: vErrorResrcId - (R) The string resource ID error message // identifier to place in errMsg. // vwrbOk - (RW) On input True = Try to initialize MI driver // module. // On output True = MI driver module initialise // successfully. // vwrErrMsg - (W) MI driver module initialise error description // on failure. // Return: MIstatus::success - Functional succeeded. // MIstatus::failure - Functional failed. //-- template bool ModuleInit(const MIint vErrorResrcId, bool &vwrbOk, CMIUtilString &vwrErrMsg) { if (vwrbOk && !T::Instance().Initialize()) { vwrbOk = MIstatus::failure; vwrErrMsg = CMIUtilString::Format( MIRSRC(vErrorResrcId), T::Instance().GetErrorDescription().c_str()); } return vwrbOk; } //++ //============================================================================ // Details: Short cut helper function to simplify repeated shutdown of // MI components (singletons) required by a client module. // Type: Template method. // Args: vErrorResrcId - (R) The string resource ID error message // identifier // to place in errMsg. // vwrbOk - (W) If not already false make false on module // shutdown failure. // vwrErrMsg - (RW) Append to existing error description string // MI // driver module initialise error description on // failure. // Return: True - Module shutdown succeeded. // False - Module shutdown failed. //-- template bool ModuleShutdown(const MIint vErrorResrcId, bool &vwrbOk, CMIUtilString &vwrErrMsg) { bool bOk = MIstatus::success; if (!T::Instance().Shutdown()) { const bool bMoreThanOneError(!vwrErrMsg.empty()); bOk = MIstatus::failure; if (bMoreThanOneError) vwrErrMsg += ", "; vwrErrMsg += CMIUtilString::Format( MIRSRC(vErrorResrcId), T::Instance().GetErrorDescription().c_str()); } vwrbOk = bOk ? vwrbOk : MIstatus::failure; return bOk; } } // namespace MI