HeaderMap.h revision b09e71fd52d0e7fdf3e88b1df72ea0cee5d9b37b
1822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner//===--- HeaderMap.h - A file that acts like dir of symlinks ----*- C++ -*-===//
2822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner//
3822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner//                     The LLVM Compiler Infrastructure
4822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner//
5822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner// This file was developed by Chris Lattner and is distributed under
6822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner// the University of Illinois Open Source License. See LICENSE.TXT for details.
7822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner//
8822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner//===----------------------------------------------------------------------===//
9822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner//
10822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner// This file defines the HeaderMap interface.
11822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner//
12822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner//===----------------------------------------------------------------------===//
13822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner
14822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner#ifndef LLVM_CLANG_LEX_HEADERMAP_H
15822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner#define LLVM_CLANG_LEX_HEADERMAP_H
16822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner
17b09e71fd52d0e7fdf3e88b1df72ea0cee5d9b37bChris Lattner#include <string>
18b09e71fd52d0e7fdf3e88b1df72ea0cee5d9b37bChris Lattner
19822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattnernamespace clang {
20b09e71fd52d0e7fdf3e88b1df72ea0cee5d9b37bChris Lattner  class FileEntry;
21b09e71fd52d0e7fdf3e88b1df72ea0cee5d9b37bChris Lattner  class FileManager;
22822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner
23822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner/// This class represents an Apple concept known as a 'header map'.  To the
24822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner/// #include file resolution process, it basically acts like a directory of
25822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner/// symlinks to files.  Its advantages are that it is dense and more efficient
26822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner/// to create and process than a directory of symlinks.
27822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattnerclass HeaderMap {
28822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattnerpublic:
29822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner  /// HeaderMap::Create - This attempts to load the specified file as a header
30822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner  /// map.  If it doesn't look like a HeaderMap, it gives up and returns null.
31822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner  /// If it looks like a HeaderMap but is obviously corrupted, it puts a reason
32822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner  /// into the string error argument and returns null.
33822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner  static const HeaderMap *Create(const FileEntry *FE, std::string &ErrorInfo) {
34822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner    // FIXME: woot!
35822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner    return 0;
36822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner  }
37b09e71fd52d0e7fdf3e88b1df72ea0cee5d9b37bChris Lattner
38b09e71fd52d0e7fdf3e88b1df72ea0cee5d9b37bChris Lattner  /// LookupFile - Check to see if the specified relative filename is located in
39b09e71fd52d0e7fdf3e88b1df72ea0cee5d9b37bChris Lattner  /// this HeaderMap.  If so, open it and return its FileEntry.
40b09e71fd52d0e7fdf3e88b1df72ea0cee5d9b37bChris Lattner  const FileEntry *LookupFile(const char *FilenameStart,const char *FilenameEnd,
41b09e71fd52d0e7fdf3e88b1df72ea0cee5d9b37bChris Lattner                              FileManager &FM) const {
42b09e71fd52d0e7fdf3e88b1df72ea0cee5d9b37bChris Lattner    // FIXME: this needs work.
43b09e71fd52d0e7fdf3e88b1df72ea0cee5d9b37bChris Lattner    return 0;
44b09e71fd52d0e7fdf3e88b1df72ea0cee5d9b37bChris Lattner  }
45b09e71fd52d0e7fdf3e88b1df72ea0cee5d9b37bChris Lattner
46822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner};
47822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner
48822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner} // end namespace clang.
49822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner
50822da61b74ce14e89b3fa8774db18c833aa5748bChris Lattner#endif