summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-xray/xray-registry.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools/llvm-xray/xray-registry.cpp')
-rw-r--r--llvm/tools/llvm-xray/xray-registry.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/llvm/tools/llvm-xray/xray-registry.cpp b/llvm/tools/llvm-xray/xray-registry.cpp
new file mode 100644
index 00000000000..fe58e4deaa1
--- /dev/null
+++ b/llvm/tools/llvm-xray/xray-registry.cpp
@@ -0,0 +1,41 @@
+//===- xray-registry.cpp: Implement a command registry. -------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Implement a simple subcommand registry.
+//
+//===----------------------------------------------------------------------===//
+#include "xray-registry.h"
+
+#include "llvm/Support/ManagedStatic.h"
+#include <unordered_map>
+
+namespace llvm {
+namespace xray {
+
+using HandlerType = std::function<Error()>;
+
+ManagedStatic<std::unordered_map<cl::SubCommand *, HandlerType>> Commands;
+
+CommandRegistration::CommandRegistration(cl::SubCommand *SC,
+ HandlerType Command) {
+ assert(Commands->count(SC) == 0 &&
+ "Attempting to overwrite a command handler");
+ assert(Command && "Attempting to register an empty std::function<Error()>");
+ (*Commands)[SC] = Command;
+}
+
+HandlerType dispatch(cl::SubCommand *SC) {
+ auto It = Commands->find(SC);
+ assert(It != Commands->end() &&
+ "Attempting to dispatch on un-registered SubCommand.");
+ return It->second;
+}
+
+} // namespace xray
+} // namespace llvm
OpenPOWER on IntegriCloud