]> git.tdb.fi Git - builder.git/commitdiff
Make toolchains hierarchial
authorMikko Rasa <tdb@tdb.fi>
Fri, 24 May 2013 15:37:48 +0000 (18:37 +0300)
committerMikko Rasa <tdb@tdb.fi>
Fri, 24 May 2013 15:37:48 +0000 (18:37 +0300)
This enables eventual tool plugins to give out all of their tools in one
bundle.

source/toolchain.cpp
source/toolchain.h

index 9d234038279d07d4ce41232c63e7ab5acec63f40..953fe1147a660df9f429f7a8f7e9f7cef2f709bc 100644 (file)
@@ -9,6 +9,8 @@ Toolchain::~Toolchain()
 {
        for(ToolMap::iterator i=tools.begin(); i!=tools.end(); ++i)
                delete i->second;
+       for(ToolchainList::iterator i=chains.begin(); i!=chains.end(); ++i)
+               delete *i;
 }
 
 void Toolchain::add_tool(Tool *tool)
@@ -16,8 +18,30 @@ void Toolchain::add_tool(Tool *tool)
        insert_unique(tools, tool->get_tag(), tool);
 }
 
+void Toolchain::add_toolchain(Toolchain *chain)
+{
+       chains.push_back(chain);
+}
+
+bool Toolchain::has_tool(const string &tag) const
+{
+       if(tools.count(tag))
+               return true;
+       for(ToolchainList::const_iterator i=chains.begin(); i!=chains.end(); ++i)
+               if((*i)->has_tool(tag))
+                       return true;
+       return false;
+}
+
 Tool &Toolchain::get_tool(const string &tag) const
 {
+       if(!tools.count(tag))
+       {
+               for(ToolchainList::const_iterator i=chains.begin(); i!=chains.end(); ++i)
+                       if((*i)->has_tool(tag))
+                               return (*i)->get_tool(tag);
+       }
+
        return *get_item(tools, tag);
 }
 
@@ -27,5 +51,9 @@ Tool *Toolchain::get_tool_for_suffix(const string &suffix, bool aux) const
                if(i->second->accepts_suffix(suffix, aux))
                        return i->second;
 
+       for(ToolchainList::const_iterator i=chains.begin(); i!=chains.end(); ++i)
+               if(Tool *tool = (*i)->get_tool_for_suffix(suffix, aux))
+                       return tool;
+
        return 0;
 }
index 572e42f58dcdc9e718a036c11dee5f433d61c8d6..8449680409884d12d2801dc760212fa70e8db886 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef TOOLCHAIN_H_
 #define TOOLCHAIN_H_
 
+#include <list>
 #include <map>
 #include <string>
 
@@ -13,13 +14,17 @@ class Toolchain
 {
 private:
        typedef std::map<std::string, Tool *> ToolMap;
+       typedef std::list<Toolchain *> ToolchainList;
 
        ToolMap tools;
+       ToolchainList chains;
 
 public:
        ~Toolchain();
 
        void add_tool(Tool *);
+       void add_toolchain(Toolchain *);
+       bool has_tool(const std::string &) const;
        Tool &get_tool(const std::string &) const;
        Tool *get_tool_for_suffix(const std::string &, bool = false) const;
 };