2014-05-16 18:51:01 +08:00
|
|
|
//===-- 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
|
|
|
|
|
|
|
|
namespace MI
|
|
|
|
{
|
|
|
|
|
|
|
|
// In house headers:
|
|
|
|
#include "MIUtilString.h"
|
|
|
|
#include "MICmnResources.h"
|
|
|
|
|
|
|
|
//++ ============================================================================
|
2014-11-18 02:06:21 +08:00
|
|
|
// 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.
|
2015-07-07 22:04:40 +08:00
|
|
|
// vwrbOk - (RW) On input True = Try to initialize MI driver module.
|
2014-11-18 02:06:21 +08:00
|
|
|
// 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.
|
2014-05-16 18:51:01 +08:00
|
|
|
//--
|
2014-11-18 02:06:21 +08:00
|
|
|
template <typename T>
|
|
|
|
bool
|
|
|
|
ModuleInit(const MIint vErrorResrcId, bool &vwrbOk, CMIUtilString &vwrErrMsg)
|
2014-05-16 18:51:01 +08:00
|
|
|
{
|
2014-11-18 02:06:21 +08:00
|
|
|
if (vwrbOk && !T::Instance().Initialize())
|
|
|
|
{
|
|
|
|
vwrbOk = MIstatus::failure;
|
|
|
|
vwrErrMsg = CMIUtilString::Format(MIRSRC(vErrorResrcId), T::Instance().GetErrorDescription().c_str());
|
|
|
|
}
|
2014-05-16 18:51:01 +08:00
|
|
|
|
2014-11-18 02:06:21 +08:00
|
|
|
return vwrbOk;
|
2014-05-16 18:51:01 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
//++ ============================================================================
|
2015-07-07 22:04:40 +08:00
|
|
|
// Details: Short cut helper function to simplify repeated shutdown of
|
2014-11-18 02:06:21 +08:00
|
|
|
// 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.
|
2014-05-16 18:51:01 +08:00
|
|
|
//--
|
2014-11-18 02:06:21 +08:00
|
|
|
template <typename T>
|
|
|
|
bool
|
|
|
|
ModuleShutdown(const MIint vErrorResrcId, bool &vwrbOk, CMIUtilString &vwrErrMsg)
|
2014-05-16 18:51:01 +08:00
|
|
|
{
|
2014-11-18 02:06:21 +08:00
|
|
|
bool bOk = MIstatus::success;
|
2014-05-16 18:51:01 +08:00
|
|
|
|
2014-11-18 02:06:21 +08:00
|
|
|
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());
|
|
|
|
}
|
2014-05-16 18:51:01 +08:00
|
|
|
|
2014-11-18 02:06:21 +08:00
|
|
|
vwrbOk = bOk ? vwrbOk : MIstatus::failure;
|
|
|
|
|
|
|
|
return bOk;
|
2014-05-16 18:51:01 +08:00
|
|
|
}
|
|
|
|
|
2014-06-25 03:18:28 +08:00
|
|
|
} // namespace MI
|