1 //===-- MICmdFactory.h ------------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
12 // Third party headers
16 #include "MICmnBase.h"
17 #include "MIUtilSingletonBase.h"
24 //============================================================================
25 // Details: MI Command Factory. Holds a list of registered MI commands that
26 // MI application understands to interpret. Creates commands objects.
27 // The Command Factory is carried out in the main thread.
30 class CMICmdFactory : public CMICmnBase, public MI::ISingleton<CMICmdFactory> {
31 friend class MI::ISingleton<CMICmdFactory>;
35 typedef CMICmdBase *(*CmdCreatorFnPtr)();
40 // Description: Command's factory's interface for commands to implement.
44 virtual const CMIUtilString &GetMiCmd() const = 0;
45 virtual CmdCreatorFnPtr GetCmdCreatorFn() const = 0;
46 // virtual CMICmdBase * CreateSelf( void ) = 0; // Not
47 // possible as require a static creator
48 // function in the command class, here for awareness
50 /* dtor */ virtual ~ICmd() {}
55 bool Initialize() override;
56 bool Shutdown() override;
57 bool CmdRegister(const CMIUtilString &vMiCmd, CmdCreatorFnPtr vCmdCreateFn);
58 bool CmdCreate(const CMIUtilString &vMiCmd, const SMICmdData &vCmdData,
59 CMICmdBase *&vpNewCmd);
60 bool CmdExist(const CMIUtilString &vMiCmd) const;
64 /* ctor */ CMICmdFactory();
65 /* ctor */ CMICmdFactory(const CMICmdFactory &);
66 void operator=(const CMICmdFactory &);
68 bool HaveAlready(const CMIUtilString &vMiCmd) const;
69 bool IsValid(const CMIUtilString &vMiCmd) const;
74 /* dtor */ ~CMICmdFactory() override;
78 typedef std::map<CMIUtilString, CmdCreatorFnPtr> MapMiCmdToCmdCreatorFn_t;
79 typedef std::pair<CMIUtilString, CmdCreatorFnPtr>
80 MapPairMiCmdToCmdCreatorFn_t;
84 MapMiCmdToCmdCreatorFn_t m_mapMiCmdToCmdCreatorFn;