X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FBitcode%2FArchive.h;h=e19e4c09ce3295800a21b398feeee61b04feadac;hb=f9be95f867745b6754b2402b9b72f9eaeabd637f;hp=91684c62e231e8fd5976c51645cb8c72e32dc50b;hpb=43d1fd449f1a0ac9d9dafa0b9569bb6b2e976198;p=oota-llvm.git diff --git a/include/llvm/Bitcode/Archive.h b/include/llvm/Bitcode/Archive.h index 91684c62e23..e19e4c09ce3 100644 --- a/include/llvm/Bitcode/Archive.h +++ b/include/llvm/Bitcode/Archive.h @@ -18,10 +18,10 @@ #define LLVM_BITCODE_ARCHIVE_H #include "llvm/ADT/ilist.h" +#include "llvm/ADT/ilist_node.h" #include "llvm/System/Path.h" #include #include -#include namespace llvm { class MemoryBuffer; @@ -31,6 +31,7 @@ class ModuleProvider; // From VMCore class Module; // From VMCore class Archive; // Declared below class ArchiveMemberHeader; // Internal implementation class +class LLVMContext; // Global data /// 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 @@ -39,7 +40,7 @@ class ArchiveMemberHeader; // Internal implementation class /// construct ArchiveMember instances. You should obtain them from the methods /// of the Archive class instead. /// @brief This class represents a single archive member. -class ArchiveMember { +class ArchiveMember : public ilist_node { /// @name Types /// @{ public: @@ -164,23 +165,10 @@ class ArchiveMember { /// @brief Replace contents of archive member with a new file. bool replaceWith(const sys::Path &aFile, std::string* ErrMsg); - /// @} - /// @name ilist methods - do not use - /// @{ - public: - const ArchiveMember *getNext() const { return next; } - const ArchiveMember *getPrev() const { return prev; } - ArchiveMember *getNext() { return next; } - ArchiveMember *getPrev() { return prev; } - void setPrev(ArchiveMember* p) { prev = p; } - void setNext(ArchiveMember* n) { next = n; } - /// @} /// @name Data /// @{ private: - ArchiveMember* next; ///< Pointer to next archive member - ArchiveMember* prev; ///< Pointer to previous archive member Archive* parent; ///< Pointer to parent archive sys::PathWithStatus path; ///< Path of file containing the member sys::FileStatus info; ///< Status info (size,mode,date) @@ -216,7 +204,7 @@ class ArchiveMember { /// applications and the linkers. Consequently, the implementation of the class /// is optimized for reading. class Archive { - + /// @name Types /// @{ public: @@ -290,7 +278,8 @@ class Archive { /// @returns An Archive* that represents the new archive file. /// @brief Create an empty Archive. static Archive* CreateEmpty( - const sys::Path& Filename ///< Name of the archive to (eventually) create. + const sys::Path& Filename,///< Name of the archive to (eventually) create. + LLVMContext& C ///< Context to use for global information ); /// Open an existing archive and load its contents in preparation for @@ -301,6 +290,7 @@ class Archive { /// @brief Open and load an archive file static Archive* OpenAndLoad( const sys::Path& filePath, ///< The file path to open and load + LLVMContext& C, ///< The context to use for global information std::string* ErrorMessage ///< An optional error string ); @@ -322,6 +312,7 @@ class Archive { /// @brief Open an existing archive and load its symbols. static Archive* OpenAndLoadSymbols( const sys::Path& Filename, ///< Name of the archive file to open + LLVMContext& C, ///< The context to use for global info std::string* ErrorMessage=0 ///< An optional error string ); @@ -461,7 +452,7 @@ class Archive { protected: /// @brief Construct an Archive for \p filename and optionally map it /// into memory. - explicit Archive(const sys::Path& filename); + explicit Archive(const sys::Path& filename, LLVMContext& C); /// @param data The symbol table data to be parsed /// @param len The length of the symbol table data @@ -497,7 +488,7 @@ class Archive { void writeSymbolTable(std::ofstream& ARFile); /// Writes one ArchiveMember to an ofstream. If an error occurs, returns - /// false, otherwise true. If an error occurs and error is non-null then + /// false, otherwise true. If an error occurs and error is non-null then /// it will be set to an error message. /// @returns false Writing member succeeded /// @returns true Writing member failed, \p error set to error message @@ -542,6 +533,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. + LLVMContext& Context; ///< This holds global data. /// @} /// @name Hidden /// @{