From: Ted Kremenek Date: Tue, 4 Dec 2007 18:21:35 +0000 (+0000) Subject: Implemented serialization of FileEntry and DirectoryEntry. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9551a2cbe5fdf316c126a39ec310208c2121321f;p=clang Implemented serialization of FileEntry and DirectoryEntry. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44573 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Basic/FileManager.cpp b/Basic/FileManager.cpp index 0a51eca73f..691a63fc21 100644 --- a/Basic/FileManager.cpp +++ b/Basic/FileManager.cpp @@ -19,6 +19,8 @@ #include "clang/Basic/FileManager.h" #include "llvm/ADT/SmallString.h" +#include "llvm/Bitcode/Serialize.h" +#include "llvm/Bitcode/Deserialize.h" #include using namespace clang; @@ -170,3 +172,34 @@ void FileManager::PrintStats() const { //std::cerr << PagesMapped << BytesOfPagesMapped << FSLookups; } + +//===----------------------------------------------------------------------===// +// Serialization. +//===----------------------------------------------------------------------===// + +void DirectoryEntry::Emit(llvm::Serializer& S) const { + S.EmitCStr(Name); +} + +void DirectoryEntry::Read(llvm::Deserializer& D) { + Name = D.ReadCStr(); +} + +void FileEntry::Emit(llvm::Serializer& S) const { + S.FlushRecord(); + S.EmitInt(Size); + S.EmitInt(ModTime); + S.EmitInt(UID); + S.EmitPtr(Dir); + S.EmitCStr(Name); +} + +void FileEntry::Read(llvm::Deserializer& D) { + Size = (off_t) D.ReadInt(); + ModTime = (time_t) D.ReadInt(); + D.ReadPtr(const_cast(Dir)); + Name = D.ReadCStr(); +} + + + diff --git a/include/clang/Basic/FileManager.h b/include/clang/Basic/FileManager.h index b37d412bc0..5293540b3a 100644 --- a/include/clang/Basic/FileManager.h +++ b/include/clang/Basic/FileManager.h @@ -15,6 +15,7 @@ #define LLVM_CLANG_FILEMANAGER_H #include "llvm/ADT/StringMap.h" +#include "llvm/Bitcode/SerializationFwd.h" #include #include // FIXME: Enhance libsystem to support inode and other fields in stat. @@ -31,6 +32,12 @@ class DirectoryEntry { public: DirectoryEntry() : Name(0) {} const char *getName() const { return Name; } + + /// Emit - Emit this DirectoryEntry to Bitcode. + void Emit(llvm::Serializer& S) const; + + /// Create - Reconsitute a DirectoryEntry object from Bitcode. + void Read(llvm::Deserializer& D); }; /// FileEntry - Cached information about one file on the disk. @@ -53,6 +60,13 @@ public: /// getDir - Return the directory the file lives in. /// const DirectoryEntry *getDir() const { return Dir; } + + + /// Emit - Emit this FileEntry to Bitcode. + void Emit(llvm::Serializer& S) const; + + /// Read - Reconsitute a FileEntry object from Bitcode. + void Read(llvm::Deserializer& D); };