Polyphase Game Engine
Loading...
Searching...
No Matches
TerminalParserRegistry.h
Go to the documentation of this file.
1#pragma once
2
3#if EDITOR
4
6#include "ITerminalProcess.h" // for TerminalLaunchConfig
7
8#include <functional>
9#include <memory>
10#include <mutex>
11#include <string>
12#include <vector>
13
32class TerminalParserRegistry
33{
34public:
35 using Factory = std::function<std::unique_ptr<ITerminalOutputParser>()>;
36 using Matcher = std::function<bool(const TerminalLaunchConfig&)>;
37
38 static TerminalParserRegistry& Get();
39
48 void RegisterParser(const std::string& name, Factory factory, Matcher matcher = {});
49
51 void UnregisterParser(const std::string& name);
52
58 std::unique_ptr<ITerminalOutputParser> CreateParserFor(
59 const TerminalLaunchConfig& cfg,
60 const std::string& forcedName = {});
61
63 std::unique_ptr<ITerminalOutputParser> CreateParserByName(const std::string& name);
64
66 std::vector<std::string> GetRegisteredNames() const;
67
69 std::string GetMatchingParserName(const TerminalLaunchConfig& cfg) const;
70
71private:
72 TerminalParserRegistry();
73 void RegisterBuiltins();
74
75 struct Entry
76 {
77 std::string name;
78 Factory factory;
79 Matcher matcher;
80 };
81
82 mutable std::mutex mMutex;
83 std::vector<Entry> mEntries;
84 std::string mDefaultName; // last-resort parser name
85};
86
87#endif
Definition Factory.h:62