]> git.tdb.fi Git - builder.git/blob - source/lib/toolchain.h
Rearrange sources into subdirectories
[builder.git] / source / lib / toolchain.h
1 #ifndef TOOLCHAIN_H_
2 #define TOOLCHAIN_H_
3
4 #include <map>
5 #include <string>
6 #include <vector>
7
8 class Tool;
9
10 /**
11 A container for tools.  Performs lookup based on tag or filename extension.
12 */
13 class Toolchain
14 {
15 private:
16         std::string name;
17         int priority = 0;
18         std::map<std::string, Tool *> tools;
19         std::vector<Toolchain *> chains;
20
21 protected:
22         Toolchain(const std::string &n, unsigned p): name(n), priority(p) { }
23 public:
24         Toolchain() = default;
25         ~Toolchain();
26
27         const std::string &get_name() const { return name; }
28         int get_priority() const { return priority; }
29         void add_tool(Tool *);
30         void add_toolchain(Toolchain *);
31         bool has_tool(const std::string &) const;
32         Tool &get_tool(const std::string &) const;
33         Tool *get_tool_for_suffix(const std::string &, bool = false) const;
34         const std::vector<Toolchain *> &get_toolchains() { return chains; }
35 };
36
37 #endif