aboutsummaryrefslogtreecommitdiff
path: root/include/llvm/Bytecode/Archive.h
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2007-02-07 21:41:02 +0000
committerChris Lattner <sabre@nondot.org>2007-02-07 21:41:02 +0000
commitf2e292ce58ca07d9bbe3cad75f8baa35bd85964a (patch)
treed3bc0114e2f71983baef4c33631278640cd7a1cd /include/llvm/Bytecode/Archive.h
parent403e4a4725af21c267d4189fe88bc48bd438b08c (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.h11
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
/// @{