]> granicus.if.org Git - clang/commitdiff
Implemented serialization of FileEntry and DirectoryEntry.
authorTed Kremenek <kremenek@apple.com>
Tue, 4 Dec 2007 18:21:35 +0000 (18:21 +0000)
committerTed Kremenek <kremenek@apple.com>
Tue, 4 Dec 2007 18:21:35 +0000 (18:21 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44573 91177308-0d34-0410-b5e6-96231b3b80d8

Basic/FileManager.cpp
include/clang/Basic/FileManager.h

index 0a51eca73fd5d8cc9259cf479fba71c470bb78d3..691a63fc2167f405f6e4561ac631de7254149f2b 100644 (file)
@@ -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 <iostream>
 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<DirectoryEntry>(const_cast<DirectoryEntry*&>(Dir));
+  Name = D.ReadCStr();
+}
+
+
+
index b37d412bc0d7c60879ce0dffc9d651d99e511818..5293540b3a57b55cc71554b4ade9a51c1c81a40d 100644 (file)
@@ -15,6 +15,7 @@
 #define LLVM_CLANG_FILEMANAGER_H
 
 #include "llvm/ADT/StringMap.h"
+#include "llvm/Bitcode/SerializationFwd.h"
 #include <map>
 #include <string>
 // 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);  
 };