diff options
Diffstat (limited to 'src/input/detail/gen/gen_policyChain.cpp')
| -rw-r--r-- | src/input/detail/gen/gen_policyChain.cpp | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/input/detail/gen/gen_policyChain.cpp b/src/input/detail/gen/gen_policyChain.cpp new file mode 100644 index 0000000..3e375ec --- /dev/null +++ b/src/input/detail/gen/gen_policyChain.cpp @@ -0,0 +1,68 @@ +/* + # Copyright (c) 2009 - OpenSLX Project, Computer Center University of Freiburg + # + # This program is free software distributed under the GPL version 2. + # See http://openslx.org/COPYING + # + # If you have any feedback please consult http://openslx.org/feedback and + # send your suggestions, praise, or complaints to feedback@openslx.org + # + # General information about OpenSLX can be found at http://openslx.org/ + # -------------------------------------------------------------------------- + # detail/gen/gen_policyChain.cpp: + # - generate the input_policy::detail::PolicyChain class + # -------------------------------------------------------------------------- + */ + +#include <iostream> + +using namespace std; + +#define NUM_POLICIES 8 + +int main(int, char**) +{ + int i; + + cout << "template<typename BaseCase"; + for(i = 0; i < NUM_POLICIES; i++) + { + cout << ", typename P" << i; + } + cout << ">\nstruct PolicyChain :\npublic P0::template apply_<PolicyChain<BaseCase"; + for(i = 1; i < NUM_POLICIES; i++) + { + cout << ", P" << i; + } + cout << ", void> >\n"; + cout << "{};\n"; + + // Base case: + cout << "template<typename BaseCase>\n"; + cout << "struct PolicyChain<BaseCase"; + for(i = 0; i < NUM_POLICIES; i++) + { + cout << ", void"; + } + cout << "> : public BaseCase {};\n"; + + // We need the following in macros: + cout << "#define _autogen_POLICY_TEMPLATE_PARAMS "; + for(i = 0; i < NUM_POLICIES; i++) + { + if(i) + cout << ", "; + cout << "typename P" << i; + } + + cout << "\n#define _autogen_POLICY_TEMPLATE_ARGS "; + for(i = 0; i < NUM_POLICIES; i++) + { + if(i) + cout << ", "; + cout << "P" << i; + } + cout << "\n"; + + return 0; +} |
