forked from OSchip/llvm-project
96 lines
3.1 KiB
C++
96 lines
3.1 KiB
C++
//===-- 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
|
|
|