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