//===-- MICmnResources.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

// Third party headers
#include <map>

// In-house headers:
#include "MICmnBase.h"
#include "MIUtilSingletonBase.h"
#include "MIUtilString.h"

//++
//============================================================================
// Details: MI string test data resource definitions. These IDs match up with
//          actual string data in a map internal to CMICmnResources.
//          *** Be sure to update ms_pResourceId2TextData[] array ****
enum {
  IDS_PROJNAME = 1,
  IDS_MI_VERSION_DESCRIPTION_DEBUG,
  IDS_MI_VERSION_DESCRIPTION,
  IDS_MI_APPNAME_SHORT,
  IDS_MI_APPNAME_LONG,
  IDS_MI_APP_FILEPATHNAME,
  IDS_MI_APP_ARGS,
  IDE_MI_VERSION_GDB,

  IDS_UTIL_FILE_ERR_INVALID_PATHNAME,
  IDS_UTIL_FILE_ERR_OPENING_FILE,
  IDS_UTIL_FILE_ERR_OPENING_FILE_UNKNOWN,
  IDE_UTIL_FILE_ERR_WRITING_FILE,
  IDE_UTIL_FILE_ERR_WRITING_NOTOPEN,

  IDS_RESOURCES_ERR_STRING_NOT_FOUND,
  IDS_RESOURCES_ERR_STRING_TABLE_INVALID,

  IDS_MI_CLIENT_MSG,

  IDS_LOG_MSG_CREATION_DATE,
  IDS_LOG_MSG_FILE_LOGGER_PATH,
  IDS_LOG_MSG_VERSION,
  IDS_LOG_ERR_FILE_LOGGER_DISABLED,
  IDS_LOG_MEDIUM_ERR_INIT,
  IDS_LOG_MEDIUM_ERR_WRITE_ANY,
  IDS_LOG_MEDIUM_ERR_WRITE_MEDIUMFAIL,

  IDS_MEDIUMFILE_NAME,
  IDS_MEDIUMFILE_ERR_INVALID_PATH,
  IDS_MEDIUMFILE_ERR_FILE_HEADER,
  IDS_MEDIUMFILE_NAME_LOG,

  IDE_OS_ERR_UNKNOWN,
  IDE_OS_ERR_RETRIEVING,

  IDS_DRIVERMGR_DRIVER_ERR_INIT,

  IDE_MEDIUMSTDERR_NAME,
  IDE_MEDIUMSTDOUT_NAME,

  IDE_MI_APP_DESCRIPTION,
  IDE_MI_APP_INFORMATION,
  IDE_MI_APP_ARG_USAGE,
  IDE_MI_APP_ARG_HELP,
  IDE_MI_APP_ARG_VERSION,
  IDE_MI_APP_ARG_VERSION_LONG,
  IDE_MI_APP_ARG_INTERPRETER,
  IDE_MI_APP_ARG_EXECUTEABLE,
  IDE_MI_APP_ARG_SOURCE,
  IDE_MI_APP_ARG_APP_LOG,
  IDE_MI_APP_ARG_APP_LOG_DIR,
  IDE_MI_APP_ARG_EXAMPLE,
  IDE_MI_APP_ARG_EXECUTABLE,
  IDE_MI_APP_ARG_SYNCHRONOUS,

  IDS_STDIN_ERR_INVALID_PROMPT,
  IDS_STDIN_ERR_THREAD_CREATION_FAILED,
  IDS_STDIN_ERR_THREAD_DELETE,
  IDS_STDIN_ERR_CHKING_BYTE_AVAILABLE,
  IDS_STDIN_INPUT_CTRL_CHARS,

  IDS_CMD_QUIT_HELP,

  IDS_THREADMGR_ERR_THREAD_ID_INVALID,
  IDS_THREADMGR_ERR_THREAD_FAIL_CREATE,
  IDS_THREADMGR_ERR_THREAD_ID_NOT_FOUND,
  IDS_THREADMGR_ERR_THREAD_STILL_ALIVE,

  IDS_FALLTHRU_DRIVER_CMD_RECEIVED,

  IDS_CMDFACTORY_ERR_INVALID_CMD_NAME,
  IDS_CMDFACTORY_ERR_INVALID_CMD_CR8FN,
  IDS_CMDFACTORY_ERR_CMD_NOT_REGISTERED,
  IDS_CMDFACTORY_ERR_CMD_ALREADY_REGED,

  IDS_CMDMGR_ERR_CMD_FAILED_CREATE,
  IDS_CMDMGR_ERR_CMD_INVOKER,

  IDS_MI_INIT_ERR_LOG,
  IDS_MI_INIT_ERR_RESOURCES,
  IDS_MI_INIT_ERR_INIT,
  IDS_MI_INIT_ERR_STREAMSTDIN,
  IDS_MI_INIT_ERR_STREAMSTDIN_OSHANDLER,
  IDS_MI_INIT_ERR_OS_STDIN_HANDLER,
  IDS_MI_INIT_ERR_STREAMSTDOUT,
  IDS_MI_INIT_ERR_STREAMSTDERR,
  IDS_MI_INIT_ERR_FALLTHRUDRIVER,
  IDS_MI_INIT_ERR_THREADMGR,
  IDS_MI_INIT_ERR_CMDINTERPRETER,
  IDS_MI_INIT_ERR_CMDMGR,
  IDS_MI_INIT_ERR_CMDFACTORY,
  IDS_MI_INIT_ERR_CMDINVOKER,
  IDS_MI_INIT_ERR_CMDMONITOR,
  IDS_MI_INIT_ERR_LLDBDEBUGGER,
  IDS_MI_INIT_ERR_DRIVERMGR,
  IDS_MI_INIT_ERR_DRIVER,
  IDS_MI_INIT_ERR_OUTOFBANDHANDLER,
  IDS_MI_INIT_ERR_DEBUGSESSIONINFO,
  IDS_MI_INIT_ERR_THREADMANAGER,
  IDS_MI_INIT_ERR_CLIENT_USING_DRIVER,
  IDS_MI_INIT_ERR_LOCAL_DEBUG_SESSION,

  IDS_CODE_ERR_INVALID_PARAMETER_VALUE,
  IDS_CODE_ERR_INVALID_PARAM_NULL_POINTER,
  IDS_CODE_ERR_INVALID_ENUMERATION_VALUE,

  IDS_LLDBDEBUGGER_ERR_INVALIDLISTENER,
  IDS_LLDBDEBUGGER_ERR_INVALIDDEBUGGER,
  IDS_LLDBDEBUGGER_ERR_CLIENTDRIVER,
  IDS_LLDBDEBUGGER_ERR_STARTLISTENER,
  IDS_LLDBDEBUGGER_ERR_THREADCREATIONFAIL,
  IDS_LLDBDEBUGGER_ERR_THREAD_DELETE,
  IDS_LLDBDEBUGGER_ERR_INVALIDBROADCASTER,
  IDS_LLDBDEBUGGER_ERR_INVALIDCLIENTNAME,
  IDS_LLDBDEBUGGER_ERR_CLIENTNOTREGISTERED,
  IDS_LLDBDEBUGGER_ERR_STOPLISTENER,
  IDS_LLDBDEBUGGER_ERR_BROADCASTER_NAME,
  IDS_LLDBDEBUGGER_WRN_UNKNOWN_EVENT,

  IDS_LLDBOUTOFBAND_ERR_UNKNOWN_EVENT,
  IDS_LLDBOUTOFBAND_ERR_PROCESS_INVALID,
  IDS_LLDBOUTOFBAND_ERR_BRKPT_NOTFOUND,
  IDS_LLDBOUTOFBAND_ERR_BRKPT_INFO_GET,
  IDS_LLDBOUTOFBAND_ERR_BRKPT_INFO_SET,
  IDS_LLDBOUTOFBAND_ERR_FORM_MI_RESPONSE,
  IDS_LLDBOUTOFBAND_ERR_FRAME_INFO_GET,
  IDS_LLDBOUTOFBAND_ERR_SETNEWDRIVERSTATE,
  IDS_LLDBOUTOFBAND_ERR_BRKPT_CNT_EXCEEDED,

  IDS_DBGSESSION_ERR_SHARED_DATA_ADD,

  IDS_MI_SHTDWN_ERR_LOG,
  IDS_MI_SHUTDOWN_ERR,
  IDE_MI_SHTDWN_ERR_RESOURCES,
  IDE_MI_SHTDWN_ERR_STREAMSTDIN,
  IDS_MI_SHTDWN_ERR_OS_STDIN_HANDLER,
  IDS_MI_SHTDWN_ERR_STREAMSTDOUT,
  IDS_MI_SHTDWN_ERR_STREAMSTDERR,
  IDS_MI_SHTDWN_ERR_THREADMGR,
  IDS_MI_SHTDWN_ERR_CMDINTERPRETER,
  IDS_MI_SHTDWN_ERR_CMDMGR,
  IDS_MI_SHTDWN_ERR_CMDFACTORY,
  IDS_MI_SHTDWN_ERR_CMDINVOKER,
  IDS_MI_SHTDWN_ERR_CMDMONITOR,
  IDS_MI_SHTDWN_ERR_LLDBDEBUGGER,
  IDS_MI_SHTDWN_ERR_DRIVERMGR,
  IDS_MI_SHTDWN_ERR_DRIVER,
  IDS_MI_SHTDWN_ERR_OUTOFBANDHANDLER,
  IDS_MI_SHTDWN_ERR_DEBUGSESSIONINFO,
  IDE_MI_SHTDWN_ERR_THREADMANAGER,

  IDS_DRIVER_ERR_PARSE_ARGS,
  IDS_DRIVER_ERR_PARSE_ARGS_UNKNOWN,
  IDS_DRIVER_ERR_CURRENT_NOT_SET,
  IDS_DRIVER_ERR_NON_REGISTERED,
  IDS_DRIVER_SAY_DRIVER_USING,
  IDS_DRIVER_ERR_ID_INVALID,
  IDS_DRIVER_ERR_FALLTHRU_DRIVER_ERR,
  IDS_DRIVER_CMD_RECEIVED,
  IDS_DRIVER_CMD_NOT_IN_FACTORY,
  IDS_DRIVER_ERR_DRIVER_STATE_ERROR,
  IDS_DRIVER_ERR_MAINLOOP,
  IDS_DRIVER_ERR_LOCAL_DEBUG_NOT_IMPL,
  IDS_DRIVER_ERR_LOCAL_DEBUG_INIT,

  IDS_DRIVER_WAITING_STDIN_DATA,

  IDS_STDERR_ERR_NOT_ALL_DATA_WRITTEN,

  IDS_CMD_ARGS_ERR_OPTION_NOT_FOUND,
  IDS_CMD_ARGS_ERR_VALIDATION_MANDATORY,
  IDS_CMD_ARGS_ERR_VALIDATION_INVALID,
  IDS_CMD_ARGS_ERR_VALIDATION_MAN_INVALID,
  IDS_CMD_ARGS_ERR_VALIDATION_MISSING_INF,
  IDS_CMD_ARGS_ERR_CONTEXT_NOT_ALL_EATTEN,
  IDS_CMD_ARGS_ERR_PREFIX_MSG,

  IDS_VARIANT_ERR_USED_BASECLASS,
  IDS_VARIANT_ERR_MAP_KEY_INVALID,

  IDS_WORD_INVALIDBRKTS,
  IDS_WORD_NONE,
  IDS_WORD_NOT,
  IDS_WORD_INVALIDEMPTY,
  IDS_WORD_INVALIDNULLPTR,
  IDS_WORD_UNKNOWNBRKTS,
  IDS_WORD_NOT_IMPLEMENTED,
  IDS_WORD_NOT_IMPLEMENTED_BRKTS,
  IDS_WORD_UNKNOWNTYPE_BRKTS,
  IDS_WORD_ERR_MSG_NOT_IMPLEMENTED_BRKTS,

  IDS_CMD_ERR_N_OPTIONS_REQUIRED,
  IDS_CMD_ERR_OPTION_NOT_FOUND,
  IDS_CMD_ERR_ARGS,
  IDS_CMD_WRN_ARGS_NOT_HANDLED,
  IDS_CMD_ERR_FNFAILED,
  IDS_CMD_ERR_SHARED_DATA_NOT_FOUND,
  IDS_CMD_ERR_LLDBPROCESS_DETACH,
  IDS_CMD_ERR_LLDBPROCESS_DESTROY,
  IDS_CMD_ERR_SETWKDIR,
  IDS_CMD_ERR_INVALID_TARGET,
  IDS_CMD_ERR_INVALID_TARGET_CURRENT,
  IDS_CMD_ERR_INVALID_TARGET_TYPE,
  IDS_CMD_ERR_INVALID_TARGET_PLUGIN,
  IDS_CMD_ERR_CONNECT_TO_TARGET,
  IDS_CMD_ERR_INVALID_TARGETPLUGINCURRENT,
  IDS_CMD_ERR_NOT_IMPLEMENTED,
  IDS_CMD_ERR_NOT_IMPLEMENTED_DEPRECATED,
  IDS_CMD_ERR_CREATE_TARGET,
  IDS_CMD_ERR_BRKPT_LOCATION_FORMAT,
  IDS_CMD_ERR_BRKPT_LOCATION_NOT_FOUND,
  IDS_CMD_ERR_BRKPT_INVALID,
  IDS_CMD_ERR_BRKPT_CNT_EXCEEDED,
  IDS_CMD_ERR_SOME_ERROR,
  IDS_CMD_ERR_THREAD_INVALID,
  IDS_CMD_ERR_THREAD_FRAME_RANGE_INVALID,
  IDS_CMD_ERR_FRAME_INVALID,
  IDS_CMD_ERR_VARIABLE_DOESNOTEXIST,
  IDS_CMD_ERR_VARIABLE_ENUM_INVALID,
  IDS_CMD_ERR_VARIABLE_EXPRESSIONPATH,
  IDS_CMD_ERR_VARIABLE_CREATION_FAILED,
  IDS_CMD_ERR_VARIABLE_CHILD_RANGE_INVALID,
  IDS_CMD_ERR_CMD_RUN_BUT_NO_ACTION,
  IDS_CMD_ERR_EVENT_HANDLED_BUT_NO_ACTION,
  IDS_CMD_ERR_DISASM_ADDR_START_INVALID,
  IDS_CMD_ERR_DISASM_ADDR_END_INVALID,
  IDS_CMD_ERR_MEMORY_ALLOC_FAILURE,
  IDS_CMD_ERR_LLDB_ERR_NOT_READ_WHOLE_BLK,
  IDS_CMD_ERR_LLDB_ERR_READ_MEM_BYTES,
  IDS_CMD_ERR_INVALID_PROCESS,
  IDS_CMD_ERR_INVALID_PRINT_VALUES,
  IDS_CMD_ERR_INVALID_LOCATION_FORMAT,
  IDS_CMD_ERR_INVALID_FORMAT_TYPE,
  IDS_CMD_ERR_BRKPT_INFO_OBJ_NOT_FOUND,
  IDS_CMD_ERR_LLDB_ERR_WRITE_MEM_BYTES,
  IDS_CMD_ERR_LLDB_ERR_NOT_WRITE_WHOLEBLK,
  IDS_CMD_ERR_SET_NEW_DRIVER_STATE,
  IDS_CMD_ERR_INFO_PRINTFN_NOT_FOUND,
  IDS_CMD_ERR_INFO_PRINTFN_FAILED,
  IDS_CMD_ERR_GDBSET_OPT_TARGETASYNC,
  IDS_CMD_ERR_GDBSET_OPT_SOLIBSEARCHPATH,
  IDS_CMD_ERR_GDBSET_OPT_PRINT_BAD_ARGS,
  IDS_CMD_ERR_GDBSET_OPT_PRINT_UNKNOWN_OPTION,
  IDS_CMD_ERR_GDBSHOW_OPT_PRINT_BAD_ARGS,
  IDS_CMD_ERR_GDBSHOW_OPT_PRINT_UNKNOWN_OPTION,
  IDS_CMD_ERR_EXPR_INVALID,
  IDS_CMD_ERR_ATTACH_FAILED,
  IDS_CMD_ERR_ATTACH_BAD_ARGS
};

//++
//============================================================================
// Details: MI common code implementation class. Handle application resources
//          and locality.
//          Singleton class.
//--
class CMICmnResources : public CMICmnBase,
                        public MI::ISingleton<CMICmnResources> {
  friend class MI::ISingleton<CMICmnResources>;

  // Methods:
public:
  bool Initialize() override;
  bool Shutdown() override;

  CMIUtilString GetString(const MIuint vResourceId) const;
  bool HasString(const MIuint vResourceId) const;

  // Typedef:
private:
  typedef std::map<MIuint, const char *> MapRscrIdToTextData_t;
  typedef std::pair<MIuint, const char *> MapPairRscrIdToTextData_t;

  // Enumerations:
private:
  enum Buffer_e { eBufferSize = 2048 };

  // Structs:
private:
  struct SRsrcTextData {
    MIuint id;
    const char *pTextData;
  };

  // Methods:
private:
  /* ctor */ CMICmnResources();
  /* ctor */ CMICmnResources(const CMICmnResources &);
  void operator=(const CMICmnResources &);

  bool GetStringFromResource(const MIuint vResourceId,
                             CMIUtilString &vrwResourceString) const;
  bool ReadResourceStringData();

  // Overridden:
private:
  // From CMICmnBase
  /* dtor */ ~CMICmnResources() override;

  // Attributes:
private:
  static const SRsrcTextData ms_pResourceId2TextData[];
  //
  MIuint m_nResourceId2TextDataSize;
  MapRscrIdToTextData_t m_mapRscrIdToTextData;
};

//++ =========================================================================
// Details: Macro short cut for retrieving a text data resource
//--
#define MIRSRC(x) CMICmnResources::Instance().GetString(x).c_str()
