| //===-- MIUtilSingletonHelper.h ---------------------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| //++ |
| // File: MIUtilSingletonHelper.h |
| // |
| // Overview: Contains template functions to aid the initialisation and |
| // shutdown of MI modules. MI modules (or components) can |
| // use other MI modules to help them achieve their one task |
| // (Modules only do one task). |
| // |
| // Environment: Compilers: Visual C++ 12. |
| // gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1 |
| // Libraries: See MIReadmetxt. |
| // |
| // Copyright: None. |
| //-- |
| |
| #pragma once |
| |
| namespace MI |
| { |
| |
| // In house headers: |
| #include "MIUtilString.h" |
| #include "MICmnResources.h" |
| |
| //++ ============================================================================ |
| // 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 initalise 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. |
| // Authors: Aidan Dodds 17/03/2014. |
| // Changes: None. |
| //-- |
| template< typename T > |
| 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 shutodown 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. |
| // Authors: Aidan Dodds 17/03/2014. |
| // Changes: None. |
| //-- |
| template< typename T > |
| 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 |