gen_signal_N.pl 3.9 KB

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