]> granicus.if.org Git - clang/commitdiff
tidy up code, add a comment about dir caching.
authorChris Lattner <sabre@nondot.org>
Tue, 23 Nov 2010 20:30:42 +0000 (20:30 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 23 Nov 2010 20:30:42 +0000 (20:30 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@120048 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Basic/FileManager.cpp

index 7bb67689bf1138c820f775c1fee84b83ea032abb..2465cac56eb2954cf4378aef72971007d21c3944 100644 (file)
@@ -69,13 +69,10 @@ class FileManager::UniqueDirContainer {
 public:
   DirectoryEntry &getDirectory(const char *Name, struct stat &StatBuf) {
     std::string FullPath(GetFullPath(Name));
-    return UniqueDirs.GetOrCreateValue(
-                              FullPath.c_str(),
-                              FullPath.c_str() + FullPath.size()
-                                                                ).getValue();
+    return UniqueDirs.GetOrCreateValue(FullPath).getValue();
   }
 
-  size_t size() { return UniqueDirs.size(); }
+  size_t size() const { return UniqueDirs.size(); }
 };
 
 class FileManager::UniqueFileContainer {
@@ -89,13 +86,10 @@ public:
     
     // LowercaseString because Windows filesystem is case insensitive.
     FullPath = llvm::LowercaseString(FullPath);
-    return UniqueFiles.GetOrCreateValue(
-                               FullPath.c_str(),
-                               FullPath.c_str() + FullPath.size()
-                                                                 ).getValue();
+    return UniqueFiles.GetOrCreateValue(FullPath).getValue();
   }
 
-  size_t size() { return UniqueFiles.size(); }
+  size_t size() const { return UniqueFiles.size(); }
 };
 
 //===----------------------------------------------------------------------===//
@@ -116,7 +110,7 @@ public:
     return UniqueDirs[std::make_pair(StatBuf.st_dev, StatBuf.st_ino)];
   }
 
-  size_t size() { return UniqueDirs.size(); }
+  size_t size() const { return UniqueDirs.size(); }
 };
 
 class FileManager::UniqueFileContainer {
@@ -133,7 +127,7 @@ public:
                                                   StatBuf.st_mode)).first);
   }
 
-  size_t size() { return UniqueFiles.size(); }
+  size_t size() const { return UniqueFiles.size(); }
 };
 
 #endif
@@ -144,8 +138,8 @@ public:
 
 FileManager::FileManager(const FileSystemOptions &FSO)
   : FileSystemOpts(FSO),
-    UniqueDirs(*new UniqueDirContainer),
-    UniqueFiles(*new UniqueFileContainer),
+    UniqueDirs(*new UniqueDirContainer()),
+    UniqueFiles(*new UniqueFileContainer()),
     DirEntries(64), FileEntries(64), NextFileUID(0) {
   NumDirLookups = NumFileLookups = 0;
   NumDirCacheMisses = NumFileCacheMisses = 0;
@@ -154,12 +148,8 @@ FileManager::FileManager(const FileSystemOptions &FSO)
 FileManager::~FileManager() {
   delete &UniqueDirs;
   delete &UniqueFiles;
-  for (llvm::SmallVectorImpl<FileEntry *>::iterator
-         V = VirtualFileEntries.begin(),
-         VEnd = VirtualFileEntries.end();
-       V != VEnd; 
-       ++V)
-    delete *V;
+  for (unsigned i = 0, e = VirtualFileEntries.size(); i != e; ++i)
+    delete VirtualFileEntries[i];
 }
 
 void FileManager::addStatCache(FileSystemStatCache *statCache,
@@ -297,6 +287,12 @@ const FileEntry *FileManager::getFile(llvm::StringRef Filename) {
   // FileEntries map.
   const char *InterndFileName = NamedFileEnt.getKeyData();
 
+  
+  // Look up the directory for the file.  When looking up something like
+  // sys/foo.h we'll discover all of the search directories that have a 'sys'
+  // subdirectory.  This will let us avoid having to waste time on known-to-fail
+  // searches when we go to find sys/bar.h, because all the search directories
+  // without a 'sys' subdir will get a cached failure result.
   const DirectoryEntry *DirInfo = getDirectoryFromFile(*this, Filename);
   if (DirInfo == 0)  // Directory doesn't exist, file can't exist.
     return 0;