diff options
author | Josh Blum | 2013-07-13 11:23:41 -0700 |
---|---|---|
committer | Josh Blum | 2013-07-13 11:23:41 -0700 |
commit | 92c8b4646d77d569480d7c3120a00df6a9645aba (patch) | |
tree | 4b8543b56f57352d4656e140c10a765423326ea8 /include/gras/factory.hpp | |
parent | f99744a072d97c83f5a7da6c0626a38475c4fc44 (diff) | |
download | sandhi-92c8b4646d77d569480d7c3120a00df6a9645aba.tar.gz sandhi-92c8b4646d77d569480d7c3120a00df6a9645aba.tar.bz2 sandhi-92c8b4646d77d569480d7c3120a00df6a9645aba.zip |
gras: work on generator scripts for template madness
Diffstat (limited to 'include/gras/factory.hpp')
-rw-r--r-- | include/gras/factory.hpp | 52 |
1 files changed, 47 insertions, 5 deletions
diff --git a/include/gras/factory.hpp b/include/gras/factory.hpp index 52ed881..b60b1e7 100644 --- a/include/gras/factory.hpp +++ b/include/gras/factory.hpp @@ -37,7 +37,7 @@ struct GRAS_API Factory * Register API - don't look here, template magic, not helpful ******************************************************************/ template <typename ReturnType> - static void register_make(const std::string &name, ReturnType(*fcn)(void)); + static void register_make(const std::string &name, ReturnType(*fcn)()); template <typename ReturnType, typename Arg0> static void register_make(const std::string &name, ReturnType(*fcn)(const Arg0 &)); @@ -48,20 +48,62 @@ struct GRAS_API Factory template <typename ReturnType, typename Arg0, typename Arg1, typename Arg2> static void register_make(const std::string &name, ReturnType(*fcn)(const Arg0 &, const Arg1 &, const Arg2 &)); + template <typename ReturnType, typename Arg0, typename Arg1, typename Arg2, typename Arg3> + static void register_make(const std::string &name, ReturnType(*fcn)(const Arg0 &, const Arg1 &, const Arg2 &, const Arg3 &)); + + template <typename ReturnType, typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4> + static void register_make(const std::string &name, ReturnType(*fcn)(const Arg0 &, const Arg1 &, const Arg2 &, const Arg3 &, const Arg4 &)); + + template <typename ReturnType, typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5> + static void register_make(const std::string &name, ReturnType(*fcn)(const Arg0 &, const Arg1 &, const Arg2 &, const Arg3 &, const Arg4 &, const Arg5 &)); + + template <typename ReturnType, typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6> + static void register_make(const std::string &name, ReturnType(*fcn)(const Arg0 &, const Arg1 &, const Arg2 &, const Arg3 &, const Arg4 &, const Arg5 &, const Arg6 &)); + + template <typename ReturnType, typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7> + static void register_make(const std::string &name, ReturnType(*fcn)(const Arg0 &, const Arg1 &, const Arg2 &, const Arg3 &, const Arg4 &, const Arg5 &, const Arg6 &, const Arg7 &)); + + template <typename ReturnType, typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7, typename Arg8> + static void register_make(const std::string &name, ReturnType(*fcn)(const Arg0 &, const Arg1 &, const Arg2 &, const Arg3 &, const Arg4 &, const Arg5 &, const Arg6 &, const Arg7 &, const Arg8 &)); + + template <typename ReturnType, typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7, typename Arg8, typename Arg9> + static void register_make(const std::string &name, ReturnType(*fcn)(const Arg0 &, const Arg1 &, const Arg2 &, const Arg3 &, const Arg4 &, const Arg5 &, const Arg6 &, const Arg7 &, const Arg8 &, const Arg9 &)); + /******************************************************************* * Make API - don't look here, template magic, not helpful - ******************************************************************/ + ******************************************************************/; inline static Element *make(const std::string &name); template <typename Arg0> - static Element *make(const std::string &name, const Arg0 &a0); + static Element *make(const std::string &name, const Arg0 &); template <typename Arg0, typename Arg1> - static Element *make(const std::string &name, const Arg0 &a0, const Arg1 &a1); + static Element *make(const std::string &name, const Arg0 &, const Arg1 &); template <typename Arg0, typename Arg1, typename Arg2> - static Element *make(const std::string &name, const Arg0 &a0, const Arg1 &a1, const Arg2 &a2); + static Element *make(const std::string &name, const Arg0 &, const Arg1 &, const Arg2 &); + + template <typename Arg0, typename Arg1, typename Arg2, typename Arg3> + static Element *make(const std::string &name, const Arg0 &, const Arg1 &, const Arg2 &, const Arg3 &); + + template <typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4> + static Element *make(const std::string &name, const Arg0 &, const Arg1 &, const Arg2 &, const Arg3 &, const Arg4 &); + + template <typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5> + static Element *make(const std::string &name, const Arg0 &, const Arg1 &, const Arg2 &, const Arg3 &, const Arg4 &, const Arg5 &); + + template <typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6> + static Element *make(const std::string &name, const Arg0 &, const Arg1 &, const Arg2 &, const Arg3 &, const Arg4 &, const Arg5 &, const Arg6 &); + + template <typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7> + static Element *make(const std::string &name, const Arg0 &, const Arg1 &, const Arg2 &, const Arg3 &, const Arg4 &, const Arg5 &, const Arg6 &, const Arg7 &); + + template <typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7, typename Arg8> + static Element *make(const std::string &name, const Arg0 &, const Arg1 &, const Arg2 &, const Arg3 &, const Arg4 &, const Arg5 &, const Arg6 &, const Arg7 &, const Arg8 &); + + template <typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4, typename Arg5, typename Arg6, typename Arg7, typename Arg8, typename Arg9> + static Element *make(const std::string &name, const Arg0 &, const Arg1 &, const Arg2 &, const Arg3 &, const Arg4 &, const Arg5 &, const Arg6 &, const Arg7 &, const Arg8 &, const Arg9 &); /******************************************************************* * Private registration hooks |