diff options
author | Chris Lattner <sabre@nondot.org> | 2007-02-07 21:41:02 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-02-07 21:41:02 +0000 |
commit | f2e292ce58ca07d9bbe3cad75f8baa35bd85964a (patch) | |
tree | d3bc0114e2f71983baef4c33631278640cd7a1cd /include/llvm/Bytecode/Archive.h | |
parent | 403e4a4725af21c267d4189fe88bc48bd438b08c (diff) |
push bytecode decompressor out through APIs. Now the bytecode reader
api's look like this:
ModuleProvider *getBytecodeModuleProvider(
const std::string &Filename, ///< Name of file to be read
BCDecompressor_t *BCDC = Compressor::decompressToNewBuffer,
std::string* ErrMsg = 0, ///< Optional error message holder
BytecodeHandler* H = 0 ///< Optional handler for reader events
);
This is ugly, but allows a client to say:
getBytecodeModuleProvider("foo", 0);
If they do this, there is no dependency on the compression libraries, saving
codesize.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34012 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Bytecode/Archive.h')
-rw-r--r-- | include/llvm/Bytecode/Archive.h | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/include/llvm/Bytecode/Archive.h b/include/llvm/Bytecode/Archive.h index 59d825a722..d0a72561e4 100644 --- a/include/llvm/Bytecode/Archive.h +++ b/include/llvm/Bytecode/Archive.h @@ -20,6 +20,7 @@ #include "llvm/ADT/ilist" #include "llvm/System/Path.h" #include "llvm/System/MappedFile.h" +#include "llvm/Support/Compressor.h" #include <map> #include <set> #include <fstream> @@ -32,6 +33,9 @@ class Module; // From VMCore class Archive; // Declared below class ArchiveMemberHeader; // Internal implementation class +typedef size_t BCDecompressor_t(const char *, size_t, char*&, std::string*); + + /// This class is the main class manipulated by users of the Archive class. It /// holds information about one member of the Archive. It is also the element /// stored by the Archive's ilist, the Archive's main abstraction. Because of @@ -223,7 +227,7 @@ class ArchiveMember { /// applications and the linkers. Consequently, the implementation of the class /// is optimized for reading. class Archive { - + /// @name Types /// @{ public: @@ -468,7 +472,8 @@ class Archive { protected: /// @brief Construct an Archive for \p filename and optionally map it /// into memory. - Archive(const sys::Path& filename); + Archive(const sys::Path& filename, BCDecompressor_t *BCDC = + Compressor::decompressToNewBuffer); /// @param error Set to address of a std::string to get error messages /// @returns false on error @@ -547,7 +552,7 @@ class Archive { unsigned firstFileOffset; ///< Offset to first normal file. ModuleMap modules; ///< The modules loaded via symbol lookup. ArchiveMember* foreignST; ///< This holds the foreign symbol table. - + BCDecompressor_t *Decompressor; ///< Optional decompressor /// @} /// @name Hidden /// @{ |