summaryrefslogtreecommitdiffstats
path: root/src/input/detail/gen/gen_policyChain.cpp
diff options
context:
space:
mode:
authorSebastien Braun2010-10-07 22:54:10 +0200
committerSebastien Braun2010-10-07 22:54:10 +0200
commite61097b8881bc7e72a5499816cb1199ea274a3ca (patch)
treebcfa9f3fe3f43af02845bc21367de395b248600c /src/input/detail/gen/gen_policyChain.cpp
parentMake behaviour on lookup failures configurable (diff)
downloadpvs-e61097b8881bc7e72a5499816cb1199ea274a3ca.tar.gz
pvs-e61097b8881bc7e72a5499816cb1199ea274a3ca.tar.xz
pvs-e61097b8881bc7e72a5499816cb1199ea274a3ca.zip
Rework template meta-magic
- No more implicit dependency on Boost.MPL - Better documentation for template magic - Move input handler policies to handler definitions where they belong - Separate out event descriptions from handlers
Diffstat (limited to 'src/input/detail/gen/gen_policyChain.cpp')
-rw-r--r--src/input/detail/gen/gen_policyChain.cpp68
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;
+}