Abstract interface for module providers, e.g. streaming bytecode reader.
[oota-llvm.git] / include / llvm / ModuleProvider.h
1 //===-- llvm/ModuleProvider.h - Interface for module providers --*- C++ -*-===//
2 //
3 // Abstract interface for providing a module.
4 //
5 //===----------------------------------------------------------------------===//
6
7 #ifndef MODULEPROVIDER_H
8 #define MODULEPROVIDER_H
9
10 class Function;
11 class Module;
12
13 class AbstractModuleProvider {
14   Module *M;
15
16 protected:
17   AbstractModuleProvider();
18
19 public:
20   virtual ~AbstractModuleProvider();
21
22   /// getModule - returns the module this provider is encapsulating
23   ///
24   Module* getModule() { return M; }
25
26   /// materializeFunction - make sure the given function is fully read.
27   ///
28   virtual void materializeFunction(Function *F) = 0;
29
30   /// materializeModule - make sure the entire Module has been completely read.
31   ///
32   void materializeModule();
33
34   /// releaseModule - no longer delete the Module* when provider is destroyed.
35   ///
36   Module* releaseModule() { Module *tempM = M; M = 0; return tempM; }
37
38 };
39
40 #endif