-#ifndef VIRTUALFILESYSTEM_H_
-#define VIRTUALFILESYSTEM_H_
-
-#include <map>
-#include <set>
-#include <vector>
-#include <msp/fs/path.h>
-#include "buildinfo.h"
-
-class Builder;
-class FileTarget;
-class Pattern;
-class Tool;
-
-/**
-Provides access to the filesystem in a way that takes known targets into
-account. Thus, targets may be returned for files that do not exist yet if it's
-possible to build them.
-*/
-class VirtualFileSystem
-{
-public:
- using SearchPath = std::vector<Msp::FS::Path>;
-
-private:
- Builder &builder;
- std::map<Msp::FS::Path, FileTarget *> targets;
- std::set<Msp::FS::Path> nonexistent;
- SearchPath sys_bin_path;
-
-public:
- VirtualFileSystem(Builder &b): builder(b) { }
-
- /** Gets an existing target associated with a path. If no target has claimed
- that path, 0 is returned. */
- FileTarget *get_target(const Msp::FS::Path &) const;
-
- /** Registers a target with the VFS. A target may be registered at multiple
- paths if building it results in multiple files. */
- void register_path(const Msp::FS::Path &, FileTarget *);
-
- /** Locates a source file. If a file is found but no target is associated
- with it, a new package-less target is created with the appropriate tool. If
- use_syspath is true, the system path reported by the tool is also searched. */
- FileTarget *find_header(const std::string &, Tool *, const SearchPath &, bool use_syspath = true);
-
- /** Locates a library. The library name should be the same as what would be
- used in linking with the library. If a file is found but no target is
- associated with it, a new package-less target of appropriate type is
- created. If use_syspath is true, the system path reported by the LINK tool
- is also searched. */
- FileTarget *find_library(const std::string &, const SearchPath &, BuildInfo::LibraryMode, bool use_syspath = true);
-
- /** Locates a binary. The normal search path for binaries is used (usually
- this means the PATH environment variable). If a file is found but no target
- is associated with it, a new package-less Executable target is created. */
- FileTarget *find_binary(const std::string &);
-
-private:
- bool file_exists(const Msp::FS::Path &);
-};
-
-#endif