summaryrefslogtreecommitdiff
path: root/tools/llvmc/ConfigData.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/llvmc/ConfigData.h')
-rw-r--r--tools/llvmc/ConfigData.h58
1 files changed, 58 insertions, 0 deletions
diff --git a/tools/llvmc/ConfigData.h b/tools/llvmc/ConfigData.h
new file mode 100644
index 0000000000..f11931d999
--- /dev/null
+++ b/tools/llvmc/ConfigData.h
@@ -0,0 +1,58 @@
+//===- ConfigData.h - Configuration Data Provider ---------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file was developed by Reid Spencer and is distributed under the
+// University of Illinois Open Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file declares the LLVMC_ConfigDataProvider class which implements the
+// generation of ConfigData objects for the CompilerDriver.
+//
+//===------------------------------------------------------------------------===
+#ifndef LLVM_TOOLS_LLVMC_CONFIGDATA_H
+#define LLVM_TOOLS_LLVMC_CONFIGDATA_H
+
+#include "CompilerDriver.h"
+#include <Support/hash_map>
+
+namespace llvm {
+ /// This class provides the high level interface to the LLVM Compiler Driver.
+ /// The driver's purpose is to make it easier for compiler writers and users
+ /// of LLVM to utilize the compiler toolkits and LLVM toolset by learning only
+ /// the interface of one program (llvmc).
+ ///
+ /// @see llvmc.cpp
+ /// @brief The interface to the LLVM Compiler Driver.
+ class LLVMC_ConfigDataProvider : public CompilerDriver::ConfigDataProvider {
+ /// @name Constructor
+ /// @{
+ public:
+ LLVMC_ConfigDataProvider();
+ virtual ~LLVMC_ConfigDataProvider();
+
+ /// @name Methods
+ /// @{
+ public:
+ /// @brief Provide the configuration data to the CompilerDriver.
+ virtual CompilerDriver::ConfigData*
+ ProvideConfigData(const std::string& filetype);
+
+ /// @brief Allow the configuration directory to be set
+ virtual void setConfigDir(const std::string& dirName) { configDir = dirName; }
+
+ /// @}
+ /// @name Data
+ /// @{
+ private:
+ /// @brief This type is used internally to hold the configuration data.
+ typedef hash_map<std::string,CompilerDriver::ConfigData*,
+ hash<std::string>,std::equal_to<std::string> > ConfigDataMap;
+ ConfigDataMap Configurations; ///< The cache of configurations
+ std::string configDir;
+ /// @}
+ };
+}
+
+#endif