1 | #!/usr/bin/perl -w |
---|
2 | # |
---|
3 | # Boost.Signals library |
---|
4 | |
---|
5 | # Copyright Douglas Gregor 2001-2003. Use, modification and |
---|
6 | # distribution is subject to the Boost Software License, Version |
---|
7 | # 1.0. (See accompanying file LICENSE_1_0.txt or copy at |
---|
8 | # http://www.boost.org/LICENSE_1_0.txt) |
---|
9 | |
---|
10 | # For more information, see http://www.boost.org |
---|
11 | use English; |
---|
12 | |
---|
13 | if ($#ARGV < 0) { |
---|
14 | print "Usage: perl gen_signal_N <number of arguments>\n"; |
---|
15 | exit; |
---|
16 | } |
---|
17 | |
---|
18 | |
---|
19 | $totalNumArgs = $ARGV[0]; |
---|
20 | for ($numArgs = 0; $numArgs <= $totalNumArgs; ++$numArgs) { |
---|
21 | open OUT, ">signal$numArgs.hpp"; |
---|
22 | print OUT "// Boost.Signals library\n"; |
---|
23 | print OUT "//\n"; |
---|
24 | print OUT "// Copyright (C) 2001 Doug Gregor (gregod\@cs.rpi.edu)\n"; |
---|
25 | print OUT "//\n"; |
---|
26 | print OUT "// Permission to copy, use, sell and distribute this software is granted\n"; |
---|
27 | print OUT "// provided this copyright notice appears in all copies.\n"; |
---|
28 | print OUT "// Permission to modify the code and to distribute modified code is granted\n"; |
---|
29 | print OUT "// provided this copyright notice appears in all copies, and a notice\n"; |
---|
30 | print OUT "// that the code was modified is included with the copyright notice.\n"; |
---|
31 | print OUT "//\n"; |
---|
32 | print OUT "// This software is provided \"as is\" without express or implied warranty,\n"; |
---|
33 | print OUT "// and with no claim as to its suitability for any purpose.\n"; |
---|
34 | print OUT " \n"; |
---|
35 | print OUT "// For more information, see http://www.boost.org\n"; |
---|
36 | print OUT "\n"; |
---|
37 | print OUT "#ifndef BOOST_SIGNALS_SIGNAL" . $numArgs . "_HEADER\n"; |
---|
38 | print OUT "#define BOOST_SIGNALS_SIGNAL" , $numArgs . "_HEADER\n"; |
---|
39 | print OUT "\n"; |
---|
40 | print OUT "#define BOOST_SIGNALS_NUM_ARGS $numArgs\n"; |
---|
41 | |
---|
42 | $templateParms = ""; |
---|
43 | for ($i = 1; $i <= $numArgs; ++$i) { |
---|
44 | if ($i > 1) { |
---|
45 | $templateParms .= ", "; |
---|
46 | } |
---|
47 | $templateParms .= "typename T$i"; |
---|
48 | } |
---|
49 | print OUT "#define BOOST_SIGNALS_TEMPLATE_PARMS $templateParms\n"; |
---|
50 | |
---|
51 | $_ = $templateParms; |
---|
52 | s/typename //g; |
---|
53 | $templateArgs = $_; |
---|
54 | print OUT "#define BOOST_SIGNALS_TEMPLATE_ARGS $templateArgs\n"; |
---|
55 | |
---|
56 | $parms = ""; |
---|
57 | for ($i = 1; $i <= $numArgs; ++$i) { |
---|
58 | if ($i > 1) { |
---|
59 | $parms .= ", "; |
---|
60 | } |
---|
61 | $parms .= "T$i a$i"; |
---|
62 | } |
---|
63 | print OUT "#define BOOST_SIGNALS_PARMS $parms\n"; |
---|
64 | |
---|
65 | $args = ""; |
---|
66 | for ($i = 1; $i <= $numArgs; ++$i) { |
---|
67 | if ($i > 1) { |
---|
68 | $args .= ", "; |
---|
69 | } |
---|
70 | $args .= "a$i"; |
---|
71 | } |
---|
72 | print OUT "#define BOOST_SIGNALS_ARGS $args\n"; |
---|
73 | |
---|
74 | $boundArgs = ""; |
---|
75 | for ($i = 1; $i <= $numArgs; ++$i) { |
---|
76 | if ($i > 1) { |
---|
77 | $boundArgs .= ", "; |
---|
78 | } |
---|
79 | $boundArgs .= "args->a$i"; |
---|
80 | } |
---|
81 | print OUT "#define BOOST_SIGNALS_BOUND_ARGS $boundArgs\n"; |
---|
82 | |
---|
83 | $argsAsMembers = ""; |
---|
84 | for ($i = 1; $i <= $numArgs; ++$i) { |
---|
85 | $argsAsMembers .= "T$i a$i;"; |
---|
86 | } |
---|
87 | print OUT "#define BOOST_SIGNALS_ARGS_AS_MEMBERS $argsAsMembers\n"; |
---|
88 | |
---|
89 | $copyParms = ""; |
---|
90 | for ($i = 1; $i <= $numArgs; ++$i) { |
---|
91 | if ($i > 1) { |
---|
92 | $copyParms .= ", "; |
---|
93 | } |
---|
94 | $copyParms .= "T$i ia$i"; |
---|
95 | } |
---|
96 | print OUT "#define BOOST_SIGNALS_COPY_PARMS $copyParms\n"; |
---|
97 | |
---|
98 | $initArgs = ""; |
---|
99 | if ($numArgs > 0) { |
---|
100 | $initArgs = ":"; |
---|
101 | } |
---|
102 | for ($i = 1; $i <= $numArgs; ++$i) { |
---|
103 | if ($i > 1) { |
---|
104 | $initArgs .= ", "; |
---|
105 | } |
---|
106 | $initArgs .= "a$i(ia$i)"; |
---|
107 | } |
---|
108 | print OUT "#define BOOST_SIGNALS_INIT_ARGS $initArgs\n"; |
---|
109 | |
---|
110 | $argTypes = ""; |
---|
111 | for ($i = 1; $i <= $numArgs; ++$i) { |
---|
112 | $argTypes .= "typedef T$i arg". ($i+1) . "_type; "; |
---|
113 | } |
---|
114 | |
---|
115 | print OUT "#define BOOST_SIGNALS_ARG_TYPES $argTypes\n"; |
---|
116 | print OUT "\n"; |
---|
117 | print OUT "#include <boost/signals/signal_template.hpp>\n"; |
---|
118 | print OUT "\n"; |
---|
119 | print OUT "#undef BOOST_SIGNALS_ARG_TYPES\n"; |
---|
120 | print OUT "#undef BOOST_SIGNALS_INIT_ARGS\n"; |
---|
121 | print OUT "#undef BOOST_SIGNALS_COPY_PARMS\n"; |
---|
122 | print OUT "#undef BOOST_SIGNALS_ARGS_AS_MEMBERS\n"; |
---|
123 | print OUT "#undef BOOST_SIGNALS_BOUND_ARGS\n"; |
---|
124 | print OUT "#undef BOOST_SIGNALS_ARGS\n"; |
---|
125 | print OUT "#undef BOOST_SIGNALS_PARMS\n"; |
---|
126 | print OUT "#undef BOOST_SIGNALS_TEMPLATE_ARGS\n"; |
---|
127 | print OUT "#undef BOOST_SIGNALS_TEMPLATE_PARMS\n"; |
---|
128 | print OUT "#undef BOOST_SIGNALS_NUM_ARGS\n"; |
---|
129 | print OUT "\n"; |
---|
130 | print OUT "#endif // BOOST_SIGNALS_SIGNAL" . $numArgs . "_HEADER\n"; |
---|
131 | close OUT; |
---|
132 | } |
---|