Abstract interface for module providers, e.g. streaming bytecode reader.
authorMisha Brukman <brukman+llvm@gmail.com>
Thu, 18 Sep 2003 16:16:32 +0000 (16:16 +0000)
committerMisha Brukman <brukman+llvm@gmail.com>
Thu, 18 Sep 2003 16:16:32 +0000 (16:16 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8593 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ModuleProvider.h [new file with mode: 0644]

diff --git a/include/llvm/ModuleProvider.h b/include/llvm/ModuleProvider.h
new file mode 100644 (file)
index 0000000..19b0005
--- /dev/null
@@ -0,0 +1,40 @@
+//===-- llvm/ModuleProvider.h - Interface for module providers --*- C++ -*-===//
+//
+// Abstract interface for providing a module.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef MODULEPROVIDER_H
+#define MODULEPROVIDER_H
+
+class Function;
+class Module;
+
+class AbstractModuleProvider {
+  Module *M;
+
+protected:
+  AbstractModuleProvider();
+
+public:
+  virtual ~AbstractModuleProvider();
+
+  /// getModule - returns the module this provider is encapsulating
+  ///
+  Module* getModule() { return M; }
+
+  /// materializeFunction - make sure the given function is fully read.
+  ///
+  virtual void materializeFunction(Function *F) = 0;
+
+  /// materializeModule - make sure the entire Module has been completely read.
+  ///
+  void materializeModule();
+
+  /// releaseModule - no longer delete the Module* when provider is destroyed.
+  ///
+  Module* releaseModule() { Module *tempM = M; M = 0; return tempM; }
+
+};
+
+#endif