script_core 0.3.0 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1057) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/CMakeLists.txt +1 -1
  4. data/Gemfile +2 -2
  5. data/README.md +1 -0
  6. data/ext/enterprise_script_service/flags.rb +2 -2
  7. data/ext/enterprise_script_service/mruby-mpdecimal/mrbgem.rake +2 -1
  8. data/ext/enterprise_script_service/msgpack/external/boost/predef/.gitattributes +96 -0
  9. data/ext/enterprise_script_service/msgpack/external/boost/predef/.gitignore +3 -0
  10. data/ext/enterprise_script_service/msgpack/external/boost/predef/.project +17 -0
  11. data/ext/enterprise_script_service/msgpack/external/boost/predef/.pydevproject +5 -0
  12. data/ext/enterprise_script_service/msgpack/external/boost/predef/.travis.yml +109 -0
  13. data/ext/enterprise_script_service/msgpack/external/boost/predef/appveyor.yml +149 -0
  14. data/ext/enterprise_script_service/msgpack/external/boost/predef/build.jam +6 -0
  15. data/ext/enterprise_script_service/msgpack/external/boost/predef/check/predef.jam +17 -0
  16. data/ext/enterprise_script_service/msgpack/external/boost/predef/doc/.gitignore +1 -0
  17. data/ext/enterprise_script_service/msgpack/external/boost/predef/doc/build.jam +100 -0
  18. data/ext/enterprise_script_service/msgpack/external/boost/predef/doc/hardware_simd.qbk +89 -0
  19. data/ext/enterprise_script_service/msgpack/external/boost/predef/doc/history.qbk +93 -0
  20. data/ext/enterprise_script_service/msgpack/external/boost/predef/doc/predef.qbk +734 -0
  21. data/ext/enterprise_script_service/msgpack/external/boost/predef/doc/todo.qbk +12 -0
  22. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/detail/endian.hpp +11 -0
  23. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/architecture/alpha.h +59 -0
  24. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/architecture/arm.h +80 -0
  25. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/architecture/blackfin.h +46 -0
  26. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/architecture/convex.h +65 -0
  27. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/architecture/ia64.h +49 -0
  28. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/architecture/m68k.h +82 -0
  29. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/architecture/mips.h +73 -0
  30. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/architecture/parisc.h +64 -0
  31. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/architecture/ppc.h +72 -0
  32. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/architecture/ptx.h +44 -0
  33. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/architecture/pyramid.h +42 -0
  34. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/architecture/rs6k.h +56 -0
  35. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/architecture/sparc.h +54 -0
  36. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/architecture/superh.h +67 -0
  37. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/architecture/sys370.h +43 -0
  38. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/architecture/sys390.h +43 -0
  39. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/architecture/x86/32.h +87 -0
  40. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/architecture/x86/64.h +50 -0
  41. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/architecture/x86.h +38 -0
  42. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/architecture/z.h +42 -0
  43. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/architecture.h +33 -0
  44. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/borland.h +63 -0
  45. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/clang.h +56 -0
  46. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/comeau.h +61 -0
  47. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/compaq.h +66 -0
  48. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/diab.h +56 -0
  49. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/digitalmars.h +56 -0
  50. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/dignus.h +56 -0
  51. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/edg.h +56 -0
  52. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/ekopath.h +57 -0
  53. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/gcc.h +68 -0
  54. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/gcc_xml.h +53 -0
  55. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/greenhills.h +66 -0
  56. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/hp_acc.h +61 -0
  57. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/iar.h +56 -0
  58. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/ibm.h +72 -0
  59. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/intel.h +79 -0
  60. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/kai.h +56 -0
  61. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/llvm.h +57 -0
  62. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/metaware.h +53 -0
  63. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/metrowerks.h +77 -0
  64. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/microtec.h +53 -0
  65. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/mpw.h +63 -0
  66. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/nvcc.h +60 -0
  67. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/palm.h +56 -0
  68. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/pgi.h +60 -0
  69. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/sgi_mipspro.h +66 -0
  70. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/sunpro.h +76 -0
  71. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/tendra.h +53 -0
  72. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/visualc.h +105 -0
  73. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler/watcom.h +56 -0
  74. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/compiler.h +44 -0
  75. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/detail/_cassert.h +17 -0
  76. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/detail/_exception.h +15 -0
  77. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/detail/comp_detected.h +10 -0
  78. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/detail/endian_compat.h +26 -0
  79. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/detail/os_detected.h +10 -0
  80. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/detail/platform_detected.h +10 -0
  81. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/detail/test.h +17 -0
  82. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/detail/test_def.h +71 -0
  83. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/hardware/simd/arm/versions.h +32 -0
  84. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/hardware/simd/arm.h +59 -0
  85. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/hardware/simd/ppc/versions.h +51 -0
  86. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/hardware/simd/ppc.h +69 -0
  87. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/hardware/simd/x86/versions.h +129 -0
  88. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/hardware/simd/x86.h +123 -0
  89. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/hardware/simd/x86_amd/versions.h +51 -0
  90. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/hardware/simd/x86_amd.h +87 -0
  91. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/hardware/simd.h +119 -0
  92. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/hardware.h +16 -0
  93. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/language/cuda.h +52 -0
  94. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/language/objc.h +42 -0
  95. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/language/stdc.h +53 -0
  96. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/language/stdcpp.h +121 -0
  97. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/language.h +18 -0
  98. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/library/c/_prefix.h +13 -0
  99. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/library/c/cloudabi.h +53 -0
  100. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/library/c/gnu.h +61 -0
  101. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/library/c/uc.h +47 -0
  102. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/library/c/vms.h +47 -0
  103. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/library/c/zos.h +56 -0
  104. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/library/c.h +21 -0
  105. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/library/std/_prefix.h +23 -0
  106. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/library/std/cxx.h +46 -0
  107. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/library/std/dinkumware.h +52 -0
  108. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/library/std/libcomo.h +47 -0
  109. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/library/std/modena.h +45 -0
  110. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/library/std/msl.h +53 -0
  111. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/library/std/roguewave.h +56 -0
  112. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/library/std/sgi.h +51 -0
  113. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/library/std/stdcpp3.h +53 -0
  114. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/library/std/stlport.h +59 -0
  115. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/library/std/vacpp.h +44 -0
  116. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/library/std.h +25 -0
  117. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/library.h +16 -0
  118. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/make.h +97 -0
  119. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/os/aix.h +66 -0
  120. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/os/amigaos.h +46 -0
  121. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/os/android.h +45 -0
  122. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/os/beos.h +45 -0
  123. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/os/bsd/bsdi.h +48 -0
  124. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/os/bsd/dragonfly.h +50 -0
  125. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/os/bsd/free.h +67 -0
  126. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/os/bsd/net.h +84 -0
  127. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/os/bsd/open.h +251 -0
  128. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/os/bsd.h +103 -0
  129. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/os/cygwin.h +45 -0
  130. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/os/haiku.h +46 -0
  131. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/os/hpux.h +47 -0
  132. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/os/ios.h +51 -0
  133. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/os/irix.h +46 -0
  134. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/os/linux.h +46 -0
  135. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/os/macos.h +65 -0
  136. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/os/os400.h +45 -0
  137. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/os/qnxnto.h +59 -0
  138. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/os/solaris.h +46 -0
  139. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/os/unix.h +76 -0
  140. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/os/vms.h +52 -0
  141. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/os/windows.h +51 -0
  142. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/os.h +33 -0
  143. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/other/endian.h +203 -0
  144. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/other/workaround.h +87 -0
  145. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/other.h +16 -0
  146. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/platform/cloudabi.h +43 -0
  147. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/platform/ios.h +58 -0
  148. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/platform/mingw.h +69 -0
  149. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/platform/mingw32.h +63 -0
  150. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/platform/mingw64.h +63 -0
  151. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/platform/windows_desktop.h +51 -0
  152. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/platform/windows_phone.h +48 -0
  153. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/platform/windows_runtime.h +53 -0
  154. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/platform/windows_server.h +47 -0
  155. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/platform/windows_store.h +50 -0
  156. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/platform/windows_system.h +47 -0
  157. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/platform/windows_uwp.h +60 -0
  158. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/platform.h +28 -0
  159. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/version.h +15 -0
  160. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef/version_number.h +72 -0
  161. data/ext/enterprise_script_service/msgpack/external/boost/predef/include/boost/predef.h +24 -0
  162. data/ext/enterprise_script_service/msgpack/external/boost/predef/index.html +14 -0
  163. data/ext/enterprise_script_service/msgpack/external/boost/predef/meta/libraries.json +14 -0
  164. data/ext/enterprise_script_service/msgpack/external/boost/predef/test/.gitignore +3 -0
  165. data/ext/enterprise_script_service/msgpack/external/boost/predef/test/build.jam +80 -0
  166. data/ext/enterprise_script_service/msgpack/external/boost/predef/test/check_value.cpp +26 -0
  167. data/ext/enterprise_script_service/msgpack/external/boost/predef/test/info_as_c.c +7 -0
  168. data/ext/enterprise_script_service/msgpack/external/boost/predef/test/info_as_cpp.cpp +7 -0
  169. data/ext/enterprise_script_service/msgpack/external/boost/predef/test/info_as_objc.m +7 -0
  170. data/ext/enterprise_script_service/msgpack/external/boost/predef/test/info_as_objcpp.mm +7 -0
  171. data/ext/enterprise_script_service/msgpack/external/boost/predef/test/macos_endian.c +21 -0
  172. data/ext/enterprise_script_service/msgpack/external/boost/predef/test/macos_vs_bsd.c +19 -0
  173. data/ext/enterprise_script_service/msgpack/external/boost/predef/test/make.cpp +94 -0
  174. data/ext/enterprise_script_service/msgpack/external/boost/predef/test/platform_windows.cpp +177 -0
  175. data/ext/enterprise_script_service/msgpack/external/boost/predef/test/predef_info.h +46 -0
  176. data/ext/enterprise_script_service/msgpack/external/boost/predef/test/tested_at.cpp +62 -0
  177. data/ext/enterprise_script_service/msgpack/external/boost/predef/test/tested_at_outdated.cpp +18 -0
  178. data/ext/enterprise_script_service/msgpack/external/boost/predef/test/version.cpp +83 -0
  179. data/ext/enterprise_script_service/msgpack/external/boost/predef/test/workaround.cpp +62 -0
  180. data/ext/enterprise_script_service/msgpack/external/boost/predef/test/workaround_strict_config.cpp +17 -0
  181. data/ext/enterprise_script_service/msgpack/external/boost/predef/tools/check/build.jam +9 -0
  182. data/ext/enterprise_script_service/msgpack/external/boost/predef/tools/check/predef.jam +202 -0
  183. data/ext/enterprise_script_service/msgpack/external/boost/predef/tools/check/predef_check.h +98 -0
  184. data/ext/enterprise_script_service/msgpack/external/boost/predef/tools/check/predef_check_as_c.c +7 -0
  185. data/ext/enterprise_script_service/msgpack/external/boost/predef/tools/check/predef_check_as_cpp.cpp +7 -0
  186. data/ext/enterprise_script_service/msgpack/external/boost/predef/tools/check/predef_check_as_objc.m +7 -0
  187. data/ext/enterprise_script_service/msgpack/external/boost/predef/tools/check/predef_check_as_objcpp.mm +7 -0
  188. data/ext/enterprise_script_service/msgpack/external/boost/predef/tools/check/predef_check_cc.h +19 -0
  189. data/ext/enterprise_script_service/msgpack/external/boost/predef/tools/check/predef_check_cc_as_c.c +7 -0
  190. data/ext/enterprise_script_service/msgpack/external/boost/predef/tools/check/predef_check_cc_as_cpp.cpp +7 -0
  191. data/ext/enterprise_script_service/msgpack/external/boost/predef/tools/check/predef_check_cc_as_objc.m +7 -0
  192. data/ext/enterprise_script_service/msgpack/external/boost/predef/tools/check/predef_check_cc_as_objcpp.mm +7 -0
  193. data/ext/enterprise_script_service/msgpack/external/boost/predef/tools/ci/build_log.py +428 -0
  194. data/ext/enterprise_script_service/msgpack/external/boost/predef/tools/ci/common.py +878 -0
  195. data/ext/enterprise_script_service/msgpack/external/boost/predef/tools/ci/library_test.py +198 -0
  196. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/.gitattributes +96 -0
  197. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/.travis.yml +39 -0
  198. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/appveyor.yml +36 -0
  199. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/AppendixA-AnIntroductiontoPreprocessorMetaprogramming.html +2494 -0
  200. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/acknowledgements.html +58 -0
  201. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/bibliography.html +58 -0
  202. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/contents.html +38 -0
  203. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/data/arrays.html +55 -0
  204. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/data/lists.html +42 -0
  205. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/data/sequences.html +60 -0
  206. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/data/tuples.html +42 -0
  207. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/data.html +27 -0
  208. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/examples/array_arithmetic.c +196 -0
  209. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/examples/catch_builtin.cpp +51 -0
  210. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/examples/delay.c +95 -0
  211. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/examples/duffs_device.c +61 -0
  212. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/examples/is_integral.cpp +49 -0
  213. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/examples/linear_fib.c +91 -0
  214. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/examples.html +27 -0
  215. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/arithmetic/add.html +31 -0
  216. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/arithmetic/dec.html +30 -0
  217. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/arithmetic/div.html +31 -0
  218. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/arithmetic/inc.html +30 -0
  219. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/arithmetic/mod.html +31 -0
  220. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/arithmetic/mul.html +31 -0
  221. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/arithmetic/sub.html +31 -0
  222. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/arithmetic.html +36 -0
  223. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/array/data.html +30 -0
  224. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/array/elem.html +30 -0
  225. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/array/enum.html +24 -0
  226. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/array/insert.html +31 -0
  227. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/array/pop_back.html +31 -0
  228. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/array/pop_front.html +31 -0
  229. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/array/push_back.html +30 -0
  230. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/array/push_front.html +30 -0
  231. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/array/remove.html +31 -0
  232. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/array/replace.html +31 -0
  233. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/array/reverse.html +30 -0
  234. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/array/size.html +30 -0
  235. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/array/to_list.html +24 -0
  236. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/array/to_seq.html +24 -0
  237. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/array/to_tuple.html +24 -0
  238. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/array.html +43 -0
  239. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/assert_msg.html +31 -0
  240. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/cat.html +30 -0
  241. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/comma.html +31 -0
  242. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/comma_if.html +31 -0
  243. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/comparison/equal.html +31 -0
  244. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/comparison/greater.html +31 -0
  245. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/comparison/greater_equal.html +31 -0
  246. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/comparison/less.html +31 -0
  247. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/comparison/less_equal.html +31 -0
  248. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/comparison/not_equal.html +31 -0
  249. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/comparison.html +35 -0
  250. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/config/limits.html +44 -0
  251. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/config/variadics.html +32 -0
  252. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/control/deduce_d.html +30 -0
  253. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/control/expr_if.html +30 -0
  254. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/control/expr_iif.html +30 -0
  255. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/control/if.html +30 -0
  256. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/control/iif.html +30 -0
  257. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/control/while.html +31 -0
  258. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/control.html +35 -0
  259. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/debug/assert.html +31 -0
  260. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/debug/line.html +30 -0
  261. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/debug.html +31 -0
  262. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/dec.html +31 -0
  263. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/empty.html +31 -0
  264. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/enum.html +31 -0
  265. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/enum_params.html +31 -0
  266. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/enum_shifted.html +31 -0
  267. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/enum_shifted_params.html +31 -0
  268. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/epwad.html +31 -0
  269. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/epwd.html +31 -0
  270. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/expand.html +31 -0
  271. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/expr_if.html +31 -0
  272. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/facilities/apply.html +30 -0
  273. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/facilities/empty.html +30 -0
  274. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/facilities/expand.html +30 -0
  275. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/facilities/identity.html +32 -0
  276. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/facilities/intercept.html +30 -0
  277. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/facilities/overload.html +28 -0
  278. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/facilities.html +34 -0
  279. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/for.html +31 -0
  280. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/identity.html +31 -0
  281. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/if.html +31 -0
  282. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/inc.html +31 -0
  283. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/iterate.html +31 -0
  284. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/iteration/iterate.html +43 -0
  285. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/iteration/local.html +30 -0
  286. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/iteration/self.html +30 -0
  287. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/iteration.html +32 -0
  288. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/library.html +26 -0
  289. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/limits.html +31 -0
  290. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/list/adt.html +35 -0
  291. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/list/append.html +31 -0
  292. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/list/at.html +31 -0
  293. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/list/cat.html +31 -0
  294. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/list/enum.html +31 -0
  295. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/list/filter.html +31 -0
  296. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/list/first_n.html +31 -0
  297. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/list/fold_left.html +34 -0
  298. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/list/fold_right.html +34 -0
  299. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/list/for_each.html +31 -0
  300. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/list/for_each_i.html +31 -0
  301. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/list/for_each_product.html +31 -0
  302. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/list/rest_n.html +31 -0
  303. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/list/reverse.html +31 -0
  304. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/list/size.html +31 -0
  305. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/list/to_array.html +29 -0
  306. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/list/to_seq.html +25 -0
  307. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/list/to_tuple.html +31 -0
  308. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/list/transform.html +31 -0
  309. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/list.html +47 -0
  310. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/logical/and.html +30 -0
  311. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/logical/bitand.html +30 -0
  312. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/logical/bitnor.html +30 -0
  313. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/logical/bitor.html +30 -0
  314. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/logical/bitxor.html +30 -0
  315. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/logical/bool.html +30 -0
  316. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/logical/compl.html +30 -0
  317. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/logical/nor.html +30 -0
  318. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/logical/not.html +30 -0
  319. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/logical/or.html +30 -0
  320. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/logical/xor.html +30 -0
  321. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/logical.html +40 -0
  322. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/max.html +31 -0
  323. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/min.html +31 -0
  324. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/preprocessor.html +26 -0
  325. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/punctuation/comma.html +30 -0
  326. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/punctuation/comma_if.html +30 -0
  327. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/punctuation/is_begin_parens.html +26 -0
  328. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/punctuation/paren.html +31 -0
  329. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/punctuation/paren_if.html +31 -0
  330. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/punctuation/remove_parens.html +26 -0
  331. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/punctuation.html +33 -0
  332. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/repeat.html +31 -0
  333. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/repeat_2nd.html +31 -0
  334. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/repeat_3rd.html +31 -0
  335. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/repeat_from_to.html +31 -0
  336. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/repeat_from_to_2nd.html +31 -0
  337. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/repeat_from_to_3rd.html +31 -0
  338. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/repetition/deduce_r.html +30 -0
  339. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/repetition/deduce_z.html +30 -0
  340. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/repetition/enum.html +31 -0
  341. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/repetition/enum_binary_params.html +31 -0
  342. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/repetition/enum_params.html +31 -0
  343. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/repetition/enum_shifted.html +31 -0
  344. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/repetition/enum_shifted_params.html +31 -0
  345. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/repetition/enum_trailing.html +31 -0
  346. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/repetition/enum_trailing_params.html +31 -0
  347. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/repetition/epwad.html +30 -0
  348. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/repetition/epwd.html +30 -0
  349. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/repetition/esbp.html +31 -0
  350. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/repetition/etbp.html +31 -0
  351. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/repetition/for.html +31 -0
  352. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/repetition/repeat.html +34 -0
  353. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/repetition/repeat_from_to.html +36 -0
  354. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/repetition.html +44 -0
  355. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/selection/max.html +31 -0
  356. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/selection/min.html +31 -0
  357. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/selection.html +31 -0
  358. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/seq/cat.html +38 -0
  359. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/seq/elem.html +35 -0
  360. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/seq/enum.html +35 -0
  361. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/seq/filter.html +37 -0
  362. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/seq/first_n.html +36 -0
  363. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/seq/fold_left.html +38 -0
  364. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/seq/fold_right.html +38 -0
  365. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/seq/for_each.html +38 -0
  366. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/seq/for_each_i.html +38 -0
  367. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/seq/for_each_product.html +38 -0
  368. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/seq/insert.html +35 -0
  369. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/seq/pop_back.html +36 -0
  370. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/seq/pop_front.html +36 -0
  371. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/seq/push_back.html +35 -0
  372. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/seq/push_front.html +35 -0
  373. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/seq/remove.html +35 -0
  374. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/seq/replace.html +35 -0
  375. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/seq/rest_n.html +36 -0
  376. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/seq/reverse.html +37 -0
  377. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/seq/seq.html +39 -0
  378. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/seq/size.html +35 -0
  379. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/seq/subseq.html +35 -0
  380. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/seq/to_array.html +36 -0
  381. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/seq/to_list.html +30 -0
  382. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/seq/to_tuple.html +36 -0
  383. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/seq/transform.html +37 -0
  384. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/seq/variadic_seq_to_seq.html +34 -0
  385. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/seq.html +86 -0
  386. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/slot/counter.html +31 -0
  387. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/slot/slot.html +31 -0
  388. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/slot.html +30 -0
  389. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/stringize.html +30 -0
  390. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/tuple/eat.html +25 -0
  391. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/tuple/elem.html +25 -0
  392. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/tuple/enum.html +25 -0
  393. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/tuple/insert.html +27 -0
  394. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/tuple/pop_back.html +28 -0
  395. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/tuple/pop_front.html +28 -0
  396. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/tuple/push_back.html +26 -0
  397. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/tuple/push_front.html +26 -0
  398. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/tuple/rem.html +27 -0
  399. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/tuple/remove.html +27 -0
  400. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/tuple/replace.html +28 -0
  401. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/tuple/reverse.html +25 -0
  402. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/tuple/size.html +25 -0
  403. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/tuple/to_array.html +25 -0
  404. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/tuple/to_list.html +25 -0
  405. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/tuple/to_seq.html +31 -0
  406. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/tuple.html +59 -0
  407. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/variadic/elem.html +29 -0
  408. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/variadic/size.html +25 -0
  409. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/variadic/to_array.html +25 -0
  410. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/variadic/to_list.html +25 -0
  411. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/variadic/to_seq.html +30 -0
  412. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/variadic/to_tuple.html +31 -0
  413. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/variadic.html +33 -0
  414. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/while.html +31 -0
  415. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers/wstringize.html +30 -0
  416. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/headers.html +249 -0
  417. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/index.html +23 -0
  418. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/miscellanea.html +24 -0
  419. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/add.html +68 -0
  420. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/add_d.html +90 -0
  421. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/and.html +64 -0
  422. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/apply.html +64 -0
  423. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/array_data.html +49 -0
  424. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/array_elem.html +51 -0
  425. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/array_enum.html +37 -0
  426. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/array_insert.html +71 -0
  427. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/array_insert_d.html +63 -0
  428. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/array_pop_back.html +59 -0
  429. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/array_pop_back_z.html +51 -0
  430. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/array_pop_front.html +51 -0
  431. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/array_pop_front_z.html +51 -0
  432. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/array_push_back.html +49 -0
  433. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/array_push_front.html +49 -0
  434. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/array_remove.html +60 -0
  435. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/array_remove_d.html +51 -0
  436. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/array_replace.html +64 -0
  437. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/array_replace_d.html +55 -0
  438. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/array_reverse.html +45 -0
  439. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/array_size.html +45 -0
  440. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/array_to_list.html +41 -0
  441. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/array_to_seq.html +37 -0
  442. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/array_to_tuple.html +39 -0
  443. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/assert.html +114 -0
  444. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/assert_msg.html +66 -0
  445. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/assign_slot.html +61 -0
  446. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/bitand.html +65 -0
  447. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/bitnor.html +65 -0
  448. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/bitor.html +65 -0
  449. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/bitxor.html +66 -0
  450. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/bool.html +54 -0
  451. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/cat.html +57 -0
  452. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/comma.html +43 -0
  453. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/comma_if.html +60 -0
  454. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/compl.html +58 -0
  455. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/config_extended_line_info.html +54 -0
  456. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/counter.html +58 -0
  457. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/dec.html +54 -0
  458. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/deduce_d.html +82 -0
  459. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/deduce_r.html +48 -0
  460. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/deduce_z.html +48 -0
  461. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/div.html +63 -0
  462. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/div_d.html +85 -0
  463. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/empty.html +47 -0
  464. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/enum.html +80 -0
  465. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/enum_binary_params.html +76 -0
  466. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/enum_binary_params_z.html +93 -0
  467. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/enum_params.html +69 -0
  468. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/enum_params_with_a_default.html +83 -0
  469. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/enum_params_with_defaults.html +84 -0
  470. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/enum_params_z.html +82 -0
  471. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/enum_shifted.html +82 -0
  472. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/enum_shifted_params.html +73 -0
  473. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/enum_shifted_params_z.html +79 -0
  474. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/enum_shifted_z.html +93 -0
  475. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/enum_trailing.html +83 -0
  476. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/enum_trailing_params.html +66 -0
  477. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/enum_trailing_params_z.html +81 -0
  478. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/enum_trailing_z.html +96 -0
  479. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/enum_z.html +96 -0
  480. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/equal.html +64 -0
  481. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/equal_d.html +69 -0
  482. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/esbp.html +65 -0
  483. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/esbpz.html +67 -0
  484. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/etbp.html +83 -0
  485. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/etbpz.html +67 -0
  486. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/expand.html +67 -0
  487. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/expr_if.html +70 -0
  488. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/expr_iif.html +67 -0
  489. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/filename_x.html +52 -0
  490. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/for.html +105 -0
  491. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/for_r.html +148 -0
  492. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/for_r_macros.html +44 -0
  493. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/frame_finish.html +42 -0
  494. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/frame_flags.html +42 -0
  495. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/frame_iteration.html +73 -0
  496. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/frame_start.html +42 -0
  497. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/greater.html +65 -0
  498. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/greater_d.html +69 -0
  499. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/greater_equal.html +65 -0
  500. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/greater_equal_d.html +69 -0
  501. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/identity.html +57 -0
  502. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/identity_n.html +58 -0
  503. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/if.html +63 -0
  504. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/iif.html +66 -0
  505. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/inc.html +54 -0
  506. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/include_self.html +101 -0
  507. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/indirect_self.html +45 -0
  508. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/intercept.html +51 -0
  509. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/is_begin_parens.html +47 -0
  510. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/is_iterating.html +38 -0
  511. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/is_selfish.html +38 -0
  512. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/iterate.html +83 -0
  513. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/iteration.html +55 -0
  514. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/iteration_depth.html +73 -0
  515. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/iteration_finish.html +57 -0
  516. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/iteration_flags.html +68 -0
  517. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/iteration_limits.html +59 -0
  518. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/iteration_params_x.html +77 -0
  519. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/iteration_start.html +57 -0
  520. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/less.html +65 -0
  521. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/less_d.html +70 -0
  522. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/less_equal.html +65 -0
  523. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/less_equal_d.html +70 -0
  524. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/limit_dim.html +35 -0
  525. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/limit_for.html +34 -0
  526. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/limit_iteration.html +34 -0
  527. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/limit_iteration_dim.html +34 -0
  528. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/limit_mag.html +34 -0
  529. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/limit_repeat.html +39 -0
  530. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/limit_seq.html +41 -0
  531. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/limit_slot_count.html +34 -0
  532. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/limit_slot_sig.html +34 -0
  533. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/limit_tuple.html +33 -0
  534. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/limit_variadic.html +24 -0
  535. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/limit_while.html +34 -0
  536. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/line.html +112 -0
  537. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_append.html +69 -0
  538. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_append_d.html +96 -0
  539. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_at.html +61 -0
  540. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_at_d.html +63 -0
  541. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_cat.html +58 -0
  542. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_cat_d.html +67 -0
  543. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_cons.html +87 -0
  544. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_enum.html +62 -0
  545. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_enum_r.html +69 -0
  546. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_filter.html +76 -0
  547. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_filter_d.html +86 -0
  548. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_first.html +62 -0
  549. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_first_n.html +62 -0
  550. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_first_n_d.html +71 -0
  551. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_fold_left.html +75 -0
  552. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_fold_left_2nd.html +75 -0
  553. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_fold_left_2nd_d.html +86 -0
  554. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_fold_left_d.html +81 -0
  555. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_fold_left_d_old.html +86 -0
  556. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_fold_right.html +79 -0
  557. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_fold_right_2nd.html +79 -0
  558. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_fold_right_2nd_d.html +86 -0
  559. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_fold_right_d.html +81 -0
  560. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_fold_right_d_old.html +90 -0
  561. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_for_each.html +75 -0
  562. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_for_each_i.html +75 -0
  563. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_for_each_i_r.html +82 -0
  564. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_for_each_product.html +86 -0
  565. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_for_each_product_r.html +118 -0
  566. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_for_each_r.html +81 -0
  567. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_is_cons.html +51 -0
  568. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_is_nil.html +51 -0
  569. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_nil.html +68 -0
  570. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_rest.html +62 -0
  571. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_rest_n.html +62 -0
  572. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_rest_n_d.html +71 -0
  573. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_reverse.html +55 -0
  574. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_reverse_d.html +63 -0
  575. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_size.html +55 -0
  576. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_size_d.html +67 -0
  577. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_to_array.html +47 -0
  578. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_to_array_d.html +34 -0
  579. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_to_seq.html +44 -0
  580. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_to_seq_r.html +32 -0
  581. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_to_tuple.html +55 -0
  582. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_to_tuple_r.html +62 -0
  583. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_transform.html +78 -0
  584. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/list_transform_d.html +86 -0
  585. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/local_iterate.html +62 -0
  586. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/local_limits.html +80 -0
  587. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/local_macro.html +64 -0
  588. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/lparen.html +52 -0
  589. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/lparen_if.html +61 -0
  590. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/max.html +64 -0
  591. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/max_d.html +70 -0
  592. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/min.html +64 -0
  593. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/min_d.html +70 -0
  594. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/mod.html +63 -0
  595. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/mod_d.html +75 -0
  596. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/mul.html +68 -0
  597. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/mul_d.html +91 -0
  598. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/nil.html +41 -0
  599. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/nor.html +64 -0
  600. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/not.html +59 -0
  601. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/not_equal.html +64 -0
  602. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/not_equal_d.html +69 -0
  603. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/or.html +64 -0
  604. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/overload.html +58 -0
  605. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/relative_finish.html +46 -0
  606. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/relative_flags.html +46 -0
  607. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/relative_iteration.html +101 -0
  608. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/relative_start.html +46 -0
  609. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/remove_parens.html +44 -0
  610. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/repeat.html +80 -0
  611. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/repeat_1st.html +82 -0
  612. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/repeat_2nd.html +82 -0
  613. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/repeat_3rd.html +82 -0
  614. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/repeat_from_to.html +102 -0
  615. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/repeat_from_to_1st.html +91 -0
  616. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/repeat_from_to_2nd.html +91 -0
  617. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/repeat_from_to_3rd.html +91 -0
  618. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/repeat_from_to_d.html +83 -0
  619. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/repeat_from_to_d_z.html +84 -0
  620. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/repeat_from_to_z.html +105 -0
  621. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/repeat_z.html +92 -0
  622. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/repeat_z_macros.html +45 -0
  623. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/rparen.html +53 -0
  624. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/rparen_if.html +61 -0
  625. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_cat.html +64 -0
  626. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_cat_s.html +60 -0
  627. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_elem.html +59 -0
  628. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_enum.html +66 -0
  629. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_filter.html +93 -0
  630. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_filter_s.html +79 -0
  631. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_first_n.html +67 -0
  632. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_fold_left.html +90 -0
  633. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_fold_left_s.html +96 -0
  634. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_fold_right.html +92 -0
  635. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_fold_right_s.html +97 -0
  636. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_for_each.html +90 -0
  637. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_for_each_i.html +91 -0
  638. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_for_each_i_r.html +78 -0
  639. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_for_each_product.html +100 -0
  640. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_for_each_product_r.html +81 -0
  641. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_for_each_r.html +77 -0
  642. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_head.html +63 -0
  643. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_insert.html +70 -0
  644. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_nil.html +81 -0
  645. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_pop_back.html +68 -0
  646. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_pop_front.html +68 -0
  647. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_push_back.html +76 -0
  648. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_push_front.html +78 -0
  649. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_remove.html +66 -0
  650. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_replace.html +71 -0
  651. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_rest_n.html +55 -0
  652. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_reverse.html +68 -0
  653. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_reverse_s.html +55 -0
  654. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_size.html +55 -0
  655. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_subseq.html +69 -0
  656. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_tail.html +63 -0
  657. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_to_array.html +55 -0
  658. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_to_list.html +34 -0
  659. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_to_tuple.html +55 -0
  660. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_transform.html +93 -0
  661. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/seq_transform_s.html +79 -0
  662. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/slot.html +60 -0
  663. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/stringize.html +50 -0
  664. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/sub.html +63 -0
  665. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/sub_d.html +85 -0
  666. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/tuple_eat.html +58 -0
  667. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/tuple_elem.html +65 -0
  668. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/tuple_enum.html +55 -0
  669. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/tuple_insert.html +54 -0
  670. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/tuple_insert_d.html +46 -0
  671. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/tuple_pop_back.html +48 -0
  672. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/tuple_pop_back_z.html +40 -0
  673. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/tuple_pop_front.html +47 -0
  674. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/tuple_pop_front_z.html +40 -0
  675. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/tuple_push_back.html +39 -0
  676. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/tuple_push_front.html +39 -0
  677. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/tuple_rem.html +60 -0
  678. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/tuple_rem_ctor.html +61 -0
  679. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/tuple_remove.html +50 -0
  680. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/tuple_remove_d.html +41 -0
  681. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/tuple_replace.html +51 -0
  682. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/tuple_replace_d.html +42 -0
  683. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/tuple_reverse.html +61 -0
  684. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/tuple_size.html +32 -0
  685. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/tuple_to_array.html +50 -0
  686. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/tuple_to_list.html +60 -0
  687. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/tuple_to_seq.html +51 -0
  688. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/update_counter.html +34 -0
  689. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/value.html +37 -0
  690. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/variadic_elem.html +42 -0
  691. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/variadic_seq_to_seq.html +35 -0
  692. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/variadic_size.html +33 -0
  693. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/variadic_to_array.html +32 -0
  694. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/variadic_to_list.html +31 -0
  695. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/variadic_to_seq.html +32 -0
  696. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/variadic_to_tuple.html +32 -0
  697. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/variadics.html +30 -0
  698. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/while.html +116 -0
  699. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/while_d.html +117 -0
  700. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/while_d_macros.html +89 -0
  701. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/wstringize.html +49 -0
  702. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref/xor.html +64 -0
  703. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/ref.html +319 -0
  704. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/styles.css +87 -0
  705. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/syntax.html +307 -0
  706. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/terms/evaluated.html +27 -0
  707. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/terms/named_external.html +25 -0
  708. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/terms.html +23 -0
  709. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/title.html +25 -0
  710. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/top.html +32 -0
  711. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/topics/evaluated_slots.html +157 -0
  712. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/topics/file_iteration.html +1044 -0
  713. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/topics/incompatible.html +140 -0
  714. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/topics/local_iteration.html +156 -0
  715. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/topics/motivation.html +119 -0
  716. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/topics/problems.html +135 -0
  717. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/topics/reentrancy.html +298 -0
  718. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/topics/techniques.html +350 -0
  719. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/topics/variadic_macros.html +262 -0
  720. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/doc/topics.html +27 -0
  721. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/arithmetic/add.hpp +51 -0
  722. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/arithmetic/dec.hpp +289 -0
  723. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/arithmetic/detail/div_base.hpp +61 -0
  724. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/arithmetic/div.hpp +39 -0
  725. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/arithmetic/inc.hpp +288 -0
  726. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/arithmetic/mod.hpp +39 -0
  727. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/arithmetic/mul.hpp +53 -0
  728. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/arithmetic/sub.hpp +50 -0
  729. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/arithmetic.hpp +25 -0
  730. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/array/data.hpp +28 -0
  731. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/array/detail/get_data.hpp +55 -0
  732. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/array/elem.hpp +29 -0
  733. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/array/enum.hpp +33 -0
  734. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/array/insert.hpp +55 -0
  735. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/array/pop_back.hpp +37 -0
  736. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/array/pop_front.hpp +38 -0
  737. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/array/push_back.hpp +35 -0
  738. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/array/push_front.hpp +35 -0
  739. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/array/remove.hpp +54 -0
  740. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/array/replace.hpp +49 -0
  741. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/array/reverse.hpp +29 -0
  742. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/array/size.hpp +28 -0
  743. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/array/to_list.hpp +47 -0
  744. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/array/to_seq.hpp +46 -0
  745. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/array/to_tuple.hpp +33 -0
  746. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/array.hpp +32 -0
  747. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/assert_msg.hpp +17 -0
  748. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/cat.hpp +35 -0
  749. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/comma.hpp +17 -0
  750. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/comma_if.hpp +17 -0
  751. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/comparison/equal.hpp +34 -0
  752. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/comparison/greater.hpp +38 -0
  753. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/comparison/greater_equal.hpp +38 -0
  754. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/comparison/less.hpp +46 -0
  755. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/comparison/less_equal.hpp +39 -0
  756. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/comparison/not_equal.hpp +814 -0
  757. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/comparison.hpp +24 -0
  758. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/config/config.hpp +106 -0
  759. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/config/limits.hpp +30 -0
  760. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/control/deduce_d.hpp +22 -0
  761. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/control/detail/dmc/while.hpp +536 -0
  762. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/control/detail/edg/while.hpp +534 -0
  763. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/control/detail/msvc/while.hpp +277 -0
  764. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/control/detail/while.hpp +536 -0
  765. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/control/expr_if.hpp +30 -0
  766. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/control/expr_iif.hpp +31 -0
  767. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/control/if.hpp +30 -0
  768. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/control/iif.hpp +34 -0
  769. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/control/while.hpp +312 -0
  770. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/control.hpp +22 -0
  771. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/debug/assert.hpp +44 -0
  772. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/debug/error.hpp +33 -0
  773. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/debug/line.hpp +35 -0
  774. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/debug.hpp +18 -0
  775. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/dec.hpp +17 -0
  776. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/detail/auto_rec.hpp +293 -0
  777. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/detail/check.hpp +48 -0
  778. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/detail/dmc/auto_rec.hpp +286 -0
  779. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/detail/is_binary.hpp +30 -0
  780. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/detail/is_nullary.hpp +30 -0
  781. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/detail/is_unary.hpp +30 -0
  782. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/detail/null.hpp +17 -0
  783. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/detail/split.hpp +35 -0
  784. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/empty.hpp +17 -0
  785. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/enum.hpp +17 -0
  786. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/enum_params.hpp +17 -0
  787. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/enum_params_with_a_default.hpp +17 -0
  788. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/enum_params_with_defaults.hpp +17 -0
  789. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/enum_shifted.hpp +17 -0
  790. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/enum_shifted_params.hpp +17 -0
  791. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/expand.hpp +17 -0
  792. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/expr_if.hpp +17 -0
  793. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/facilities/apply.hpp +34 -0
  794. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/facilities/detail/is_empty.hpp +55 -0
  795. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/facilities/empty.hpp +23 -0
  796. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/facilities/expand.hpp +28 -0
  797. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/facilities/identity.hpp +27 -0
  798. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/facilities/intercept.hpp +277 -0
  799. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/facilities/is_1.hpp +23 -0
  800. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/facilities/is_empty.hpp +56 -0
  801. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/facilities/is_empty_or_1.hpp +31 -0
  802. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/facilities/is_empty_variadic.hpp +57 -0
  803. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/facilities/overload.hpp +25 -0
  804. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/facilities.hpp +23 -0
  805. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/for.hpp +17 -0
  806. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/identity.hpp +17 -0
  807. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/if.hpp +17 -0
  808. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/inc.hpp +17 -0
  809. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iterate.hpp +17 -0
  810. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iteration/detail/bounds/lower1.hpp +99 -0
  811. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iteration/detail/bounds/lower2.hpp +99 -0
  812. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iteration/detail/bounds/lower3.hpp +99 -0
  813. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iteration/detail/bounds/lower4.hpp +99 -0
  814. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iteration/detail/bounds/lower5.hpp +99 -0
  815. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iteration/detail/bounds/upper1.hpp +99 -0
  816. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iteration/detail/bounds/upper2.hpp +99 -0
  817. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iteration/detail/bounds/upper3.hpp +99 -0
  818. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iteration/detail/bounds/upper4.hpp +99 -0
  819. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iteration/detail/bounds/upper5.hpp +99 -0
  820. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iteration/detail/finish.hpp +99 -0
  821. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iteration/detail/iter/forward1.hpp +1342 -0
  822. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iteration/detail/iter/forward2.hpp +1338 -0
  823. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iteration/detail/iter/forward3.hpp +1338 -0
  824. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iteration/detail/iter/forward4.hpp +1338 -0
  825. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iteration/detail/iter/forward5.hpp +1338 -0
  826. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iteration/detail/iter/reverse1.hpp +1296 -0
  827. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iteration/detail/iter/reverse2.hpp +1296 -0
  828. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iteration/detail/iter/reverse3.hpp +1296 -0
  829. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iteration/detail/iter/reverse4.hpp +1296 -0
  830. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iteration/detail/iter/reverse5.hpp +1296 -0
  831. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iteration/detail/local.hpp +812 -0
  832. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iteration/detail/rlocal.hpp +782 -0
  833. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iteration/detail/self.hpp +21 -0
  834. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iteration/detail/start.hpp +99 -0
  835. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iteration/iterate.hpp +82 -0
  836. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iteration/local.hpp +26 -0
  837. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iteration/self.hpp +19 -0
  838. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/iteration.hpp +19 -0
  839. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/library.hpp +37 -0
  840. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/limits.hpp +17 -0
  841. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/list/adt.hpp +73 -0
  842. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/list/append.hpp +40 -0
  843. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/list/at.hpp +39 -0
  844. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/list/cat.hpp +42 -0
  845. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/list/detail/dmc/fold_left.hpp +279 -0
  846. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/list/detail/edg/fold_left.hpp +536 -0
  847. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/list/detail/edg/fold_right.hpp +794 -0
  848. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/list/detail/fold_left.hpp +279 -0
  849. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/list/detail/fold_right.hpp +277 -0
  850. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/list/enum.hpp +41 -0
  851. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/list/filter.hpp +54 -0
  852. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/list/first_n.hpp +58 -0
  853. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/list/fold_left.hpp +303 -0
  854. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/list/fold_right.hpp +40 -0
  855. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/list/for_each.hpp +49 -0
  856. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/list/for_each_i.hpp +65 -0
  857. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/list/for_each_product.hpp +141 -0
  858. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/list/rest_n.hpp +55 -0
  859. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/list/reverse.hpp +40 -0
  860. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/list/size.hpp +58 -0
  861. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/list/to_array.hpp +155 -0
  862. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/list/to_seq.hpp +32 -0
  863. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/list/to_tuple.hpp +61 -0
  864. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/list/transform.hpp +49 -0
  865. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/list.hpp +37 -0
  866. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/logical/and.hpp +30 -0
  867. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/logical/bitand.hpp +38 -0
  868. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/logical/bitnor.hpp +38 -0
  869. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/logical/bitor.hpp +38 -0
  870. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/logical/bitxor.hpp +38 -0
  871. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/logical/bool.hpp +288 -0
  872. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/logical/compl.hpp +36 -0
  873. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/logical/nor.hpp +30 -0
  874. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/logical/not.hpp +30 -0
  875. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/logical/or.hpp +30 -0
  876. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/logical/xor.hpp +30 -0
  877. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/logical.hpp +29 -0
  878. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/max.hpp +17 -0
  879. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/min.hpp +17 -0
  880. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/punctuation/comma.hpp +21 -0
  881. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/punctuation/comma_if.hpp +31 -0
  882. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/punctuation/detail/is_begin_parens.hpp +48 -0
  883. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/punctuation/is_begin_parens.hpp +51 -0
  884. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/punctuation/paren.hpp +23 -0
  885. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/punctuation/paren_if.hpp +38 -0
  886. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/punctuation/remove_parens.hpp +39 -0
  887. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/punctuation.hpp +22 -0
  888. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/repeat.hpp +17 -0
  889. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/repeat_2nd.hpp +17 -0
  890. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/repeat_3rd.hpp +17 -0
  891. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/repeat_from_to.hpp +17 -0
  892. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/repeat_from_to_2nd.hpp +17 -0
  893. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/repeat_from_to_3rd.hpp +17 -0
  894. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/repetition/deduce_r.hpp +22 -0
  895. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/repetition/deduce_z.hpp +22 -0
  896. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/repetition/detail/dmc/for.hpp +536 -0
  897. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/repetition/detail/edg/for.hpp +534 -0
  898. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/repetition/detail/for.hpp +536 -0
  899. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/repetition/detail/msvc/for.hpp +277 -0
  900. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/repetition/enum.hpp +66 -0
  901. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/repetition/enum_binary_params.hpp +54 -0
  902. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/repetition/enum_params.hpp +41 -0
  903. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/repetition/enum_params_with_a_default.hpp +25 -0
  904. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/repetition/enum_params_with_defaults.hpp +24 -0
  905. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/repetition/enum_shifted.hpp +68 -0
  906. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/repetition/enum_shifted_binary_params.hpp +51 -0
  907. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/repetition/enum_shifted_params.hpp +44 -0
  908. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/repetition/enum_trailing.hpp +63 -0
  909. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/repetition/enum_trailing_binary_params.hpp +53 -0
  910. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/repetition/enum_trailing_params.hpp +38 -0
  911. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/repetition/for.hpp +324 -0
  912. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/repetition/repeat.hpp +825 -0
  913. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/repetition/repeat_from_to.hpp +87 -0
  914. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/repetition.hpp +32 -0
  915. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/selection/max.hpp +39 -0
  916. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/selection/min.hpp +39 -0
  917. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/selection.hpp +18 -0
  918. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/cat.hpp +49 -0
  919. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/detail/binary_transform.hpp +47 -0
  920. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/detail/is_empty.hpp +49 -0
  921. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/detail/split.hpp +284 -0
  922. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/detail/to_list_msvc.hpp +55 -0
  923. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/elem.hpp +304 -0
  924. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/enum.hpp +288 -0
  925. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/filter.hpp +54 -0
  926. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/first_n.hpp +30 -0
  927. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/fold_left.hpp +1070 -0
  928. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/fold_right.hpp +288 -0
  929. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/for_each.hpp +107 -0
  930. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/for_each_i.hpp +109 -0
  931. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/for_each_product.hpp +126 -0
  932. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/insert.hpp +28 -0
  933. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/pop_back.hpp +29 -0
  934. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/pop_front.hpp +27 -0
  935. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/push_back.hpp +19 -0
  936. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/push_front.hpp +19 -0
  937. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/remove.hpp +29 -0
  938. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/replace.hpp +45 -0
  939. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/rest_n.hpp +46 -0
  940. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/reverse.hpp +39 -0
  941. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/seq.hpp +44 -0
  942. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/size.hpp +548 -0
  943. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/subseq.hpp +28 -0
  944. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/to_array.hpp +28 -0
  945. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/to_list.hpp +41 -0
  946. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/to_tuple.hpp +27 -0
  947. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/transform.hpp +48 -0
  948. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq/variadic_seq_to_seq.hpp +28 -0
  949. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/seq.hpp +44 -0
  950. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/slot/counter.hpp +25 -0
  951. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/slot/detail/counter.hpp +269 -0
  952. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/slot/detail/def.hpp +49 -0
  953. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/slot/detail/shared.hpp +247 -0
  954. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/slot/detail/slot1.hpp +267 -0
  955. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/slot/detail/slot2.hpp +267 -0
  956. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/slot/detail/slot3.hpp +267 -0
  957. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/slot/detail/slot4.hpp +267 -0
  958. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/slot/detail/slot5.hpp +267 -0
  959. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/slot/slot.hpp +32 -0
  960. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/slot.hpp +17 -0
  961. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/stringize.hpp +33 -0
  962. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/tuple/detail/is_single_return.hpp +28 -0
  963. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/tuple/eat.hpp +115 -0
  964. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/tuple/elem.hpp +201 -0
  965. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/tuple/enum.hpp +22 -0
  966. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/tuple/insert.hpp +37 -0
  967. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/tuple/pop_back.hpp +64 -0
  968. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/tuple/pop_front.hpp +65 -0
  969. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/tuple/push_back.hpp +31 -0
  970. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/tuple/push_front.hpp +32 -0
  971. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/tuple/rem.hpp +149 -0
  972. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/tuple/remove.hpp +64 -0
  973. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/tuple/replace.hpp +37 -0
  974. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/tuple/reverse.hpp +117 -0
  975. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/tuple/size.hpp +28 -0
  976. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/tuple/to_array.hpp +39 -0
  977. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/tuple/to_list.hpp +118 -0
  978. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/tuple/to_seq.hpp +119 -0
  979. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/tuple.hpp +35 -0
  980. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/variadic/detail/is_single_return.hpp +28 -0
  981. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/variadic/elem.hpp +94 -0
  982. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/variadic/size.hpp +30 -0
  983. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/variadic/to_array.hpp +32 -0
  984. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/variadic/to_list.hpp +25 -0
  985. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/variadic/to_seq.hpp +25 -0
  986. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/variadic/to_tuple.hpp +24 -0
  987. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/variadic.hpp +23 -0
  988. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/while.hpp +17 -0
  989. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor/wstringize.hpp +29 -0
  990. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/include/boost/preprocessor.hpp +19 -0
  991. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/index.html +18 -0
  992. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/meta/libraries.json +15 -0
  993. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/Jamfile.v2 +252 -0
  994. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/arithmetic.c +12 -0
  995. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/arithmetic.cpp +12 -0
  996. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/arithmetic.cxx +82 -0
  997. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/array.c +14 -0
  998. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/array.cpp +14 -0
  999. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/array.cxx +192 -0
  1000. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/comparison.c +13 -0
  1001. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/comparison.cpp +12 -0
  1002. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/comparison.cxx +45 -0
  1003. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/config_info.cpp +93 -0
  1004. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/control.c +12 -0
  1005. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/control.cpp +12 -0
  1006. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/control.cxx +40 -0
  1007. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/debug.c +12 -0
  1008. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/debug.cpp +12 -0
  1009. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/debug.cxx +21 -0
  1010. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/facilities.c +12 -0
  1011. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/facilities.cpp +12 -0
  1012. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/facilities.cxx +55 -0
  1013. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/isempty.c +12 -0
  1014. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/isempty.cpp +12 -0
  1015. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/isempty.cxx +145 -0
  1016. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/isempty_variadic_standard_failure.c +12 -0
  1017. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/isempty_variadic_standard_failure.cpp +12 -0
  1018. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/isempty_variadic_standard_failure.cxx +25 -0
  1019. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/isempty_variadic_standard_failure2.c +12 -0
  1020. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/isempty_variadic_standard_failure2.cpp +12 -0
  1021. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/isempty_variadic_standard_failure2.cxx +25 -0
  1022. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/iteration.cpp +33 -0
  1023. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/iteration.h +62 -0
  1024. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/list.c +14 -0
  1025. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/list.cpp +14 -0
  1026. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/list.cxx +91 -0
  1027. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/logical.c +12 -0
  1028. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/logical.cpp +12 -0
  1029. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/logical.cxx +59 -0
  1030. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/punctuation.c +14 -0
  1031. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/punctuation.cpp +14 -0
  1032. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/punctuation.cxx +54 -0
  1033. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/repetition.cpp +50 -0
  1034. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/selection.c +12 -0
  1035. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/selection.cpp +12 -0
  1036. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/selection.cxx +21 -0
  1037. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/seq.c +14 -0
  1038. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/seq.cpp +14 -0
  1039. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/seq.cxx +222 -0
  1040. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/slot.c +12 -0
  1041. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/slot.cpp +12 -0
  1042. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/slot.cxx +53 -0
  1043. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/test.h +37 -0
  1044. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/tuple.c +14 -0
  1045. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/tuple.cpp +14 -0
  1046. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/tuple.cxx +266 -0
  1047. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/tuple_elem_bug_test.cxx +38 -0
  1048. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/variadic.c +12 -0
  1049. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/variadic.cpp +12 -0
  1050. data/ext/enterprise_script_service/msgpack/external/boost/preprocessor/test/variadic.cxx +56 -0
  1051. data/ext/enterprise_script_service/timer.cpp +8 -28
  1052. data/ext/enterprise_script_service/timer.hpp +3 -2
  1053. data/lib/script_core/version.rb +1 -1
  1054. data/spec/dummy/db/schema.rb +3 -3
  1055. data/tests/timer_test.cpp +13 -5
  1056. metadata +1046 -4
  1057. data/.ruby-version +0 -1
@@ -0,0 +1,2494 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html
3
+
4
+ lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
5
+ <head>
6
+ <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
7
+ <meta name="generator" content="Docutils 0.3.8: http://docutils.sourceforge.net/" />
8
+ <title>Appendix A - An Introduction to Preprocessor Metaprogramming</title>
9
+ <meta name="copyright" content="From &quot;C++ Template Metaprogramming,&quot; by David Abrahams and Aleksey Gurtovoy. Copyright (c) 2005 by Pearson Education, Inc. Reprinted with permission." />
10
+ <style type="text/css">
11
+
12
+ /*
13
+ :Author: David Goodger
14
+ :Contact: goodger@users.sourceforge.net
15
+ :date: $Date: 2004/06/23 13:31:26 $
16
+ :version: $Revision: 1.37 $
17
+ :copyright: This stylesheet has been placed in the public domain.
18
+
19
+ Default cascading style sheet for the HTML output of Docutils.
20
+ */
21
+
22
+ .first {
23
+ margin-top: 0 }
24
+
25
+ .last {
26
+ margin-bottom: 0 }
27
+
28
+ a.toc-backref {
29
+ text-decoration: none ;
30
+ color: black }
31
+
32
+ blockquote.epigraph {
33
+ margin: 2em 5em ; }
34
+
35
+ dd {
36
+ margin-bottom: 0.5em }
37
+
38
+ /* Uncomment (& remove this text!) to get bold-faced definition list terms
39
+ dt {
40
+ font-weight: bold }
41
+ */
42
+
43
+ div.abstract {
44
+ margin: 2em 5em }
45
+
46
+ div.abstract p.topic-title {
47
+ font-weight: bold ;
48
+ text-align: center }
49
+
50
+ div.attention, div.caution, div.danger, div.error, div.hint,
51
+ div.important, div.note, div.tip, div.warning, div.admonition {
52
+ margin: 2em ;
53
+ border: medium outset ;
54
+ padding: 1em }
55
+
56
+ div.attention p.admonition-title, div.caution p.admonition-title,
57
+ div.danger p.admonition-title, div.error p.admonition-title,
58
+ div.warning p.admonition-title {
59
+ color: red ;
60
+ font-weight: bold ;
61
+ font-family: sans-serif }
62
+
63
+ div.hint p.admonition-title, div.important p.admonition-title,
64
+ div.note p.admonition-title, div.tip p.admonition-title,
65
+ div.admonition p.admonition-title {
66
+ font-weight: bold ;
67
+ font-family: sans-serif }
68
+
69
+ div.dedication {
70
+ margin: 2em 5em ;
71
+ text-align: center ;
72
+ font-style: italic }
73
+
74
+ div.dedication p.topic-title {
75
+ font-weight: bold ;
76
+ font-style: normal }
77
+
78
+ div.figure {
79
+ margin-left: 2em }
80
+
81
+ div.footer, div.header {
82
+ font-size: smaller }
83
+
84
+ div.sidebar {
85
+ margin-left: 1em ;
86
+ border: medium outset ;
87
+ padding: 0em 1em ;
88
+ background-color: #ffffee ;
89
+ width: 40% ;
90
+ float: right ;
91
+ clear: right }
92
+
93
+ div.sidebar p.rubric {
94
+ font-family: sans-serif ;
95
+ font-size: medium }
96
+
97
+ div.system-messages {
98
+ margin: 5em }
99
+
100
+ div.system-messages h1 {
101
+ color: red }
102
+
103
+ div.system-message {
104
+ border: medium outset ;
105
+ padding: 1em }
106
+
107
+ div.system-message p.system-message-title {
108
+ color: red ;
109
+ font-weight: bold }
110
+
111
+ div.topic {
112
+ margin: 2em }
113
+
114
+ h1.title {
115
+ text-align: center }
116
+
117
+ h2.subtitle {
118
+ text-align: center }
119
+
120
+ hr {
121
+ width: 75% }
122
+
123
+ ol.simple, ul.simple {
124
+ margin-bottom: 1em }
125
+
126
+ ol.arabic {
127
+ list-style: decimal }
128
+
129
+ ol.loweralpha {
130
+ list-style: lower-alpha }
131
+
132
+ ol.upperalpha {
133
+ list-style: upper-alpha }
134
+
135
+ ol.lowerroman {
136
+ list-style: lower-roman }
137
+
138
+ ol.upperroman {
139
+ list-style: upper-roman }
140
+
141
+ p.attribution {
142
+ text-align: right ;
143
+ margin-left: 50% }
144
+
145
+ p.caption {
146
+ font-style: italic }
147
+
148
+ p.credits {
149
+ font-style: italic ;
150
+ font-size: smaller }
151
+
152
+ p.label {
153
+ white-space: nowrap }
154
+
155
+ p.rubric {
156
+ font-weight: bold ;
157
+ font-size: larger ;
158
+ color: maroon ;
159
+ text-align: center }
160
+
161
+ p.sidebar-title {
162
+ font-family: sans-serif ;
163
+ font-weight: bold ;
164
+ font-size: larger }
165
+
166
+ p.sidebar-subtitle {
167
+ font-family: sans-serif ;
168
+ font-weight: bold }
169
+
170
+ p.topic-title {
171
+ font-weight: bold }
172
+
173
+ pre.address {
174
+ margin-bottom: 0 ;
175
+ margin-top: 0 ;
176
+ font-family: serif ;
177
+ font-size: 100% }
178
+
179
+ pre.line-block {
180
+ font-family: serif ;
181
+ font-size: 100% }
182
+
183
+ pre.literal-block, pre.doctest-block {
184
+ margin-left: 2em ;
185
+ margin-right: 2em ;
186
+ background-color: #eeeeee }
187
+
188
+ span.classifier {
189
+ font-family: sans-serif ;
190
+ font-style: oblique }
191
+
192
+ span.classifier-delimiter {
193
+ font-family: sans-serif ;
194
+ font-weight: bold }
195
+
196
+ span.interpreted {
197
+ font-family: sans-serif }
198
+
199
+ span.option {
200
+ white-space: nowrap }
201
+
202
+ span.option-argument {
203
+ font-style: italic }
204
+
205
+ span.pre {
206
+ white-space: pre }
207
+
208
+ span.problematic {
209
+ color: red }
210
+
211
+ table {
212
+ margin-top: 0.5em ;
213
+ margin-bottom: 0.5em }
214
+
215
+ table.citation {
216
+ border-left: solid thin gray ;
217
+ padding-left: 0.5ex }
218
+
219
+ table.docinfo {
220
+ margin: 2em 4em }
221
+
222
+ table.footnote {
223
+ border-left: solid thin black ;
224
+ padding-left: 0.5ex }
225
+
226
+ dt {
227
+ font-weight: bold }
228
+
229
+ td, th {
230
+ padding-left: 0.5em ;
231
+ padding-right: 0.5em ;
232
+ vertical-align: top }
233
+
234
+ th.docinfo-name, th.field-name {
235
+ font-weight: bold ;
236
+ text-align: left ;
237
+ white-space: nowrap }
238
+
239
+ h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
240
+ font-size: 100% }
241
+
242
+ tt {
243
+ background-color: #eeeeee }
244
+
245
+ ul.auto-toc {
246
+ list-style-type: none }
247
+
248
+ </style> </head>
249
+ <body><br />
250
+ <div class="document" id="preprocessor-title">
251
+ <h1 class="title">Appendix A - An Introduction to Preprocessor
252
+ Metaprogramming</h1>
253
+ <table class="docinfo" frame="void" rules="none">
254
+ <colgroup><col class="docinfo-name" /> <col class="docinfo-content" />
255
+ </colgroup>
256
+ <tbody valign="top">
257
+ <tr>
258
+ <th class="docinfo-name">Copyright:</th>
259
+ <td>From "C++ Template Metaprogramming," by David Abrahams and
260
+ Aleksey Gurtovoy. Copyright (c) 2005 by Pearson Education, Inc.
261
+ Reprinted with permission.</td>
262
+ </tr>
263
+ <tr class="field">
264
+ <th class="docinfo-name">ISBN:</th>
265
+ <td class="field-body">0321227255</td>
266
+ </tr>
267
+ </tbody>
268
+ </table>
269
+ <div class="section" id="motivation">
270
+ <h1><a name="motivation">A.1   Motivation</a></h1>
271
+ <p>Even with the full power of template metaprogramming and the <a class="reference"
272
+
273
+ href="http://www.boost.org/libs/mpl">Boost Metaprogramming library</a>
274
+ at our disposal, some C++ coding jobs still require a great deal of
275
+ boilerplate code repetition. We saw one example in Chapter 5, when we
276
+ implemented <tt class="docutils literal"><span class="pre">tiny_size</span></tt>:</p>
277
+ <pre class="literal-block">template &lt;class T0, class T1, class T2&gt;
278
+ struct tiny_size
279
+ : mpl::int_&lt;3&gt; {};
280
+ </pre>
281
+ <!-- : rst-mode hack -->
282
+ <!-- @prefix.append('struct none {};') -->
283
+ <p>Aside from the repeated pattern in the parameter list of the primary
284
+ template above, there are three partial specializations below, which
285
+ also follow a predictable pattern:</p>
286
+ <pre class="literal-block">template &lt;class T0, class T1&gt;
287
+ struct tiny_size&lt;T0,T1,none&gt;
288
+ : mpl::int_&lt;2&gt; {};
289
+
290
+ template &lt;class T0&gt;
291
+ struct tiny_size&lt;T0,none,none&gt;
292
+ : mpl::int_&lt;1&gt; {};
293
+
294
+ template &lt;&gt;
295
+ struct tiny_size&lt;none,none,none&gt;
296
+ : mpl::int_&lt;0&gt; {};
297
+ </pre>
298
+ <!-- : rst-mode hack -->
299
+ <!-- @compile('all') -->
300
+ <p>In this case there is only a small amount of code with such a
301
+ "mechanical" flavor, but had we been implementing <tt class="docutils literal"><span
302
+
303
+ class="pre">large</span></tt> instead of <tt class="docutils literal"><span
304
+
305
+ class="pre">tiny</span></tt>, there might easily have been a great
306
+ deal more. When the number of instances of a pattern grows beyond two
307
+ or three, writing them by hand tends to become error-prone. Perhaps
308
+ more importantly, the code gets hard to read, because the important
309
+ abstraction in the code is really the pattern, not the individual
310
+ instances.</p>
311
+ <div class="section" id="code-generation">
312
+ <h2><a name="code-generation">A.1.1   Code Generation</a></h2>
313
+ <p>Rather than being written out by hand, mechanical-looking code
314
+ should really be generated mechanically. Having written a program to
315
+ spit out instances of the code pattern, a library author has two
316
+ choices: She can either ship pre-generated source code files, or she
317
+ can ship the generator itself. Either approach has drawbacks. If
318
+ clients only get the generated source, they are stuck with whatever
319
+ the library author generated—and experience shows that if they are
320
+ happy with three instances of a pattern today, someone will need
321
+ four tomorrow. If clients get the generator program, on the other
322
+ hand, they also need the resources to execute it (e.g.,
323
+ interpreters), and they must integrate the generator into their
324
+ build processes...</p>
325
+ </div>
326
+ <div class="section" id="enter-the-preprocessor">
327
+ <h2><a name="enter-the-preprocessor">A.1.2   Enter the Preprocessor</a></h2>
328
+ <p>...unless the generator is a preprocessor metaprogram. Though not
329
+ designed for that purpose, the C and C++ preprocessors can be made
330
+ to execute sophisticated programs during the preprocessing phase of
331
+ compilation. Users can control the code generation process with
332
+ preprocessor <tt class="docutils literal"><span class="pre">#define</span></tt>s
333
+ in code or <tt class="docutils literal"><span class="pre">-D</span></tt>
334
+ options on the compiler's command line, making build integration
335
+ trivial. For example, we might parameterize the primary <tt class="docutils literal"><span
336
+
337
+ class="pre">tiny_size</span></tt> template above as follows:</p>
338
+ <pre class="literal-block">#include &lt;<strong>boost/preprocessor/repetition/enum_params</strong>.hpp&gt;
339
+
340
+ #ifndef TINY_MAX_SIZE
341
+ # define TINY_MAX_SIZE 3 // default maximum size is 3
342
+ #endif
343
+
344
+ template &lt;<strong>BOOST_PP_ENUM_PARAMS(TINY_MAX_SIZE, class T)</strong>&gt;
345
+ struct tiny_size
346
+ : mpl::int_&lt;TINY_MAX_SIZE&gt;
347
+ {};
348
+ </pre>
349
+ <!-- : rst-mode hack -->
350
+ <!-- @compile(pop = None) -->
351
+ <p>To test the metaprogram, run your compiler in its "preprocessing"
352
+ mode (usually the <tt class="docutils literal"><span class="pre">-E</span></tt>
353
+ option), with the Boost root directory in your <tt class="docutils literal"><span
354
+
355
+ class="pre">#include</span></tt> path. For instance:<a class="footnote-reference"
356
+
357
+ href="#minusp" id="id2" name="id2">[1]</a></p>
358
+ <pre class="literal-block">g++ -P -E -Ipath/to/boost_1_32_0 -I. test.cpp
359
+ </pre>
360
+ <!-- @ignore() -->
361
+ <table class="docutils footnote" frame="void" id="minusp" rules="none">
362
+ <colgroup><col class="label" /><col /></colgroup>
363
+ <tbody valign="top">
364
+ <tr>
365
+ <td class="label"><a class="fn-backref" href="#id2" name="minusp">[1]</a></td>
366
+ <td>GCC's <tt class="docutils literal"><span class="pre">-P</span></tt>
367
+ option inhibits the generation of source file and line number
368
+ markers in preprocessed output.</td>
369
+ </tr>
370
+ </tbody>
371
+ </table>
372
+ <p>Given the appropriate metaprograms, users would be able to adjust
373
+ not only the number of parameters to <tt class="docutils literal"><span
374
+
375
+ class="pre">tiny_size</span></tt>, but the maximum size of the
376
+ entire <tt class="docutils literal"><span class="pre">tiny</span></tt>
377
+ implementation just by <tt class="docutils literal"><span class="pre">#define</span></tt>-ing
378
+ <tt class="docutils literal"><span class="pre">TINY_MAX_SIZE</span></tt>.</p>
379
+ <p>The Boost Preprocessor library <a class="citation-reference" href="#mk04"
380
+
381
+ id="id3" name="id3">[MK04]</a> plays a role in preprocessor
382
+ metaprogramming similar to the one played by the MPL in template
383
+ metaprogramming: It supplies a framework of high-level components
384
+ (like <tt class="docutils literal"><span class="pre">BOOST_PP_ENUM_PARAMS</span></tt>)
385
+ that make otherwise-painful metaprogramming jobs approachable. In
386
+ this appendix we won't attempt to cover nitty-gritty details of how
387
+ the preprocessor works, nor principles of preprocessor
388
+ metaprogramming in general, nor even many details of how the
389
+ Preprocessor <em>library</em> works. We <em>will</em> show you
390
+ enough at a high level that you'll be able to use the library
391
+ productively and learn the rest on your own.</p>
392
+ <table class="docutils citation" frame="void" id="mk04" rules="none">
393
+ <colgroup><col class="label" /><col /></colgroup>
394
+ <tbody valign="top">
395
+ <tr>
396
+ <td class="label"><a class="fn-backref" href="#id3" name="mk04">[MK04]</a></td>
397
+ <td>Paul Mensonides and Vesa Karvonen. "The Boost Preprocessor
398
+ Library." <a class="reference" href="http://www.boost.org/libs/preprocessor">http://www.boost.org/libs/preprocessor</a>.</td>
399
+ </tr>
400
+ </tbody>
401
+ </table>
402
+ </div>
403
+ </div>
404
+ <div class="section" id="fundamental-abstractions-of-the-preprocessor">
405
+ <h1><a name="fundamental-abstractions-of-the-preprocessor">A.2   Fundamental
406
+ Abstractions of the Preprocessor</a></h1>
407
+ <p>We began our discussion of template metaprogramming in Chapter 2 by
408
+ describing its metadata (potential template arguments) and
409
+ metafunctions (class templates). On the basis of those two fundamental
410
+ abstractions, we built up the entire picture of compile-time
411
+ computation covered in the rest of this book. In this section we'll
412
+ lay a similar foundation for the preprocessor metaprogrammer. Some of
413
+ what we cover here may be a review for you, but it's important to
414
+ identify the basic concepts going into detail.</p>
415
+ <div class="section" id="preprocessing-tokens">
416
+ <h2><a name="preprocessing-tokens">A.2.1   Preprocessing Tokens</a></h2>
417
+ <p>The fundamental unit of data in the preprocessor is the <strong>preprocessing
418
+ token</strong>. Preprocessing tokens correspond roughly to the
419
+ tokens you're used to working with in C++, such as identifiers,
420
+ operator symbols, and literals. Technically, there are some
421
+ differences between <em>preprocessing tokens</em> and regular <em>tokens</em>
422
+ (see section 2 of the C++ standard for details), but they can be
423
+ ignored for the purposes of this discussion. In fact, we'll be using
424
+ the terms interchangeably here.</p>
425
+ </div>
426
+ <div class="section" id="macros">
427
+ <h2><a name="macros">A.2.2   Macros</a></h2>
428
+ <p>Preprocessor macros come in two flavors. <strong>Object-like
429
+ macros</strong> can be defined this way:</p>
430
+ <blockquote>
431
+ <div class="line-block">
432
+ <div class="line"><tt class="docutils literal"><span class="pre">#define</span></tt>
433
+ <em>identifier</em> <em>replacement-list</em></div>
434
+ </div>
435
+ </blockquote>
436
+ <!-- @litre_translator.line_offset -= 7 -->
437
+ <p>where the <em>identifier</em> names the macro being defined, and <em>replacement-list</em>
438
+ is a sequence of zero or more tokens. Where the <em>identifier</em>
439
+ appears in subsequent program text, it is <strong>expanded</strong>
440
+ by the preprocessor into its <em>replacement-list</em>.</p>
441
+ <p><strong>Function-like macros</strong>, which act as the
442
+ "metafunctions of the preprocessing phase," are defined as follows:</p>
443
+ <blockquote>
444
+ <div class="line-block">
445
+ <div class="line"><tt class="docutils literal"><span class="pre">#define</span></tt>
446
+ <em>identifier</em>(<em>a</em><sub>1</sub>, <em>a</em><sub>2</sub>,
447
+ ... <em>a</em><sub>n</sub>) <em>replacement-list</em></div>
448
+ </div>
449
+ </blockquote>
450
+ <!-- @litre_translator.line_offset -= 7 -->
451
+ <p>where each <em>a</em><sub>i</sub> is an identifier naming a <strong>macro
452
+ parameter</strong>. When the macro name appears in subsequent
453
+ program text followed by a suitable argument list, it is expanded
454
+ into its <em>replacement-list</em>, except that each argument is
455
+ substituted for the corresponding parameter where it appears in the
456
+ <em>replacement-list</em>.<a class="footnote-reference" href="#expansion"
457
+
458
+ id="id4" name="id4">[2]</a></p>
459
+ <table class="docutils footnote" frame="void" id="expansion" rules="none">
460
+ <colgroup><col class="label" /><col /></colgroup>
461
+ <tbody valign="top">
462
+ <tr>
463
+ <td class="label"><a class="fn-backref" href="#id4" name="expansion">[2]</a></td>
464
+ <td>We have omitted many details of how macro expansion works.
465
+ We encourage you to take a few minutes to study section 16.3
466
+ of the C++ standard, which describes that process in
467
+ straightforward terms.</td>
468
+ </tr>
469
+ </tbody>
470
+ </table>
471
+ </div>
472
+ <div class="section" id="macro-arguments">
473
+ <h2><a name="macro-arguments">A.2.3   Macro Arguments</a></h2>
474
+ <div class="admonition-definition admonition">
475
+ <p class="first admonition-title">Definition</p>
476
+ <p>A <strong>macro argument</strong> is a nonempty sequence of:</p>
477
+ <ul class="last simple">
478
+ <li>Preprocessing tokens other than commas or parentheses, <em>and/or</em></li>
479
+ <li>Preprocessing tokens surrounded by matched pairs of
480
+ parentheses.</li>
481
+ </ul>
482
+ </div>
483
+ <p>This definition has consequences for preprocessor metaprogramming
484
+ that must not be underestimated. Note, first of all, that the
485
+ following tokens have special status:</p>
486
+ <blockquote>
487
+ <pre class="literal-block">, ( )
488
+ </pre> </blockquote>
489
+ <!-- @ignore() -->
490
+ <p>As a result, a macro argument can never contain an unmatched
491
+ parenthesis, or a comma that is not surrounded by matched
492
+ parentheses. For example, both lines following the definition of FOO
493
+ below are ill-formed:</p>
494
+ <pre class="literal-block">#define FOO(X) X // Unary identity macro
495
+ FOO(,) // un-parenthesized comma or two empty arguments
496
+ FOO()) // unmatched parenthesis or missing argument
497
+ </pre>
498
+ <!-- @def pp_failure(options = ['-E'], **kw):
499
+ compile( expect_error = not 'mwcc' in config.compiler , options = options, **kw)pp_failure() -->
500
+ <p>Note also that the following tokens do <em>not</em> have special
501
+ status; the preprocessor knows nothing about matched pairs of
502
+ braces, brackets, or angle brackets:</p>
503
+ <blockquote>
504
+ <pre class="literal-block">{ } [ ] &lt; &gt;
505
+ </pre> </blockquote>
506
+ <!-- @ignore() -->
507
+ <p>As a result, these lines are also ill-formed:</p>
508
+ <pre class="literal-block">FOO(std::pair&lt;int<strong>,</strong> long&gt;) // two arguments
509
+ FOO({ int x = 1<strong>,</strong> y = 2; return x+y; }) // two arguments
510
+ </pre>
511
+ <!-- @example.prepend('#define FOO(X) X')
512
+ pp_failure() -->
513
+ <p>It <em>is</em> possible to pass either string of tokens above as
514
+ part of a single macro argument, provided it is parenthesized:</p>
515
+ <pre class="literal-block">FOO(<strong>(</strong>std::pair&lt;int,int&gt;<strong>)</strong>) // one argument
516
+ FOO(<strong>(</strong>{ int x = 1, y = 2; return x+y; }<strong>)</strong>) // one argument
517
+ </pre>
518
+ <!-- @example.prepend('#define FOO(X) X')
519
+ compile(options = ['-E']) -->
520
+ <p>However, because of the special status of commas, it is impossible
521
+ to strip parentheses from a macro argument without knowing the
522
+ number of comma-separated token sequences it contains.<a class="footnote-reference"
523
+
524
+ href="#c99" id="id5" name="id5">[3]</a> If you are writing a macro
525
+ that needs to be able to accept an argument containing a variable
526
+ number of commas, your users will either have to parenthesize that
527
+ argument <em>and</em> pass you the number of comma-separated token
528
+ sequences as an additional argument, or they will have to encode the
529
+ same information in one of the preprocessor data structures covered
530
+ later in this appendix.</p>
531
+ <table class="docutils footnote" frame="void" id="c99" rules="none">
532
+ <colgroup><col class="label" /><col /></colgroup>
533
+ <tbody valign="top">
534
+ <tr>
535
+ <td class="label"><a name="c99">[3]</a></td>
536
+ <td><em>(<a class="fn-backref" href="#id5">1</a>, <a class="fn-backref"
537
+
538
+ href="#id12">2</a>)</em> The C99 preprocessor, by virtue
539
+ of its variadic macros, can do that and more. The C++
540
+ standardization committee is likely to adopt C99's
541
+ preprocessor extensions for the next version of the C++
542
+ standard.</td>
543
+ </tr>
544
+ </tbody>
545
+ </table>
546
+ </div>
547
+ </div>
548
+ <div class="section" id="preprocessor-library-structure">
549
+ <h1><a name="preprocessor-library-structure">A.3   Preprocessor Library
550
+ Structure</a></h1>
551
+ <p>Since in-depth coverage of the Boost Preprocessor library is beyond
552
+ the scope of this book, we'll try to give you the <em>tools</em> to
553
+ gain an in-depth understanding of the library here. To do that, you'll
554
+ need to use the electronic Preprocessor library documentation, which
555
+ begins with the index.html file in the <tt class="docutils literal"><span
556
+
557
+ class="pre">libs/preprocessor/</span></tt> subdirectory of your
558
+ Boost installation.</p>
559
+ <p>On the left of your browser window you'll see an index, and if you
560
+ follow the "Headers" link, it will reveal the structure of the <tt class="docutils literal"><span
561
+
562
+ class="pre">boost/preprocessor/</span></tt> directory. Most of the
563
+ library's headers are grouped into subdirectories according to related
564
+ functionality. The top-level directory contains only a few headers
565
+ that provide general-purpose macros, along with a header for each
566
+ subdirectory that simply <tt class="docutils literal"><span class="pre">#include</span></tt>s
567
+ all the headers in that subdirectory. For example, <tt class="docutils literal"><span
568
+
569
+ class="pre">boost/preprocessor/selection.hpp</span></tt> does
570
+ nothing more than to <tt class="docutils literal"><span class="pre">#include</span></tt>
571
+ the <tt class="docutils literal"><span class="pre">min.hpp</span></tt>
572
+ and <tt class="docutils literal"><span class="pre">max.hpp</span></tt>
573
+ headers that comprise the contents of <tt class="docutils literal"><span
574
+
575
+ class="pre">boost/preprocessor/selection/</span></tt>. The headers
576
+ whose names <em>don't</em> correspond to subdirectories generally
577
+ declare a macro whose name is the same as the name of the header,
578
+ without the extension, and with a <tt class="docutils literal"><span
579
+
580
+ class="pre">BOOST_PP_</span></tt> prefix. For example, <tt class="docutils literal"><span
581
+
582
+ class="pre">boost/preprocessor/selection/max.hpp</span></tt>
583
+ declares <tt class="docutils literal"><span class="pre">BOOST_PP_MAX</span></tt>.</p>
584
+ <p>You'll also notice that often a header will declare an additional
585
+ macro with a <tt class="docutils literal"><span class="pre">_D</span></tt>,
586
+ <tt class="docutils literal"><span class="pre">_R</span></tt>, or <tt
587
+
588
+ class="docutils literal"><span class="pre">_Z</span></tt> suffix.<a
589
+
590
+ class="footnote-reference" href="#suffix" id="id6" name="id6">[4]</a>
591
+ For instance, <tt class="docutils literal"><span class="pre">boost/preprocessor/selection/max.hpp</span></tt>
592
+ also declares <tt class="docutils literal"><span class="pre">BOOST_PP_MAX_D</span></tt>.
593
+ For the purposes of this appendix, you should ignore those macros.
594
+ Eventually you will want to understand how they can be used to
595
+ optimize preprocessing speed; consult the Topics section of the
596
+ library documentation under the subheading "reentrancy" for that
597
+ information.</p>
598
+ <table class="docutils footnote" frame="void" id="suffix" rules="none">
599
+ <colgroup><col class="label" /><col /></colgroup>
600
+ <tbody valign="top">
601
+ <tr>
602
+ <td class="label"><a class="fn-backref" href="#id6" name="suffix">[4]</a></td>
603
+ <td>Macros with <tt class="docutils literal"><span class="pre">_1ST</span></tt>,
604
+ <tt class="docutils literal"><span class="pre">_2ND</span></tt>,
605
+ or <tt class="docutils literal"><span class="pre">_3RD</span></tt>
606
+ suffixes, if they appear, should be ignored for a different
607
+ reason: They are deprecated and will be removed from the library
608
+ soon.</td>
609
+ </tr>
610
+ </tbody>
611
+ </table>
612
+ </div>
613
+ <div class="section" id="preprocessor-library-abstractions">
614
+ <h1><a name="preprocessor-library-abstractions">A.4   Preprocessor
615
+ Library Abstractions</a></h1>
616
+ <p>In this section we'll discuss the basic abstractions of the
617
+ Preprocessor library, and give some simple examples of each.</p>
618
+ <div class="section" id="repetition">
619
+ <h2><a name="repetition">A.4.1   Repetition</a></h2>
620
+ <p>The repeated generation of <tt class="docutils literal"><span class="pre">class</span>
621
+ <span class="pre">T0</span></tt>, <tt class="docutils literal"><span
622
+
623
+ class="pre">class</span> <span class="pre">T1</span></tt>... <tt
624
+
625
+ class="docutils literal"><span class="pre">class</span> <span class="pre">T</span></tt><em>n</em>
626
+ that we achieved using <tt class="docutils literal"><span class="pre">BOOST_PP_ENUM_PARAMS</span></tt>
627
+ was a specific case of the general concept of <strong>horizontal
628
+ repetition</strong>. The library also has a concept of vertical
629
+ repetition, which we'll get to in a moment. Horizontal repetition
630
+ macros are all found in the library's <tt class="docutils literal"><span
631
+
632
+ class="pre">repetition/</span></tt> subdirectory.</p>
633
+ <div class="section" id="horizontal-repetition">
634
+ <h3><a name="horizontal-repetition">A.4.1.1   Horizontal Repetition</a></h3>
635
+ <p>To generate the <tt class="docutils literal"><span class="pre">tiny_size</span></tt>
636
+ specializations using horizontal repetition, we might write the
637
+ following:</p>
638
+ <pre class="literal-block">#include &lt;boost/preprocessor/repetition.hpp&gt;
639
+ #include &lt;boost/preprocessor/arithmetic/sub.hpp&gt;
640
+ #include &lt;boost/preprocessor/punctuation/comma_if.hpp&gt;
641
+
642
+ #define TINY_print(z, n, data) data
643
+
644
+ #define TINY_size(z, n, unused) \
645
+ template &lt;BOOST_PP_ENUM_PARAMS(n, class T)&gt; \
646
+ struct tiny_size&lt; \
647
+ BOOST_PP_ENUM_PARAMS(n,T) \
648
+ BOOST_PP_COMMA_IF(n) \
649
+ BOOST_PP_ENUM( \
650
+ BOOST_PP_SUB(TINY_MAX_SIZE,n), TINY_print, none) \
651
+ &gt; \
652
+ : mpl::int_&lt;n&gt; {};
653
+
654
+ BOOST_PP_REPEAT(TINY_MAX_SIZE, TINY_size, ~)
655
+
656
+ #undef TINY_size
657
+ #undef TINY_print
658
+ </pre>
659
+ <!-- @import re
660
+ compile('all', pop = None)example.sub('BOOST_PP_REPEAT.*', '', flags = re.DOTALL) -->
661
+ <p>The code generation process is kicked off by calling <tt class="docutils literal"><span
662
+
663
+ class="pre">BOOST_PP_REPEAT</span></tt>, a <strong>higher-order
664
+ macro</strong> that repeatedly invokes the macro named by its
665
+ second argument (<tt class="docutils literal"><span class="pre">TINY_size</span></tt>).
666
+ The first argument specifies the number of repeated invocations,
667
+ and the third one can be any data; it is passed on unchanged to
668
+ the macro being invoked. In this case, <tt class="docutils literal"><span
669
+
670
+ class="pre">TINY_size</span></tt> doesn't use that data, so
671
+ the choice to pass <tt class="docutils literal"><span class="pre">~</span></tt>
672
+ was arbitrary.<a class="footnote-reference" href="#markers" id="id7"
673
+
674
+ name="id7">[5]</a></p>
675
+ <table class="docutils footnote" frame="void" id="markers" rules="none">
676
+ <colgroup><col class="label" /><col /></colgroup>
677
+ <tbody valign="top">
678
+ <tr>
679
+ <td class="label"><a class="fn-backref" href="#id7" name="markers">[5]</a></td>
680
+ <td><tt class="docutils literal"><span class="pre">~</span></tt>
681
+ is not an <em>entirely</em> arbitrary choice. Both <tt class="docutils literal"><span
682
+
683
+ class="pre">@</span></tt> and <tt class="docutils literal"><span
684
+
685
+ class="pre">$</span></tt> might have been good choices,
686
+ except that they are technically not part of the basic
687
+ character set that C++ implementations are required to
688
+ support. An identifier like <tt class="docutils literal"><span
689
+
690
+ class="pre">ignored</span></tt> might be subject to
691
+ macro expansion, leading to unexpected results.</td>
692
+ </tr>
693
+ </tbody>
694
+ </table>
695
+ <p>Each time the <tt class="docutils literal"><span class="pre">TINY_size</span></tt>
696
+ macro is invoked by <tt class="docutils literal"><span class="pre">BOOST_PP_REPEAT</span></tt>,
697
+ it generates a different specialization of <tt class="docutils literal"><span
698
+
699
+ class="pre">tiny_size</span></tt>. The macro accepts three
700
+ parameters.</p>
701
+ <ul class="simple">
702
+ <li><tt class="docutils literal"><span class="pre">z</span></tt>
703
+ is related to the <tt class="docutils literal"><span class="pre">_Z</span></tt>
704
+ macro suffix we mentioned earlier. You'll never need to use it
705
+ except for optimization purposes, and can safely ignore it for
706
+ now.</li>
707
+ <li><tt class="docutils literal"><span class="pre">n</span></tt>
708
+ is the repetition index. In repeated invocations of <tt class="docutils literal"><span
709
+
710
+ class="pre">TINY_size</span></tt>, <tt class="docutils literal"><span
711
+
712
+ class="pre">n</span></tt> will be <tt class="docutils literal"><span
713
+
714
+ class="pre">0</span></tt>, then <tt class="docutils literal"><span
715
+
716
+ class="pre">1</span></tt>, then <tt class="docutils literal"><span
717
+
718
+ class="pre">2</span></tt>, and so on.</li>
719
+ <li><tt class="docutils literal"><span class="pre">unused</span></tt>,
720
+ in this case, will be <tt class="docutils literal"><span class="pre">~</span></tt>
721
+ on each repetition. In general, the final argument to a macro
722
+ invoked by <tt class="docutils literal"><span class="pre">BOOST_PP_REPEAT</span></tt>
723
+ is always the same as its invoker's final argument.</li>
724
+ </ul>
725
+ <p>Because its <em>replacement-list</em> covers several lines, all
726
+ but the last line of <tt class="docutils literal"><span class="pre">TINY_size</span></tt>
727
+ is continued with a trailing backslash. The first few of those
728
+ lines just invoke <tt class="docutils literal"><span class="pre">BOOST_PP_ENUM_PARAMS</span></tt>
729
+ (which we already used in the primary template) to generate
730
+ comma-separated lists, so each invocation of <tt class="docutils literal"><span
731
+
732
+ class="pre">TINY_size</span></tt> produces something
733
+ equivalent to:<a class="footnote-reference" href="#cont" id="id8"
734
+
735
+ name="id8">[6]</a></p>
736
+ <pre class="literal-block">template &lt;<strong>class T0, class T1, ... class T</strong><em>n-1</em>&gt;
737
+ struct tiny_size&lt;
738
+ <strong>T0, T1, ... T</strong><em>n-1</em>
739
+ <em>...more...</em>
740
+ &gt;
741
+ : mpl::int_&lt;n&gt; {};
742
+ </pre>
743
+ <table class="docutils footnote" frame="void" id="cont" rules="none">
744
+ <colgroup><col class="label" /><col /></colgroup>
745
+ <tbody valign="top">
746
+ <tr>
747
+ <td class="label"><a class="fn-backref" href="#id8" name="cont">[6]</a></td>
748
+ <td>Note that the line continuation characters <em>and</em>
749
+ the newlines following them are removed by the preprocessor,
750
+ so the resulting code actually appears on a single line in
751
+ the preprocessed output.</td>
752
+ </tr>
753
+ </tbody>
754
+ </table>
755
+ <!-- @ignore() -->
756
+ <p><tt class="docutils literal"><span class="pre">BOOST_PP_COMMA_IF</span></tt>
757
+ generates a comma if its numeric argument is not <tt class="docutils literal"><span
758
+
759
+ class="pre">0</span></tt>. When <tt class="docutils literal"><span
760
+
761
+ class="pre">n</span></tt> is <tt class="docutils literal"><span
762
+
763
+ class="pre">0</span></tt>, the list generated by the preceding
764
+ line will be empty, and a leading comma directly following the <tt
765
+
766
+ class="docutils literal"><span class="pre">&lt;</span></tt>
767
+ character would be ill-formed.</p>
768
+ <p>The next line uses <tt class="docutils literal"><span class="pre">BOOST_PP_ENUM</span></tt>
769
+ to generate <tt class="docutils literal"><span class="pre">TINY_MAX_SIZE-n</span></tt>
770
+ comma-separated copies of <tt class="docutils literal"><span class="pre">none</span></tt>.
771
+ <tt class="docutils literal"><span class="pre">BOOST_PP_ENUM</span></tt>
772
+ is just like <tt class="docutils literal"><span class="pre">BOOST_PP_REPEAT</span></tt>
773
+ except that it generates commas between repetitions, so its second
774
+ argument (<tt class="docutils literal"><span class="pre">TINY_print</span></tt>,
775
+ here) must have the same signature as <tt class="docutils literal"><span
776
+
777
+ class="pre">TINY_size</span></tt>. In this case, <tt class="docutils literal"><span
778
+
779
+ class="pre">TINY_print</span></tt> ignores its repetition
780
+ index <tt class="docutils literal"><span class="pre">n</span></tt>,
781
+ and simply yields its third argument, <tt class="docutils literal"><span
782
+
783
+ class="pre">none</span></tt>.</p>
784
+ <p><tt class="docutils literal"><span class="pre">BOOST_PP_SUB</span></tt>
785
+ implements token subtraction. It's crucial to understand that
786
+ although the preprocessor <em>itself</em> can evaluate ordinary
787
+ arithmetic expressions:</p>
788
+ <pre class="literal-block">#define X 3
789
+ ...
790
+ #if <strong>X - 1 &gt; 0</strong> // OK
791
+ <em>whatever</em>
792
+ #endif
793
+ </pre>
794
+ <!-- @compile() -->
795
+ <!-- @litre_translator.line_offset -= 7 -->
796
+ <p>preprocessor <em>metaprograms</em> can only operate on tokens.
797
+ Normally, when a macro in the Preprocessor library expects a
798
+ numeric argument, it must be passed as a single token. If we had
799
+ written <tt class="docutils literal"><span class="pre">TINY_MAX_SIZE-n</span></tt>
800
+ instead of <tt class="docutils literal"><span class="pre">BOOST_PP_SUB(TINY_MAX_SIZE,n)</span></tt>
801
+ above, the first argument to <tt class="docutils literal"><span class="pre">BOOST_PP_ENUM</span></tt>
802
+ would have contained three tokens at each invocation: first <tt class="docutils literal"><span
803
+
804
+ class="pre">3-0</span></tt>, then <tt class="docutils literal"><span
805
+
806
+ class="pre">3-1</span></tt>, and finally <tt class="docutils literal"><span
807
+
808
+ class="pre">3-2</span></tt>. <tt class="docutils literal"><span
809
+
810
+ class="pre">BOOST_PP_SUB</span></tt>, though, generates
811
+ single-token results: first <tt class="docutils literal"><span class="pre">3</span></tt>,
812
+ then <tt class="docutils literal"><span class="pre">2</span></tt>,
813
+ and finally <tt class="docutils literal"><span class="pre">1</span></tt>,
814
+ in successive repetitions.</p>
815
+ <div class="sidebar">
816
+ <p class="first sidebar-title">Naming Conventions</p>
817
+ <p class="last">Note that <tt class="docutils literal"><span class="pre">TINY_print</span></tt>
818
+ and <tt class="docutils literal"><span class="pre">TINY_size</span></tt>
819
+ are <tt class="docutils literal"><span class="pre">#undef</span></tt>'d
820
+ immediately
821
+ after they're used, with no intervening <tt class="docutils literal"><span
822
+
823
+ class="pre">#include</span></tt>s. They can therefore be
824
+ thought of as "local" macro definitions. Because the
825
+ preprocessor doesn't respect scope boundaries, it's important to
826
+ choose names carefully to prevent clashes. We recommend <tt class="docutils literal"><span
827
+
828
+ class="pre">PREFIXED_lower_case</span></tt> names for local
829
+ macros and <tt class="docutils literal"><span class="pre">PREFIXED_UPPER_CASE</span></tt>
830
+ names for global ones. The only exceptions are one-letter
831
+ lowercase names, which are safe to use for local macros: No
832
+ other header is likely to <tt class="docutils literal"><span class="pre">#define</span></tt>
833
+ a global single-letter lowercase macro—that would be <em>very</em>
834
+ bad manners.</p>
835
+ </div>
836
+ </div>
837
+ <div class="section" id="vertical-repetition">
838
+ <h3><a name="vertical-repetition">A.4.1.2   Vertical Repetition</a></h3>
839
+ <p>If you send the previous example through your preprocessor,
840
+ you'll see one long line containing something like this:</p>
841
+ <pre class="literal-block">template &lt;&gt; struct tiny_size&lt; none , none , none &gt; : mpl::int_&lt;0&gt;
842
+ {}; template &lt; class T0&gt; struct tiny_size&lt; T0 , none , none &gt; :
843
+ mpl::int_&lt;1&gt; {}; template &lt; class T0 , class T1&gt; struct tiny_size
844
+ &lt; T0 , T1 , none &gt; : mpl::int_&lt;2&gt; {};
845
+ </pre>
846
+ <!-- @compile('all', pop = 1) -->
847
+ <p>The distinguishing feature of horizontal repetition is that all
848
+ instances of the repeated pattern are generated on the same line
849
+ of preprocessed output. For some jobs, like generating the primary
850
+ <tt class="docutils literal"><span class="pre">tiny_size</span></tt>
851
+ template, that's perfectly appropriate. In this case, however,
852
+ there are at least two disadvantages.</p>
853
+ <ol class="arabic simple">
854
+ <li>It's hard to verify that our metaprogram is doing the right
855
+ thing without reformatting the resulting code by hand.</li>
856
+ <li>The efficiency of nested horizontal repetitions varies widely
857
+ across preprocessors. Each specialization generated by means of
858
+ horizontal repetition contains three other horizontal
859
+ repetitions: two invocations of <tt class="docutils literal"><span
860
+
861
+ class="pre">BOOST_PP_ENUM_PARAMS</span></tt> and one
862
+ invocation of <tt class="docutils literal"><span class="pre">BOOST_PP_ENUM</span></tt>.
863
+ When <tt class="docutils literal"><span class="pre">TINY_MAX_SIZE</span></tt>
864
+ is <tt class="docutils literal"><span class="pre">3</span></tt>,
865
+ you'll probably never care, but on at least one preprocessor
866
+ still in use today, compilation begins to slow noticeably when <tt
867
+
868
+ class="docutils literal"><span class="pre">TINY_MAX_SIZE</span></tt>
869
+ reaches <tt class="docutils literal"><span class="pre">8</span></tt>.<a
870
+
871
+ class="footnote-reference" href="#nest" id="id9" name="id9">[7]</a></li>
872
+ </ol>
873
+ <blockquote>
874
+ <table class="docutils footnote" frame="void" id="nest" rules="none">
875
+ <colgroup><col class="label" /><col /></colgroup>
876
+ <tbody valign="top">
877
+ <tr>
878
+ <td class="label"><a class="fn-backref" href="#id9" name="nest">[7]</a></td>
879
+ <td>That said, other preprocessors can handle 256 * 256
880
+ nested repetitions without any speed problems whatsoever.</td>
881
+ </tr>
882
+ </tbody>
883
+ </table>
884
+ </blockquote>
885
+ <p>The solution to these problems, naturally, is <strong>vertical
886
+ repetition</strong>, which generates instances of a pattern
887
+ across multiple lines. The Preprocessor library provides two means
888
+ of vertical repetition: <strong>local iteration</strong> and <strong>file
889
+ iteration</strong>.</p>
890
+ <div class="section" id="local-iteration">
891
+ <h4><a name="local-iteration">Local Iteration</a></h4>
892
+ <p>The most expedient way to demonstrate local iteration in our
893
+ example is to replace the invocation of <tt class="docutils literal"><span
894
+
895
+ class="pre">BOOST_PP_REPEAT</span></tt> with the following:</p>
896
+ <pre class="literal-block">#include &lt;boost/preprocessor/<strong>iteration/local.hpp</strong>&gt;
897
+
898
+ #define BOOST_PP_LOCAL_MACRO(n) TINY_size(~, n, ~)
899
+ #define BOOST_PP_LOCAL_LIMITS (0, <strong>TINY_MAX_SIZE - 1</strong>)
900
+ <strong>#include</strong> BOOST_PP_LOCAL_ITERATE()
901
+ </pre>
902
+ <!-- @compile('all', pop = 1) -->
903
+ <p>Local iteration repeatedly invokes the user-defined macro with
904
+ the special name <tt class="docutils literal"><span class="pre">BOOST_PP_LOCAL_MACRO</span></tt>,
905
+ whose argument will be an iteration index. Since we already had
906
+ <tt class="docutils literal"><span class="pre">TINY_size</span></tt>
907
+ lying around, we've just defined <tt class="docutils literal"><span
908
+
909
+ class="pre">BOOST_PP_LOCAL_MACRO</span></tt> to invoke it.
910
+ The range of iteration indices are given by another user-defined
911
+ macro, <tt class="docutils literal"><span class="pre">BOOST_PP_LOCAL_LIMITS</span></tt>,
912
+ which must expand to a parenthesized pair of integer values
913
+ representing the <em>inclusive</em> range of index values
914
+ passed to <tt class="docutils literal"><span class="pre">BOOST_PP_LOCAL_MACRO</span></tt>.
915
+ Note that this is one of the rare places where the library
916
+ expects a numeric argument that can be an expression consisting
917
+ of multiple tokens.</p>
918
+ <p>Finally, the repetition is initiated by <tt class="docutils literal"><span
919
+
920
+ class="pre">#include</span></tt>-ing the result of invoking
921
+ <tt class="docutils literal"><span class="pre">BOOST_PP_LOCAL_ITERATE</span></tt>,
922
+ which will ultimately be a file in the Preprocessor library
923
+ itself. You may find it surprising that many preprocessors can
924
+ handle repeated file inclusion more quickly than nested
925
+ horizontal repetition, but that is in fact the case.</p>
926
+ <p>If we throw the new example at our preprocessor, we'll see the
927
+ following, on three separate lines in the output:</p>
928
+ <pre class="literal-block">template &lt;&gt; struct tiny_size&lt; none , none , none &gt; : mpl::int_&lt;0&gt;
929
+ {};
930
+
931
+ template &lt; class T0&gt; struct tiny_size&lt; T0 , none , none &gt; : mpl::
932
+ int_&lt;1&gt; {};
933
+
934
+ template &lt; class T0 , class T1&gt; struct tiny_size&lt; T0 , T1 , none
935
+ &gt; : mpl::int_&lt;2&gt; {};
936
+ </pre>
937
+ <!-- @compile('all', pop = 1) -->
938
+ <p>That represents a great improvement in verifiability, but it's
939
+ still not ideal. As <tt class="docutils literal"><span class="pre">TINY_MAX_SIZE</span></tt>
940
+ grows, it gets harder and harder to see that the pattern is
941
+ generating what we'd like. If we could get some more line breaks
942
+ into the output it would retain a more recognizable form.</p>
943
+ <p>Both repetition methods we've used so far have another
944
+ drawback, though it doesn't show up in this example. Consider
945
+ what would happen if <tt class="docutils literal"><span class="pre">tiny_size</span></tt>
946
+ had a member function that we wanted to debug. If you've ever
947
+ tried to use a debugger to step through a function generated by
948
+ a preprocessor macro, you know that it's a frustrating
949
+ experience at best: The debugger shows you the line from which
950
+ the macro was ultimately invoked, which usually looks nothing at
951
+ all like the code that was generated. Worse, as far as the
952
+ debugger is concerned, <em>every</em> statement in that
953
+ generated function occupies that same line.</p>
954
+ </div>
955
+ <div class="section" id="file-iteration">
956
+ <h4><a name="file-iteration">File Iteration</a></h4>
957
+ <p>Clearly, debuggability depends on preserving the association
958
+ between generated code and the lines in the source file that
959
+ describe the code pattern. File iteration generates pattern
960
+ instances by repeatedly <tt class="docutils literal"><span class="pre">#include</span></tt>-ing
961
+ the same source file. The effect of file iteration on
962
+ debuggability is similar to that of templates: Although separate
963
+ instances appear to occupy the same source lines in the
964
+ debugger, we do have the experience of stepping through the
965
+ function's source code.</p>
966
+ <p>To apply file iteration in our example, we can replace our
967
+ earlier local iteration code and the definition of <tt class="docutils literal"><span
968
+
969
+ class="pre">TINY_size</span></tt>, with:</p>
970
+ <pre class="literal-block">#include &lt;boost/preprocessor/iteration/iterate.hpp&gt;
971
+ #define BOOST_PP_ITERATION_LIMITS (0, TINY_MAX_SIZE - 1)
972
+ #define BOOST_PP_FILENAME_1 "tiny_size_spec.hpp"
973
+ #include BOOST_PP_ITERATE()
974
+ </pre>
975
+ <p><tt class="docutils literal"><span class="pre">BOOST_PP_ITERATION_LIMITS</span></tt>
976
+ follows the same pattern as <tt class="docutils literal"><span
977
+
978
+ class="pre">BOOST_PP_LOCAL_LIMITS</span></tt> did, allowing
979
+ us to specify an inclusive range of iteration indices. <tt class="docutils literal"><span
980
+
981
+ class="pre">BOOST_PP_FILENAME_1</span></tt> specifies the
982
+ name of the file to repeatedly <tt class="docutils literal"><span
983
+
984
+ class="pre">#include</span></tt> (we'll show you that file
985
+ in a moment). The trailing <tt class="docutils literal"><span class="pre">1</span></tt>
986
+ indicates that this is the first nesting level of file
987
+ iteration—should we need to invoke file iteration again from
988
+ within <tt class="docutils literal"><span class="pre">tiny_size_spec.hpp</span></tt>,
989
+ we'd need to use <tt class="docutils literal"><span class="pre">BOOST_PP_FILENAME_2</span></tt>
990
+ instead.</p>
991
+ <p>The contents of <tt class="docutils literal"><span class="pre">tiny_size_spec.hpp</span></tt>
992
+ should look familiar to you; most of it is the same as <tt class="docutils literal"><span
993
+
994
+ class="pre">TINY_size</span></tt>'s <em>replacement-list</em>,
995
+ without the backslashes:</p>
996
+ <pre class="literal-block">#define n BOOST_PP_ITERATION()
997
+
998
+ template &lt;BOOST_PP_ENUM_PARAMS(n, class T)&gt;
999
+ struct tiny_size&lt;
1000
+ BOOST_PP_ENUM_PARAMS(n,T)
1001
+ BOOST_PP_COMMA_IF(n)
1002
+ BOOST_PP_ENUM(BOOST_PP_SUB(TINY_MAX_SIZE,n), TINY_print, none)
1003
+ &gt;
1004
+ : mpl::int_&lt;n&gt; {};
1005
+
1006
+ #undef n
1007
+ </pre>
1008
+ <!-- @import tempfile, os
1009
+ open(os.path.join(tempfile.gettempdir(),'tiny_size_spec.hpp'), 'w' ).write(str(example))ignore()vertical_options = ['-I'+tempfile.gettempdir(), '-c']
1010
+ compile('all', options = vertical_options, pop = 1) -->
1011
+ <p>The Library transmits the iteration index to us in the result
1012
+ of <tt class="docutils literal"><span class="pre">BOOST_PP_ITERATION()</span></tt>;
1013
+ <tt class="docutils literal"><span class="pre">n</span></tt> is
1014
+ nothing more than a convenient local macro used to reduce
1015
+ syntactic noise. Note that we didn't use <tt class="docutils literal"><span
1016
+
1017
+ class="pre">#include</span></tt> guards because we need <tt
1018
+
1019
+ class="docutils literal"><span class="pre">tiny_size_spec.hpp</span></tt>
1020
+ to be processed multiple times.</p>
1021
+ <p>The preprocessed result should now preserve the line structure
1022
+ of the pattern and be more verifiable for larger values of <tt
1023
+
1024
+ class="docutils literal"><span class="pre">TINY_MAX_SIZE</span></tt>.
1025
+ For instance, when <tt class="docutils literal"><span class="pre">TINY_MAX_SIZE</span></tt>
1026
+ is <tt class="docutils literal"><span class="pre">8</span></tt>,
1027
+ the following excerpt appears in the output of GCC's
1028
+ preprocessing phase:</p>
1029
+ <pre class="literal-block"><em>...</em>
1030
+ template &lt; class T0 , class T1 , class T2 , class T3&gt;
1031
+ struct tiny_size&lt;
1032
+ T0 , T1 , T2 , T3
1033
+ ,
1034
+ none , none , none , none
1035
+ &gt;
1036
+ : mpl::int_&lt;4&gt; {};
1037
+
1038
+ template &lt; class T0 , class T1 , class T2 , class T3 , class T4&gt;
1039
+ struct tiny_size&lt;
1040
+ T0 , T1 , T2 , T3 , T4
1041
+ ,
1042
+ none , none , none
1043
+ &gt;
1044
+ : mpl::int_&lt;5&gt; {};
1045
+ <em>...etc.</em>
1046
+ </pre>
1047
+ <!-- @compile('all', options = vertical_options + ['-DTINY_MAX_SIZE=8']) -->
1048
+ </div>
1049
+ <div class="section" id="self-iteration">
1050
+ <h4><a name="self-iteration">Self-Iteration</a></h4>
1051
+ <p>Creating an entirely new file like <tt class="docutils literal"><span
1052
+
1053
+ class="pre">tiny_size_spec.hpp</span></tt> each time we want
1054
+ to express a trivial code pattern for file repetition can be
1055
+ inconvenient. Fortunately, the library provides a macro that
1056
+ allows us to place the pattern right in the file that invokes
1057
+ the iteration. <tt class="docutils literal"><span class="pre">BOOST_PP_IS_ITERATING</span></tt>
1058
+ is defined to a nonzero value whenever we're inside an
1059
+ iteration. We can use that value to select between the part of a
1060
+ file that invokes the iteration and the part that provides the
1061
+ repeated pattern. Here's a complete <tt class="docutils literal"><span
1062
+
1063
+ class="pre">tiny_size.hpp</span></tt> file that demonstrates
1064
+ self-iteration. Note in particular the placement and use of the
1065
+ <tt class="docutils literal"><span class="pre">#include</span></tt>
1066
+ guard <tt class="docutils literal"><span class="pre">TINY_SIZE_HPP_INCLUDED</span></tt>:</p>
1067
+ <pre class="literal-block">#ifndef <strong>BOOST_PP_IS_ITERATING</strong>
1068
+
1069
+ # ifndef TINY_SIZE_HPP_INCLUDED
1070
+ # define TINY_SIZE_HPP_INCLUDED
1071
+
1072
+ # include &lt;boost/preprocessor/repetition.hpp&gt;
1073
+ # include &lt;boost/preprocessor/arithmetic/sub.hpp&gt;
1074
+ # include &lt;boost/preprocessor/punctuation/comma_if.hpp&gt;
1075
+ # include &lt;boost/preprocessor/iteration/iterate.hpp&gt;
1076
+
1077
+ # ifndef TINY_MAX_SIZE
1078
+ # define TINY_MAX_SIZE 3 // default maximum size is 3
1079
+ # endif
1080
+
1081
+ // primary template
1082
+ template &lt;BOOST_PP_ENUM_PARAMS(TINY_MAX_SIZE, class T)&gt;
1083
+ struct tiny_size
1084
+ : mpl::int_&lt;TINY_MAX_SIZE&gt;
1085
+ {};
1086
+
1087
+ // generate specializations
1088
+ # define BOOST_PP_ITERATION_LIMITS (0, TINY_MAX_SIZE - 1)
1089
+ # define BOOST_PP_FILENAME_1 "tiny_size.hpp" // this file
1090
+ # include BOOST_PP_ITERATE()
1091
+
1092
+ # endif // TINY_SIZE_HPP_INCLUDED
1093
+
1094
+ #else // <strong>BOOST_PP_IS_ITERATING</strong>
1095
+
1096
+ # define n BOOST_PP_ITERATION()
1097
+
1098
+ # define TINY_print(z, n, data) data
1099
+
1100
+ // specialization pattern
1101
+ template &lt;BOOST_PP_ENUM_PARAMS(n, class T)&gt;
1102
+ struct tiny_size&lt;
1103
+ BOOST_PP_ENUM_PARAMS(n,T)
1104
+ BOOST_PP_COMMA_IF(n)
1105
+ BOOST_PP_ENUM(BOOST_PP_SUB(TINY_MAX_SIZE,n), TINY_print, none)
1106
+ &gt;
1107
+ : mpl::int_&lt;n&gt; {};
1108
+
1109
+ # undef TINY_print
1110
+ # undef n
1111
+
1112
+ #endif // <strong>BOOST_PP_IS_ITERATING</strong>
1113
+ </pre>
1114
+ <!-- @compile(source_file = 'tiny_size.hpp') --> </div>
1115
+ <div class="section" id="more">
1116
+ <h4><a name="more">More</a></h4>
1117
+ <p>There's a good deal more to file iteration than what we've been
1118
+ able to show you here. For more details, we encourage you to
1119
+ delve into the library's electronic documentation of <tt class="docutils literal"><span
1120
+
1121
+ class="pre">BOOST_PP_ITERATE</span></tt> and friends. Also,
1122
+ it's important to note that no single technique for repetition
1123
+ is superior to any other: Your choice may depend on convenience,
1124
+ verifiability, debuggability, compilation speed, and your own
1125
+ sense of "logical coherence."</p>
1126
+ </div>
1127
+ </div>
1128
+ </div>
1129
+ <div class="section" id="arithmetic-logical-and-comparison-operations">
1130
+ <h2><a name="arithmetic-logical-and-comparison-operations">A.4.2   Arithmetic,
1131
+ Logical, and Comparison Operations</a></h2>
1132
+ <p>As we mentioned earlier, many of the Preprocessor library
1133
+ interfaces require single-token numeric arguments, and when those
1134
+ numbers need to be computed arithmetically, straightforward
1135
+ arithmetic expressions are inappropriate. We used <tt class="docutils literal"><span
1136
+
1137
+ class="pre">BOOST_PP_SUB</span></tt> to subtract two numeric
1138
+ tokens in our <tt class="docutils literal"><span class="pre">tiny_size</span></tt>
1139
+ examples. The library contains a suite of operations for
1140
+ non-negative integral token arithmetic in its <tt class="docutils literal"><span
1141
+
1142
+ class="pre">arithmetic/</span></tt> subdirectory, as shown in
1143
+ Table A.1</p>
1144
+ <table border="1" class="docutils">
1145
+ <caption>Preprocessor Library Arithmetic Operations</caption> <colgroup>
1146
+ <col width="44%" /> <col width="56%" /> </colgroup>
1147
+ <thead valign="bottom">
1148
+ <tr>
1149
+ <th>Expression</th>
1150
+ <th>Value of Single Token Result</th>
1151
+ </tr>
1152
+ </thead>
1153
+ <tbody valign="top">
1154
+ <tr>
1155
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_ADD(x,y)</span></tt></td>
1156
+ <td><tt class="docutils literal"><span class="pre">x</span> <span
1157
+
1158
+ class="pre">+</span> <span class="pre">y</span></tt></td>
1159
+ </tr>
1160
+ <tr>
1161
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_DEC(x)</span></tt></td>
1162
+ <td><tt class="docutils literal"><span class="pre">x</span> <span
1163
+
1164
+ class="pre">-</span> <span class="pre">1</span></tt></td>
1165
+ </tr>
1166
+ <tr>
1167
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_DIV(x,y)</span></tt></td>
1168
+ <td><tt class="docutils literal"><span class="pre">x</span> <span
1169
+
1170
+ class="pre">/</span> <span class="pre">y</span></tt></td>
1171
+ </tr>
1172
+ <tr>
1173
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_INC(x)</span></tt></td>
1174
+ <td><tt class="docutils literal"><span class="pre">x</span> <span
1175
+
1176
+ class="pre">+</span> <span class="pre">1</span></tt></td>
1177
+ </tr>
1178
+ <tr>
1179
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_MOD(x,y)</span></tt></td>
1180
+ <td><tt class="docutils literal"><span class="pre">x</span> <span
1181
+
1182
+ class="pre">%</span> <span class="pre">y</span></tt></td>
1183
+ </tr>
1184
+ <tr>
1185
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_MUL(x,y)</span></tt></td>
1186
+ <td><tt class="docutils literal"><span class="pre">x</span> <span
1187
+
1188
+ class="pre">*</span> <span class="pre">y</span></tt></td>
1189
+ </tr>
1190
+ <tr>
1191
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_SUB(x,y)</span></tt></td>
1192
+ <td><tt class="docutils literal"><span class="pre">x</span> <span
1193
+
1194
+ class="pre">-</span> <span class="pre">y</span></tt></td>
1195
+ </tr>
1196
+ </tbody>
1197
+ </table>
1198
+ <p>The <tt class="docutils literal"><span class="pre">logical/</span></tt>
1199
+ subdirectory contains the convenient Boolean token operations shown
1200
+ in Table A.2 and the more efficient operations shown in Table A.3,
1201
+ which require that their operands are either <tt class="docutils literal"><span
1202
+
1203
+ class="pre">0</span></tt> or <tt class="docutils literal"><span
1204
+
1205
+ class="pre">1</span></tt> (a single bit).</p>
1206
+ <table border="1" class="docutils">
1207
+ <caption>Preprocessor Library Integer Logical Operations</caption> <colgroup>
1208
+ <col width="44%" /> <col width="56%" /> </colgroup>
1209
+ <thead valign="bottom">
1210
+ <tr>
1211
+ <th>Expression</th>
1212
+ <th>Value of Single Token Result</th>
1213
+ </tr>
1214
+ </thead>
1215
+ <tbody valign="top">
1216
+ <tr>
1217
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_AND(x,y)</span></tt></td>
1218
+ <td><tt class="docutils literal"><span class="pre">x</span> <span
1219
+
1220
+ class="pre">&amp;&amp;</span> <span class="pre">y</span></tt></td>
1221
+ </tr>
1222
+ <tr>
1223
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_NOR(x,y)</span></tt></td>
1224
+ <td><tt class="docutils literal"><span class="pre">!(x</span> <span
1225
+
1226
+ class="pre">||</span> <span class="pre">y)</span></tt></td>
1227
+ </tr>
1228
+ <tr>
1229
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_OR(x,y)</span></tt></td>
1230
+ <td><tt class="docutils literal"><span class="pre">x</span> <span
1231
+
1232
+ class="pre">||</span> <span class="pre">y</span></tt></td>
1233
+ </tr>
1234
+ <tr>
1235
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_XOR(x,y)</span></tt></td>
1236
+ <td><tt class="docutils literal"><span class="pre">(bool)x</span>
1237
+ <span class="pre">!=</span> <span class="pre">(bool)y</span>  
1238
+ <span class="pre">?</span> <span class="pre">1</span> <span
1239
+
1240
+ class="pre">:</span> <span class="pre">0</span></tt></td>
1241
+ </tr>
1242
+ <tr>
1243
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_NOT(x)</span></tt></td>
1244
+ <td><tt class="docutils literal"><span class="pre">x</span> <span
1245
+
1246
+ class="pre">?</span> <span class="pre">0</span> <span class="pre">:</span>
1247
+ <span class="pre">1</span></tt></td>
1248
+ </tr>
1249
+ <tr>
1250
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_BOOL(x)</span></tt></td>
1251
+ <td><tt class="docutils literal"><span class="pre">x</span> <span
1252
+
1253
+ class="pre">?</span> <span class="pre">1</span> <span class="pre">:</span>
1254
+ <span class="pre">0</span></tt></td>
1255
+ </tr>
1256
+ </tbody>
1257
+ </table>
1258
+ <table border="1" class="docutils">
1259
+ <caption>Preprocessor Library Bit Logical Operations</caption> <colgroup>
1260
+ <col width="44%" /> <col width="56%" /> </colgroup>
1261
+ <thead valign="bottom">
1262
+ <tr>
1263
+ <th>Expression</th>
1264
+ <th>Value of Single Token Result</th>
1265
+ </tr>
1266
+ </thead>
1267
+ <tbody valign="top">
1268
+ <tr>
1269
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_BITAND(x,y)</span></tt></td>
1270
+ <td><tt class="docutils literal"><span class="pre">x</span> <span
1271
+
1272
+ class="pre">&amp;&amp;</span> <span class="pre">y</span></tt></td>
1273
+ </tr>
1274
+ <tr>
1275
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_BITNOR(x,y)</span></tt></td>
1276
+ <td><tt class="docutils literal"><span class="pre">!(x</span> <span
1277
+
1278
+ class="pre">||</span> <span class="pre">y)</span></tt></td>
1279
+ </tr>
1280
+ <tr>
1281
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_BITOR(x,y)</span></tt></td>
1282
+ <td><tt class="docutils literal"><span class="pre">x</span> <span
1283
+
1284
+ class="pre">||</span> <span class="pre">y</span></tt></td>
1285
+ </tr>
1286
+ <tr>
1287
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_BITXOR(x,y)</span></tt></td>
1288
+ <td><tt class="docutils literal"><span class="pre">(bool)x</span>
1289
+ <span class="pre">!=</span> <span class="pre">(bool)y</span>  
1290
+ <span class="pre">?</span> <span class="pre">1</span> <span
1291
+
1292
+ class="pre">:</span> <span class="pre">0</span></tt></td>
1293
+ </tr>
1294
+ <tr>
1295
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_COMPL(x)</span></tt></td>
1296
+ <td><tt class="docutils literal"><span class="pre">x</span> <span
1297
+
1298
+ class="pre">?</span> <span class="pre">0</span> <span class="pre">:</span>
1299
+ <span class="pre">1</span></tt></td>
1300
+ </tr>
1301
+ </tbody>
1302
+ </table>
1303
+ <p>Finally, the <tt class="docutils literal"><span class="pre">comparison/</span></tt>
1304
+ subdirectory provides the token integral comparison operations shown
1305
+ in Table A.4.</p>
1306
+ <table border="1" class="docutils">
1307
+ <caption>Preprocessor Library Comparison Operations</caption> <colgroup>
1308
+ <col width="46%" /> <col width="54%" /> </colgroup>
1309
+ <thead valign="bottom">
1310
+ <tr>
1311
+ <th>Expression</th>
1312
+ <th>Value of Single Token Result</th>
1313
+ </tr>
1314
+ </thead>
1315
+ <tbody valign="top">
1316
+ <tr>
1317
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_EQUAL(x,y)</span></tt></td>
1318
+ <td><tt class="docutils literal"><span class="pre">x</span> <span
1319
+
1320
+ class="pre">==</span> <span class="pre">y</span>   <span
1321
+
1322
+ class="pre">?</span> <span class="pre">1</span> <span class="pre">:</span>
1323
+ <span class="pre">0</span></tt></td>
1324
+ </tr>
1325
+ <tr>
1326
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_NOT_EQUAL(x,y)</span></tt></td>
1327
+ <td><tt class="docutils literal"><span class="pre">x</span> <span
1328
+
1329
+ class="pre">!=</span> <span class="pre">y</span>   <span
1330
+
1331
+ class="pre">?</span> <span class="pre">1</span> <span class="pre">:</span>
1332
+ <span class="pre">0</span></tt></td>
1333
+ </tr>
1334
+ <tr>
1335
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_LESS(x,y)</span></tt></td>
1336
+ <td><tt class="docutils literal"><span class="pre">x</span> <span
1337
+
1338
+ class="pre">&lt;</span> <span class="pre">y</span>    <span
1339
+
1340
+ class="pre">?</span> <span class="pre">1</span> <span class="pre">:</span>
1341
+ <span class="pre">0</span></tt></td>
1342
+ </tr>
1343
+ <tr>
1344
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_LESS_EQUAL(x,y)</span></tt></td>
1345
+ <td><tt class="docutils literal"><span class="pre">x</span> <span
1346
+
1347
+ class="pre">&lt;=</span> <span class="pre">y</span>   <span
1348
+
1349
+ class="pre">?</span> <span class="pre">1</span> <span class="pre">:</span>
1350
+ <span class="pre">0</span></tt></td>
1351
+ </tr>
1352
+ <tr>
1353
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_GREATER(x,y)</span></tt></td>
1354
+ <td><tt class="docutils literal"><span class="pre">x</span> <span
1355
+
1356
+ class="pre">&gt;</span> <span class="pre">y</span>    <span
1357
+
1358
+ class="pre">?</span> <span class="pre">1</span> <span class="pre">:</span>
1359
+ <span class="pre">0</span></tt></td>
1360
+ </tr>
1361
+ <tr>
1362
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_GREATER_EQUAL(x,y)</span></tt></td>
1363
+ <td><tt class="docutils literal"><span class="pre">x</span> <span
1364
+
1365
+ class="pre">&gt;=</span> <span class="pre">y</span>   <span
1366
+
1367
+ class="pre">?</span> <span class="pre">1</span> <span class="pre">:</span>
1368
+ <span class="pre">0</span></tt></td>
1369
+ </tr>
1370
+ </tbody>
1371
+ </table>
1372
+ <p>Because it's common to have a choice among several workable
1373
+ comparison operators, it may be useful to know that <tt class="docutils literal"><span
1374
+
1375
+ class="pre">BOOST_PP_EQUAL</span></tt> and <tt class="docutils literal"><span
1376
+
1377
+ class="pre">BOOST_PP_NOT_EQUAL</span></tt> are likely to be O(1)
1378
+ while the other comparison operators are generally slower.</p>
1379
+ </div>
1380
+ <div class="section" id="control-structures">
1381
+ <h2><a name="control-structures">A.4.3   Control Structures</a></h2>
1382
+ <p>In its <tt class="docutils literal"><span class="pre">control/</span></tt>
1383
+ directory, the Preprocessor Library supplies a macro <tt class="docutils literal"><span
1384
+
1385
+ class="pre">BOOST_PP_IF(c,t,f)</span></tt> that fulfills a
1386
+ similar role to the one filled by <tt class="docutils literal"><span
1387
+
1388
+ class="pre">mpl::if_</span></tt>. To explore the "control"
1389
+ group, we'll generate code for a framework of generic function
1390
+ objects: the Boost Function Library.<a class="footnote-reference" href="#function"
1391
+
1392
+ id="id10" name="id10">[8]</a> <tt class="docutils literal"><span
1393
+
1394
+ class="pre">boost::function</span></tt> is partially specialized
1395
+ to match function type arguments of each arity up to the maximum
1396
+ supported by the library:</p>
1397
+ <pre class="literal-block">template &lt;class Signature&gt; struct function; // primary template
1398
+
1399
+ template &lt;class R&gt; // arity = 0
1400
+ struct function&lt;R()&gt;
1401
+ <em>definition not shown...</em>
1402
+
1403
+ template &lt;class R, class A0&gt; // arity = 1
1404
+ struct function&lt;R(A0)&gt;
1405
+ <em>definition not shown...</em>
1406
+
1407
+ template &lt;class R, class A0, class A1&gt; // arity = 2
1408
+ struct function&lt;R(A0,A1)&gt;
1409
+ <em>definition not shown...</em>
1410
+
1411
+ template &lt;class R, class A0, class A1, class A2&gt; // arity = 3
1412
+ struct function&lt;R(A0,A1,A2)&gt;
1413
+ <em>definition not shown...</em>
1414
+
1415
+ <em>etc.</em>
1416
+ </pre>
1417
+ <!-- @example.replace(')>', ')>;')
1418
+ compile() -->
1419
+ <table class="docutils footnote" frame="void" id="function" rules="none">
1420
+ <colgroup><col class="label" /><col /></colgroup>
1421
+ <tbody valign="top">
1422
+ <tr>
1423
+ <td class="label"><a class="fn-backref" href="#id10" name="function">[8]</a></td>
1424
+ <td>We touched briefly on the design of Boost Function when we
1425
+ discussed type erasure in Chapter 9. See the Function library
1426
+ documentation at <tt class="docutils literal"><span class="pre">boost_1_32_0/libs/function/index.html</span></tt>
1427
+ on the CD that accompanies this book for more information.</td>
1428
+ </tr>
1429
+ </tbody>
1430
+ </table>
1431
+ <p>We've already covered a few strategies that can be used to generate
1432
+ the pattern above, so we won't belabor that part of the problem; the
1433
+ file iteration approach we used for <tt class="docutils literal"><span
1434
+
1435
+ class="pre">tiny_size</span></tt> would be fine:</p>
1436
+ <pre class="literal-block">#ifndef BOOST_PP_IS_ITERATING
1437
+
1438
+ # ifndef BOOST_FUNCTION_HPP_INCLUDED
1439
+ # define BOOST_FUNCTION_HPP_INCLUDED
1440
+
1441
+ # include &lt;boost/preprocessor/repetition.hpp&gt;
1442
+ # include &lt;boost/preprocessor/iteration/iterate.hpp&gt;
1443
+
1444
+ # ifndef FUNCTION_MAX_ARITY
1445
+ # define FUNCTION_MAX_ARITY 15
1446
+ # endif
1447
+
1448
+ <strong>template &lt;class Signature&gt; struct function;</strong> // primary template
1449
+
1450
+ // generate specializations
1451
+ # define BOOST_PP_ITERATION_LIMITS (0, FUNCTION_MAX_ARITY)
1452
+ # define BOOST_PP_FILENAME_1 "boost/function.hpp" // this file
1453
+ # include BOOST_PP_ITERATE()
1454
+
1455
+ # endif // BOOST_FUNCTION_HPP_INCLUDED
1456
+
1457
+ #else // BOOST_PP_IS_ITERATING
1458
+
1459
+ # define n BOOST_PP_ITERATION()
1460
+
1461
+ // specialization pattern
1462
+ <strong>template &lt;class R BOOST_PP_ENUM_TRAILING_PARAMS(n, class A)&gt;</strong>
1463
+ <strong>struct function&lt;R ( BOOST_PP_ENUM_PARAMS(n,A) )&gt;</strong>
1464
+ <em>definition not shown...</em>
1465
+
1466
+ # undef n
1467
+
1468
+ #endif // BOOST_PP_IS_ITERATING
1469
+ </pre>
1470
+ <p><tt class="docutils literal"><span class="pre">BOOST_PP_ENUM_TRAILING_PARAMS</span></tt>,
1471
+ used above, is just like <tt class="docutils literal"><span class="pre">BOOST_PP_ENUM_PARAMS</span></tt>
1472
+ except that when its first argument is not <tt class="docutils literal"><span
1473
+
1474
+ class="pre">0</span></tt>, it generates a leading comma.</p>
1475
+ <!-- @example.replace_emphasis(';//')
1476
+ tmpdir = tempfile.gettempdir()tmpboost = os.path.join(tmpdir,'boost')try: os.mkdir(tmpboost)except: pass
1477
+ tmp_boost_function = os.path.join(tmpdir, 'boost/function.hpp')compile( options = vertical_options , source_file = tmp_boost_function
1478
+ , pop = None) -->
1479
+ <div class="section" id="argument-selection">
1480
+ <h3><a name="argument-selection">A.4.3.1   Argument Selection</a></h3>
1481
+ <p>For the sake of interoperability with C++ standard library
1482
+ algorithms, it might be nice if <tt class="docutils literal"><span
1483
+
1484
+ class="pre">function</span></tt>s of one or two arguments were
1485
+ derived from appropriate specializations of <tt class="docutils literal"><span
1486
+
1487
+ class="pre">std::unary_function</span></tt> or <tt class="docutils literal"><span
1488
+
1489
+ class="pre">std::binary_function</span></tt>, respectively.<a
1490
+
1491
+ class="footnote-reference" href="#ebo" id="id11" name="id11">[9]</a>
1492
+ <tt class="docutils literal"><span class="pre">BOOST_PP_IF</span></tt>
1493
+ is a great tool for dealing with special cases:</p>
1494
+ <pre class="literal-block"># include &lt;boost/preprocessor/control/if.hpp&gt;
1495
+ # include &lt;boost/preprocessor/comparison/equal.hpp&gt;
1496
+
1497
+ // specialization pattern
1498
+ template &lt;class R BOOST_PP_ENUM_TRAILING_PARAMS(n, class A)&gt;
1499
+ struct function&lt;R ( BOOST_PP_ENUM_PARAMS(n,A) )&gt;
1500
+ BOOST_PP_IF(
1501
+ BOOST_PP_EQUAL(n,2), <strong>: std::binary_function&lt;A0, A1, R&gt;</strong>
1502
+ , BOOST_PP_IF(
1503
+ BOOST_PP_EQUAL(n,1), <strong>: std::unary_function&lt;A0, R&gt;</strong>
1504
+ , <em>...empty argument...</em>
1505
+ )
1506
+ )
1507
+ { <em>...class body omitted...</em> };
1508
+ </pre>
1509
+ <!-- @pp_failure() -->
1510
+ <table class="docutils footnote" frame="void" id="ebo" rules="none">
1511
+ <colgroup><col class="label" /><col /></colgroup>
1512
+ <tbody valign="top">
1513
+ <tr>
1514
+ <td class="label"><a class="fn-backref" href="#id11" name="ebo">[9]</a></td>
1515
+ <td>While derivation from <tt class="docutils literal"><span
1516
+
1517
+ class="pre">std::unary_function</span></tt> or <tt class="docutils literal"><span
1518
+
1519
+ class="pre">std::binary_function</span></tt> might be
1520
+ necessary for interoperability with some older library
1521
+ implementations, it may inhibit the Empty Base Optimization
1522
+ (EBO) from taking effect when two such derived classes are
1523
+ part of the same object. For more information, see section
1524
+ 9.4. In general, it's better to expose <tt class="docutils literal"><span
1525
+
1526
+ class="pre">first_argument_type</span></tt>, <tt class="docutils literal"><span
1527
+
1528
+ class="pre">second_argument_type</span></tt>, and <tt class="docutils literal"><span
1529
+
1530
+ class="pre">result_type</span></tt> <tt class="docutils literal"><span
1531
+
1532
+ class="pre">typedef</span></tt>s directly.</td>
1533
+ </tr>
1534
+ </tbody>
1535
+ </table>
1536
+ <p>Well, our first attempt has run into several problems. First off,
1537
+ you're not allowed to pass an empty argument to the preprocessor.<a
1538
+
1539
+ class="footnote-reference" href="#c99" id="id12" name="id12">[3]</a>
1540
+ Secondly, because angle brackets don't get special treatment, the
1541
+ commas in the <tt class="docutils literal"><span class="pre">std::unary_function</span></tt>
1542
+ and <tt class="docutils literal"><span class="pre">std::binary_function</span></tt>
1543
+ specializations above are treated as macro argument separators,
1544
+ and the preprocessor will complain that we've passed the wrong
1545
+ number of arguments to <tt class="docutils literal"><span class="pre">BOOST_PP_IF</span></tt>
1546
+ in two places.</p>
1547
+ <p>Because it captures all of the issues, let's focus on the inner <tt
1548
+
1549
+ class="docutils literal"><span class="pre">BOOST_PP_IF</span></tt>
1550
+ invocation for a moment. The strategy that <tt class="docutils literal"><span
1551
+
1552
+ class="pre">mpl::eval_if</span></tt> uses, of selecting a
1553
+ nullary function to invoke, could work nicely here. The
1554
+ preprocessor doesn't have a direct analogue for <tt class="docutils literal"><span
1555
+
1556
+ class="pre">mpl::eval_if</span></tt>, but it doesn't really
1557
+ need one: We can get the right effect by adding a second set of
1558
+ parentheses to <tt class="docutils literal"><span class="pre">BOOST_PP_IF</span></tt>.</p>
1559
+ <pre class="literal-block">#define BOOST_FUNCTION_unary() : std::unary_function&lt;A0,R&gt;
1560
+ #define BOOST_FUNCTION_empty() // nothing
1561
+
1562
+ ...
1563
+
1564
+ , BOOST_PP_IF(
1565
+ BOOST_PP_EQUAL(n,1), BOOST_FUNCTION_unary
1566
+ , BOOST_FUNCTION_empty
1567
+ )<strong>()</strong>
1568
+
1569
+ #undef BOOST_FUNCTION_empty
1570
+ #undef BOOST_FUNCTION_unary
1571
+ </pre>
1572
+ <!-- @ignore() -->
1573
+ <p>A nullary macro that generates nothing is so commonly needed that
1574
+ the library's "facilities" group provides one: <tt class="docutils literal"><span
1575
+
1576
+ class="pre">BOOST_PP_EMPTY</span></tt>. To complete the
1577
+ example we'll need to delay evaluation all the way to the outer <tt
1578
+
1579
+ class="docutils literal"><span class="pre">BOOST_PP_IF</span></tt>
1580
+ invocation, because <tt class="docutils literal"><span class="pre">std::binary_function&lt;A0,A1,R&gt;</span></tt>
1581
+ also has a "comma problem":</p>
1582
+ <pre class="literal-block"># include &lt;boost/preprocessor/<strong>facilities/empty.hpp</strong>&gt;
1583
+
1584
+ # define BOOST_FUNCTION_binary() : std::binary_function&lt;A0,A1,R&gt;
1585
+ # define BOOST_FUNCTION_unary() : std::unary_function&lt;A0,R&gt;
1586
+
1587
+ // specialization pattern
1588
+ template &lt;class R BOOST_PP_ENUM_TRAILING_PARAMS(n, class A)&gt;
1589
+ struct function&lt;R ( BOOST_PP_ENUM_PARAMS(n,A) )&gt;
1590
+ BOOST_PP_IF(
1591
+ BOOST_PP_EQUAL(n,2), BOOST_FUNCTION_binary
1592
+ , BOOST_PP_IF(
1593
+ BOOST_PP_EQUAL(n,1), BOOST_FUNCTION_unary
1594
+ , <strong>BOOST_PP_EMPTY</strong>
1595
+ )
1596
+ )<strong>()</strong>
1597
+ {
1598
+ <em>...class body omitted...</em>
1599
+ };
1600
+
1601
+ # undef BOOST_FUNCTION_unary
1602
+ # undef BOOST_FUNCTION_binary
1603
+ # undef n
1604
+ </pre>
1605
+ <!-- @stack.pop()
1606
+ stack[-1].replace('// specialization pattern', '////\n%s\n////' % str(example))compile(source_file = tmp_boost_function, pop = None) -->
1607
+ <p>Note that because we happened to be using file iteration, we
1608
+ could have also used <tt class="docutils literal"><span class="pre">#if</span></tt>
1609
+ on <tt class="docutils literal"><span class="pre">n</span></tt>'s
1610
+ value directly:</p>
1611
+ <pre class="literal-block"> template &lt;class R BOOST_PP_ENUM_TRAILING_PARAMS(n, class A)&gt;
1612
+ struct function&lt;R ( BOOST_PP_ENUM_PARAMS(n,A) )&gt;
1613
+ <strong>#if n == 2</strong>
1614
+ : std::binary_function&lt;A0, A1, R&gt;
1615
+ <strong>#elif n == 1</strong>
1616
+ : std::unary_function&lt;A0, R&gt;
1617
+ <strong>#endif</strong>
1618
+ </pre>
1619
+ <!-- @stack.pop()
1620
+ stack[-1].sub( r'////.*////', '////\n%s\n////' % str(example), flags = re.DOTALL)compile(source_file = tmp_boost_function, pop = None) -->
1621
+ <p><tt class="docutils literal"><span class="pre">BOOST_PP_IF</span></tt>
1622
+ has the advantage of enabling us to encapsulate the logic in a
1623
+ reusable macro, parameterized on <tt class="docutils literal"><span
1624
+
1625
+ class="pre">n</span></tt>, that is compatible with all
1626
+ repetition constructs:</p>
1627
+ <pre class="literal-block">#define BOOST_FUNCTION_BASE(n) \
1628
+ BOOST_PP_IF(BOOST_PP_EQUAL(n,2), BOOST_FUNCTION_binary \
1629
+ , BOOST_PP_IF(BOOST_PP_EQUAL(n,1), BOOST_FUNCTION_unary \
1630
+ , BOOST_PP_EMPTY \
1631
+ ) \
1632
+ )()
1633
+ </pre>
1634
+ <!-- @compile(options = ['-E']) --> </div>
1635
+ <div class="section" id="other-selection-constructs">
1636
+ <h3><a name="other-selection-constructs">A.4.3.2   Other Selection
1637
+ Constructs</a></h3>
1638
+ <p><tt class="docutils literal"><span class="pre">BOOST_PP_IDENTITY</span></tt>,
1639
+ also in the "facilities" group, is an interesting cousin of <tt class="docutils literal"><span
1640
+
1641
+ class="pre">BOOST_PP_EMPTY</span></tt>:</p>
1642
+ <pre class="literal-block">#define BOOST_PP_IDENTITY(tokens) tokens BOOST_PP_EMPTY
1643
+ </pre>
1644
+ <!-- @ignore() -->
1645
+ <p>You can think of it as creating a nullary macro that returns <tt
1646
+
1647
+ class="docutils literal"><span class="pre">tokens</span></tt>:
1648
+ When empty parentheses are appended, the trailing <tt class="docutils literal"><span
1649
+
1650
+ class="pre">BOOST_PP_EMPTY</span></tt> is expanded leaving
1651
+ just <tt class="docutils literal"><span class="pre">tokens</span></tt>
1652
+ behind. If we had wanted inheritance from <tt class="docutils literal"><span
1653
+
1654
+ class="pre">mpl::empty_base</span></tt> when <tt class="docutils literal"><span
1655
+
1656
+ class="pre">function</span></tt>'s arity is not one or two, we
1657
+ could have used <tt class="docutils literal"><span class="pre">BOOST_PP_IDENTITY</span></tt>:</p>
1658
+ <pre class="literal-block">// specialization pattern
1659
+ template &lt;class R BOOST_PP_ENUM_TRAILING_PARAMS(n, class A)&gt;
1660
+ struct function&lt;R ( BOOST_PP_ENUM_PARAMS(n,A) )&gt;
1661
+ BOOST_PP_IF(
1662
+ BOOST_PP_EQUAL(n,2), BOOST_FUNCTION_binary
1663
+ , BOOST_PP_IF(
1664
+ BOOST_PP_EQUAL(n,1), BOOST_FUNCTION_unary
1665
+ , <strong>BOOST_PP_IDENTITY(: mpl::empty_base)</strong>
1666
+ )
1667
+ )<strong>()</strong>
1668
+ {
1669
+ <em>...class body omitted...</em>
1670
+ };
1671
+ </pre>
1672
+ <!-- @stack.pop()
1673
+ stack[-1].sub( r'////.*////', '////\n%s\n////' % str(example), flags = re.DOTALL)compile(source_file = tmp_boost_function, pop = None) -->
1674
+ <p>It's also worth knowing about <tt class="docutils literal"><span
1675
+
1676
+ class="pre">BOOST_PP_EXPR_IF</span></tt>, which generates its
1677
+ second argument or nothing, depending on the Boolean value of its
1678
+ first:</p>
1679
+ <pre class="literal-block">#define BOOST_PP_EXPR_IF(c,tokens) \
1680
+ BOOST_PP_IF(c,BOOST_PP_IDENTITY(tokens),BOOST_PP_EMPTY)()
1681
+ </pre>
1682
+ <!-- @example.append(
1683
+ 'int BOOST_PP_EXPR_IF(1,main) BOOST_PP_EXPR_IF(0,quack) () {}')compile() -->
1684
+ <p>So <tt class="docutils literal"><span class="pre">BOOST_PP_EXPR_IF(1,foo)</span></tt>
1685
+ expands to <tt class="docutils literal"><span class="pre">foo</span></tt>,
1686
+ while <tt class="docutils literal"><span class="pre">BOOST_PP_EXPR_IF(0,foo)</span></tt>
1687
+ expands to nothing.</p>
1688
+ </div>
1689
+ </div>
1690
+ <div class="section" id="token-pasting">
1691
+ <h2><a name="token-pasting">A.4.4   Token Pasting</a></h2>
1692
+ <p>It would be nice if there were a generic way to access the return
1693
+ and parameter types of <em>all</em> function objects, rather than
1694
+ just the unary and binary ones. A metafunction returning the
1695
+ signature as an MPL sequence would do the trick. We could just
1696
+ specialize <tt class="docutils literal"><span class="pre">signature</span></tt>
1697
+ for each <tt class="docutils literal"><span class="pre">function</span></tt>
1698
+ arity:</p>
1699
+ <pre class="literal-block">template &lt;class F&gt; struct signature; // primary template
1700
+
1701
+ // partial specializations for boost::function
1702
+ template &lt;class R&gt;
1703
+ struct signature&lt;function&lt;R()&gt; &gt;
1704
+ : mpl::vector1&lt;R&gt; {};
1705
+
1706
+ template &lt;class R, class A0&gt;
1707
+ struct signature&lt;function&lt;R(A0)&gt; &gt;
1708
+ : mpl::vector2&lt;R,A0&gt; {};
1709
+
1710
+ template &lt;class R, class A0, class A1&gt;
1711
+ struct signature&lt;function&lt;R(A0,A1)&gt; &gt;
1712
+ : mpl::vector3&lt;R,A0,A1&gt; {};
1713
+
1714
+ ...
1715
+ </pre>
1716
+ <!-- @example.prepend('template <class T> struct function;')
1717
+ compile() -->
1718
+ <p>To generate these specializations, we might add the following to
1719
+ our pattern:</p>
1720
+ <pre class="literal-block">template &lt;class R BOOST_PP_ENUM_TRAILING_PARAMS(n, class A)&gt;
1721
+ struct signature&lt;function&lt;R( BOOST_PP_ENUM_PARAMS(n,A) )&gt; &gt;
1722
+ : mpl::<strong>BOOST_PP_CAT</strong>(vector,n)&lt;
1723
+ R BOOST_PP_ENUM_TRAILING_PARAMS(n,A)
1724
+ &gt; {};
1725
+ </pre>
1726
+ <!-- @stack.pop()
1727
+ stack[-1].replace( ';//', ''';// template <class T> struct signature; %s''' % example)
1728
+ compile(source_file = tmp_boost_function) -->
1729
+ <p><tt class="docutils literal"><span class="pre">BOOST_PP_CAT</span></tt>
1730
+ implements <strong>token pasting</strong>; its two arguments are
1731
+ "glued" together into a single token. Since this is a
1732
+ general-purpose macro, it sits in <tt class="docutils literal"><span
1733
+
1734
+ class="pre">cat.hpp</span></tt> at the top level of the
1735
+ library's directory tree.</p>
1736
+ <p>Although the preprocessor has a built-in token-pasting operator, <tt
1737
+
1738
+ class="docutils literal"><span class="pre">##</span></tt>, it only
1739
+ works within a macro definition. If we'd used it here, it wouldn't
1740
+ have taken effect at all:</p>
1741
+ <pre class="literal-block">template &lt;class R&gt;
1742
+ struct signature&lt;function&lt;R()&gt; &gt;
1743
+ : mpl::<strong>vector##1</strong>&lt;R&gt; {};
1744
+
1745
+ template &lt;class R, class A0&gt;
1746
+ struct signature&lt;function&lt;R(A0)&gt; &gt;
1747
+ : mpl::<strong>vector##2</strong>&lt;R,A0&gt; {};
1748
+
1749
+ template &lt;class R, class A0, class A1&gt;
1750
+ struct signature&lt;function&lt;R(A0,A1)&gt; &gt;
1751
+ : mpl::<strong>vector##3</strong>&lt;R,A0,A1&gt; {};
1752
+
1753
+ ...
1754
+ </pre>
1755
+ <!-- @example.replace('##','')
1756
+ example.prepend(''' template <class T> struct function; template <class T> struct signature;''')
1757
+ compile() -->
1758
+ <p>Also, <tt class="docutils literal"><span class="pre">##</span></tt>
1759
+ often yields surprising results by taking effect before its
1760
+ arguments have been expanded:</p>
1761
+ <pre class="literal-block">#define N 10
1762
+ #define VEC(i) vector##i
1763
+
1764
+ VEC(N) // vectorN
1765
+ </pre>
1766
+ <!-- @example.wrap('typedef int vectorN;', 'x;')
1767
+ compile() -->
1768
+ <p>By contrast, <tt class="docutils literal"><span class="pre">BOOST_PP_CAT</span></tt>
1769
+ delays concatenation until after its arguments have been fully
1770
+ evaluated:</p>
1771
+ <pre class="literal-block">#define N 10
1772
+ #define VEC(i) BOOST_PP_CAT(vector,i)
1773
+
1774
+ VEC(N) // vector10
1775
+ </pre>
1776
+ <!-- @example.wrap('''
1777
+ #include <boost/preprocessor/cat.hpp> typedef int vector10; ''', 'x;')compile() -->
1778
+ </div>
1779
+ <div class="section" id="data-types">
1780
+ <h2><a name="data-types">A.4.5   Data Types</a></h2>
1781
+ <p>The Preprocessor library also provides <strong>data types</strong>,
1782
+ which you can think of as being analogous to the MPL's type
1783
+ sequences. Preprocessor data types store <em>macro arguments</em>
1784
+ instead of C++ types.</p>
1785
+ <div class="section" id="sequences">
1786
+ <h3><a name="sequences">A.4.5.1   Sequences</a></h3>
1787
+ <p>A <strong>sequence</strong> (or <strong>seq</strong> for short)
1788
+ is any string of nonempty parenthesized <em>macro arguments</em>.
1789
+ For instance, here's a three-element sequence:</p>
1790
+ <pre class="literal-block">#define MY_SEQ (f(12))(a + 1)(foo)
1791
+ </pre>
1792
+ <!-- @ignore() -->
1793
+ <p>Here's how we might use a sequence to generate specializations of
1794
+ the <tt class="docutils literal"><span class="pre">is_integral</span></tt>
1795
+ template from the Boost Type Traits library (see Chapter 2):</p>
1796
+ <pre class="literal-block">#include &lt;boost/preprocessor/seq.hpp&gt;
1797
+
1798
+ template &lt;class T&gt;
1799
+ struct is_integral : mpl::false_ {};
1800
+
1801
+ // a seq of integral types with unsigned counterparts
1802
+ #define BOOST_TT_basic_ints (char)(short)(int)(long)
1803
+
1804
+ // generate a seq containing "signed t" and "unsigned t"
1805
+ #define BOOST_TT_int_pair(r,data,t) (signed t)(unsigned t)
1806
+
1807
+ // a seq of all the integral types
1808
+ #define BOOST_TT_ints \
1809
+ (bool)(char) \
1810
+ BOOST_PP_SEQ_FOR_EACH(BOOST_TT_int_pair, ~, BOOST_TT_basic_ints)
1811
+
1812
+ // generate an is_integral specialization for type t
1813
+ #define BOOST_TT_is_integral_spec(r,data,t) \
1814
+ template &lt;&gt; \
1815
+ struct is_integral&lt;t&gt; : mpl::true_ {};
1816
+
1817
+ BOOST_PP_SEQ_FOR_EACH(BOOST_TT_is_integral_spec, ~, BOOST_TT_ints)
1818
+
1819
+ #undef BOOST_TT_is_integral_spec
1820
+ #undef BOOST_TT_ints
1821
+ #undef BOOST_TT_int_pair
1822
+ #undef BOOST_TT_basic_ints
1823
+ </pre>
1824
+ <!-- @compile() -->
1825
+ <p><tt class="docutils literal"><span class="pre">BOOST_PP_SEQ_FOR_EACH</span></tt>
1826
+ is a higher-order macro, similar to <tt class="docutils literal"><span
1827
+
1828
+ class="pre">BOOST_PP_REPEAT</span></tt>, that invokes its
1829
+ first argument on each element of its third argument.</p>
1830
+ <p>Sequences are the most efficient, most flexible, and
1831
+ easiest-to-use of the library's data structures, provided that you
1832
+ never need to make an empty one: An empty sequence would contain
1833
+ no tokens, and so couldn't be passed as a macro argument. The
1834
+ other data structures covered here all have an empty
1835
+ representation.</p>
1836
+ <p>The facilities for manipulating sequences are all in the
1837
+ library's <tt class="docutils literal"><span class="pre">seq/</span></tt>
1838
+ subdirectory. They are summarized in Table A.5, where <tt class="docutils literal"><span
1839
+
1840
+ class="pre">t</span></tt> is the sequence <tt class="docutils literal"><span
1841
+
1842
+ class="pre">(</span></tt><em>t</em><sub>0</sub><tt class="docutils literal"><span
1843
+
1844
+ class="pre">)(</span></tt><em>t</em><sub>1</sub><tt class="docutils literal"><span
1845
+
1846
+ class="pre">)...(</span></tt><em>t</em><sub>k</sub><tt class="docutils literal"><span
1847
+
1848
+ class="pre">)</span></tt>. Where <em>s</em>, <em>r</em>, and
1849
+ <em>d</em> appear, they have a similar purpose to the <tt class="docutils literal"><span
1850
+
1851
+ class="pre">z</span></tt> parameters we discussed earlier (and
1852
+ suggested you ignore for now).</p>
1853
+ <table border="1" class="docutils">
1854
+ <caption>Preprocessor Sequence Operations</caption> <colgroup> <col
1855
+
1856
+ width="51%" /> <col width="49%" /> </colgroup>
1857
+ <thead valign="bottom">
1858
+ <tr>
1859
+ <th>Expression</th>
1860
+ <th>Result</th>
1861
+ </tr>
1862
+ </thead>
1863
+ <tbody valign="top">
1864
+ <tr>
1865
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_SEQ_CAT(t)</span></tt></td>
1866
+ <td><em>t</em><sub>0</sub><em>t</em><sub>1</sub>...<em>t</em><sub>k</sub></td>
1867
+ </tr>
1868
+ <tr>
1869
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_SEQ_ELEM(n,t)</span></tt></td>
1870
+ <td><em>t</em><sub>n</sub></td>
1871
+ </tr>
1872
+ <tr>
1873
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_SEQ_ENUM(t)</span></tt></td>
1874
+ <td><em>t</em><sub>0</sub>, <em>t</em><sub>1</sub>, ...<em>t</em><sub>k</sub></td>
1875
+ </tr>
1876
+ <tr>
1877
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_SEQ_FILTER(pred,data,t)</span></tt></td>
1878
+ <td><tt class="docutils literal"><span class="pre">t</span></tt>
1879
+ without the elements that don't satisfy <tt class="docutils literal"><span
1880
+
1881
+ class="pre">pred</span></tt></td>
1882
+ </tr>
1883
+ <tr>
1884
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_SEQ_FIRST_N(n,t)</span></tt></td>
1885
+ <td><tt class="docutils literal"><span class="pre">(</span></tt><em>t</em><sub>0</sub><tt
1886
+
1887
+ class="docutils literal"><span class="pre">)(</span></tt><em>t</em><sub>1</sub><tt
1888
+
1889
+ class="docutils literal"><span class="pre">)</span></tt>...<tt
1890
+
1891
+ class="docutils literal"><span class="pre">(</span></tt><em>t</em><sub>n-1</sub><tt
1892
+
1893
+ class="docutils literal"><span class="pre">)</span></tt></td>
1894
+ </tr>
1895
+ <tr>
1896
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_SEQ_FOLD_LEFT(op,</span>
1897
+ <span class="pre">x,</span> <span class="pre">t)</span></tt></td>
1898
+ <td>...<tt class="docutils literal"><span class="pre">op(</span></tt><em>s</em><tt
1899
+
1900
+ class="docutils literal"><span class="pre">,op(</span></tt><em>s</em><tt
1901
+
1902
+ class="docutils literal"><span class="pre">,op(</span></tt><em>s</em><tt
1903
+
1904
+ class="docutils literal"><span class="pre">,x</span></tt>,<em>t</em><sub>0</sub><tt
1905
+
1906
+ class="docutils literal"><span class="pre">),</span></tt><em>t</em><sub>1</sub><tt
1907
+
1908
+ class="docutils literal"><span class="pre">),</span></tt><em>t</em><sub>2</sub><tt
1909
+
1910
+ class="docutils literal"><span class="pre">)</span></tt>...</td>
1911
+ </tr>
1912
+ <tr>
1913
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_SEQ_FOLD_RIGHT(op,</span>
1914
+ <span class="pre">x,</span> <span class="pre">t)</span></tt></td>
1915
+ <td>...<tt class="docutils literal"><span class="pre">op(</span></tt><em>s</em><tt
1916
+
1917
+ class="docutils literal"><span class="pre">,op(</span></tt><em>s</em><tt
1918
+
1919
+ class="docutils literal"><span class="pre">,op(</span></tt><em>s</em><tt
1920
+
1921
+ class="docutils literal"><span class="pre">,x</span></tt>,<em>t</em><sub>k</sub><tt
1922
+
1923
+ class="docutils literal"><span class="pre">),</span></tt><em>t</em><sub>k-1</sub><tt
1924
+
1925
+ class="docutils literal"><span class="pre">),</span></tt>
1926
+ <em>t</em><sub>k-2</sub><tt class="docutils literal"><span class="pre">)</span></tt>...</td>
1927
+ </tr>
1928
+ <tr>
1929
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_SEQ_FOR_EACH(f,</span>
1930
+ <span class="pre">x,</span> <span class="pre">t)</span></tt></td>
1931
+ <td><tt class="docutils literal"><span class="pre">f(</span></tt><em>r</em><tt
1932
+
1933
+ class="docutils literal"><span class="pre">,</span> <span
1934
+
1935
+ class="pre">x,</span></tt><em>t</em><sub>0</sub><tt class="docutils literal"><span
1936
+
1937
+ class="pre">)</span> <span class="pre">f(</span></tt><em>r</em><tt
1938
+
1939
+ class="docutils literal"><span class="pre">,</span> <span
1940
+
1941
+ class="pre">x,</span></tt><em>t</em><sub>1</sub><tt class="docutils literal"><span
1942
+
1943
+ class="pre">)</span></tt>...<tt class="docutils literal"><span
1944
+
1945
+ class="pre">f(</span></tt><em>r</em><tt class="docutils literal"><span
1946
+
1947
+ class="pre">,</span> <span class="pre">x,</span></tt><em>t</em><sub>k</sub><tt
1948
+
1949
+ class="docutils literal"><span class="pre">)</span></tt></td>
1950
+ </tr>
1951
+ <tr>
1952
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_SEQ_FOR_EACH_I(g,</span>
1953
+ <span class="pre">x,</span> <span class="pre">t)</span></tt></td>
1954
+ <td><tt class="docutils literal"><span class="pre">g(</span></tt><em>r</em><tt
1955
+
1956
+ class="docutils literal"><span class="pre">,</span> <span
1957
+
1958
+ class="pre">x,</span> <span class="pre">0,</span></tt>
1959
+ <em>t</em><sub>0</sub><tt class="docutils literal"><span class="pre">)</span>
1960
+ <span class="pre">g(</span></tt><em>r</em><tt class="docutils literal"><span
1961
+
1962
+ class="pre">,</span> <span class="pre">x,</span> <span
1963
+
1964
+ class="pre">1,</span></tt> <em>t</em><sub>1</sub><tt class="docutils literal"><span
1965
+
1966
+ class="pre">)</span></tt>... <tt class="docutils literal"><span
1967
+
1968
+ class="pre">g(</span></tt><em>r</em><tt class="docutils literal"><span
1969
+
1970
+ class="pre">,</span> <span class="pre">x,</span> <span
1971
+
1972
+ class="pre">k,</span></tt> <em>t</em><sub>k</sub><tt class="docutils literal"><span
1973
+
1974
+ class="pre">)</span></tt></td>
1975
+ </tr>
1976
+ <tr>
1977
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_SEQ_FOR_EACH_PRODUCT(h,</span>
1978
+ <span class="pre">x,</span> <span class="pre">t)</span></tt></td>
1979
+ <td>
1980
+ <dl class="first last docutils">
1981
+ <dt>Cartesian product—</dt>
1982
+ <dd>see online docs</dd>
1983
+ </dl>
1984
+ </td>
1985
+ </tr>
1986
+ <tr>
1987
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_SEQ_INSERT(t,i,tokens)</span></tt></td>
1988
+ <td><tt class="docutils literal"><span class="pre">(</span></tt><em>t</em><sub>0</sub><tt
1989
+
1990
+ class="docutils literal"><span class="pre">)(</span></tt><em>t</em><sub>1</sub><tt
1991
+
1992
+ class="docutils literal"><span class="pre">)</span></tt>...<tt
1993
+
1994
+ class="docutils literal"><span class="pre">(</span></tt><em>t</em><sub>i-1</sub><tt
1995
+
1996
+ class="docutils literal"><span class="pre">)(tokens)</span>
1997
+ <span class="pre">(</span></tt><em>t</em><sub>i</sub><tt class="docutils literal"><span
1998
+
1999
+ class="pre">)(</span></tt><em>t</em><sub>i+1</sub><tt class="docutils literal"><span
2000
+
2001
+ class="pre">)</span></tt>...<tt class="docutils literal"><span
2002
+
2003
+ class="pre">(</span></tt><em>t</em><sub>k</sub><tt class="docutils literal"><span
2004
+
2005
+ class="pre">)</span></tt></td>
2006
+ </tr>
2007
+ <tr>
2008
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_SEQ_POP_BACK(t)</span></tt></td>
2009
+ <td><tt class="docutils literal"><span class="pre">(</span></tt><em>t</em><sub>0</sub><tt
2010
+
2011
+ class="docutils literal"><span class="pre">)(</span></tt><em>t</em><sub>1</sub><tt
2012
+
2013
+ class="docutils literal"><span class="pre">)</span></tt>...<tt
2014
+
2015
+ class="docutils literal"><span class="pre">(</span></tt><em>t</em><sub>k-1</sub><tt
2016
+
2017
+ class="docutils literal"><span class="pre">)</span></tt></td>
2018
+ </tr>
2019
+ <tr>
2020
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_SEQ_POP_FRONT(t)</span></tt></td>
2021
+ <td><tt class="docutils literal"><span class="pre">(</span></tt><em>t</em><sub>1</sub><tt
2022
+
2023
+ class="docutils literal"><span class="pre">)(</span></tt><em>t</em><sub>2</sub><tt
2024
+
2025
+ class="docutils literal"><span class="pre">)</span></tt>...<tt
2026
+
2027
+ class="docutils literal"><span class="pre">(</span></tt><em>t</em><sub>k</sub><tt
2028
+
2029
+ class="docutils literal"><span class="pre">)</span></tt></td>
2030
+ </tr>
2031
+ <tr>
2032
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_SEQ_PUSH_BACK(t,tokens)</span></tt></td>
2033
+ <td><tt class="docutils literal"><span class="pre">(</span></tt><em>t</em><sub>0</sub><tt
2034
+
2035
+ class="docutils literal"><span class="pre">)(</span></tt><em>t</em><sub>1</sub><tt
2036
+
2037
+ class="docutils literal"><span class="pre">)</span></tt>...<tt
2038
+
2039
+ class="docutils literal"><span class="pre">(</span></tt><em>t</em><sub>k</sub><tt
2040
+
2041
+ class="docutils literal"><span class="pre">)(tokens)</span></tt></td>
2042
+ </tr>
2043
+ <tr>
2044
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_SEQ_PUSH_FRONT(t,tokens)</span></tt></td>
2045
+ <td><tt class="docutils literal"><span class="pre">(tokens)(</span></tt><em>t</em><sub>0</sub><tt
2046
+
2047
+ class="docutils literal"><span class="pre">)(</span></tt><em>t</em><sub>1</sub><tt
2048
+
2049
+ class="docutils literal"><span class="pre">)</span></tt>...<tt
2050
+
2051
+ class="docutils literal"><span class="pre">(</span></tt><em>t</em><sub>k</sub><tt
2052
+
2053
+ class="docutils literal"><span class="pre">)</span></tt></td>
2054
+ </tr>
2055
+ <tr>
2056
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_SEQ_REMOVE(t,i)</span></tt></td>
2057
+ <td><tt class="docutils literal"><span class="pre">(</span></tt><em>t</em><sub>0</sub><tt
2058
+
2059
+ class="docutils literal"><span class="pre">)(</span></tt><em>t</em><sub>1</sub><tt
2060
+
2061
+ class="docutils literal"><span class="pre">)</span></tt>...<tt
2062
+
2063
+ class="docutils literal"><span class="pre">(</span></tt><em>t</em><sub>i-1</sub><tt
2064
+
2065
+ class="docutils literal"><span class="pre">)(</span></tt><em>t</em><sub>i+1</sub><tt
2066
+
2067
+ class="docutils literal"><span class="pre">)</span></tt>...<tt
2068
+
2069
+ class="docutils literal"><span class="pre">(</span></tt><em>t</em><sub>k</sub><tt
2070
+
2071
+ class="docutils literal"><span class="pre">)</span></tt></td>
2072
+ </tr>
2073
+ <tr>
2074
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_SEQ_REPLACE(t,i,tokens)</span></tt></td>
2075
+ <td><tt class="docutils literal"><span class="pre">(</span></tt><em>t</em><sub>0</sub><tt
2076
+
2077
+ class="docutils literal"><span class="pre">)(</span></tt><em>t</em><sub>1</sub><tt
2078
+
2079
+ class="docutils literal"><span class="pre">)</span></tt>...<tt
2080
+
2081
+ class="docutils literal"><span class="pre">(</span></tt><em>t</em><sub>i-1</sub><tt
2082
+
2083
+ class="docutils literal"><span class="pre">)(tokens)(</span></tt><em>t</em><sub>i+1</sub><tt
2084
+
2085
+ class="docutils literal"><span class="pre">)</span></tt>...<tt
2086
+
2087
+ class="docutils literal"><span class="pre">(</span></tt><em>t</em><sub>k</sub><tt
2088
+
2089
+ class="docutils literal"><span class="pre">)</span></tt></td>
2090
+ </tr>
2091
+ <tr>
2092
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_SEQ_REST_N(n,t)</span></tt></td>
2093
+ <td><tt class="docutils literal"><span class="pre">(</span></tt><em>t</em><sub>n</sub><tt
2094
+
2095
+ class="docutils literal"><span class="pre">)(</span></tt><em>t</em><sub>n+1</sub><tt
2096
+
2097
+ class="docutils literal"><span class="pre">)</span></tt>...<tt
2098
+
2099
+ class="docutils literal"><span class="pre">(</span></tt><em>t</em><sub>k</sub><tt
2100
+
2101
+ class="docutils literal"><span class="pre">)</span></tt></td>
2102
+ </tr>
2103
+ <tr>
2104
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_SEQ_REVERSE(t)</span></tt></td>
2105
+ <td><tt class="docutils literal"><span class="pre">(</span></tt><em>t</em><sub>k</sub><tt
2106
+
2107
+ class="docutils literal"><span class="pre">)(</span></tt><em>t</em><sub>k-1</sub><tt
2108
+
2109
+ class="docutils literal"><span class="pre">)</span></tt>...<tt
2110
+
2111
+ class="docutils literal"><span class="pre">(</span></tt><em>t</em><sub>0</sub><tt
2112
+
2113
+ class="docutils literal"><span class="pre">)</span></tt></td>
2114
+ </tr>
2115
+ <tr>
2116
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_SEQ_HEAD(t)</span></tt></td>
2117
+ <td><em>t</em><sub>0</sub></td>
2118
+ </tr>
2119
+ <tr>
2120
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_SEQ_TAIL(t)</span></tt></td>
2121
+ <td><tt class="docutils literal"><span class="pre">(</span></tt><em>t</em><sub>1</sub><tt
2122
+
2123
+ class="docutils literal"><span class="pre">)(</span></tt><em>t</em><sub>2</sub><tt
2124
+
2125
+ class="docutils literal"><span class="pre">)</span></tt>...<tt
2126
+
2127
+ class="docutils literal"><span class="pre">(</span></tt><em>t</em><sub>k</sub><tt
2128
+
2129
+ class="docutils literal"><span class="pre">)</span></tt></td>
2130
+ </tr>
2131
+ <tr>
2132
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_SEQ_SIZE(t)</span></tt></td>
2133
+ <td><em>k+1</em></td>
2134
+ </tr>
2135
+ <tr>
2136
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_SEQ_SUBSEQ(t,i,m)</span></tt></td>
2137
+ <td><tt class="docutils literal"><span class="pre">(</span></tt><em>t</em><sub>i</sub><tt
2138
+
2139
+ class="docutils literal"><span class="pre">)(</span></tt><em>t</em><sub>i+1</sub><tt
2140
+
2141
+ class="docutils literal"><span class="pre">)</span></tt>...<tt
2142
+
2143
+ class="docutils literal"><span class="pre">(</span></tt><em>t</em><sub>i+m-1</sub><tt
2144
+
2145
+ class="docutils literal"><span class="pre">)</span></tt></td>
2146
+ </tr>
2147
+ <tr>
2148
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_SEQ_TO_ARRAY(t)</span></tt></td>
2149
+ <td><tt class="docutils literal"><span class="pre">(</span></tt><em>k+1</em>
2150
+ <tt class="docutils literal"><span class="pre">,(</span></tt><em>t</em><sub>0</sub><tt
2151
+
2152
+ class="docutils literal"><span class="pre">,</span></tt><em>t</em><sub>1</sub><tt
2153
+
2154
+ class="docutils literal"><span class="pre">,</span></tt>...<em>t</em><sub>k</sub><tt
2155
+
2156
+ class="docutils literal"><span class="pre">))</span></tt></td>
2157
+ </tr>
2158
+ <tr>
2159
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_SEQ_TO_TUPLE(t)</span></tt></td>
2160
+ <td><tt class="docutils literal"><span class="pre">(</span></tt><em>t</em><sub>0</sub><tt
2161
+
2162
+ class="docutils literal"><span class="pre">,</span></tt> <em>t</em><sub>1</sub><tt
2163
+
2164
+ class="docutils literal"><span class="pre">,</span></tt>...<em>t</em><sub>k</sub><tt
2165
+
2166
+ class="docutils literal"><span class="pre">)</span></tt></td>
2167
+ </tr>
2168
+ <tr>
2169
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_SEQ_TRANSFORM(f,</span>
2170
+ <span class="pre">x,</span> <span class="pre">t)</span></tt></td>
2171
+ <td><tt class="docutils literal"><span class="pre">(f(</span></tt><em>r</em><tt
2172
+
2173
+ class="docutils literal"><span class="pre">,x,</span></tt><em>t</em><sub>0</sub><tt
2174
+
2175
+ class="docutils literal"><span class="pre">))</span> <span
2176
+
2177
+ class="pre">(f(</span></tt><em>r</em><tt class="docutils literal"><span
2178
+
2179
+ class="pre">,x,</span></tt><em>t</em><sub>1</sub><tt class="docutils literal"><span
2180
+
2181
+ class="pre">))</span></tt>...<tt class="docutils literal"><span
2182
+
2183
+ class="pre">(f(</span></tt><em>r</em><tt class="docutils literal"><span
2184
+
2185
+ class="pre">,x,</span></tt><em>t</em><sub>k</sub><tt class="docutils literal"><span
2186
+
2187
+ class="pre">))</span></tt></td>
2188
+ </tr>
2189
+ </tbody>
2190
+ </table>
2191
+ <p>It's worth noting that while there is no upper limit on the
2192
+ length of a sequence, operations such as <tt class="docutils literal"><span
2193
+
2194
+ class="pre">BOOST_PP_SEQ_ELEM</span></tt> that take numeric
2195
+ arguments will only work with values up to 256.</p>
2196
+ </div>
2197
+ <div class="section" id="tuples">
2198
+ <h3><a name="tuples">A.4.5.2   Tuples</a></h3>
2199
+ <p>A <strong>tuple</strong> is a very simple data structure for
2200
+ which the library provides random access and a few other basic
2201
+ operations. A tuple takes the form of a parenthesized,
2202
+ comma-separated list of <em>macro arguments</em>. For example,
2203
+ this is a three-element tuple:</p>
2204
+ <pre class="literal-block">#define TUPLE3 (f(12), a + 1, foo)
2205
+ </pre>
2206
+ <p>The operations in the library's <tt class="docutils literal"><span
2207
+
2208
+ class="pre">tuple/</span></tt> subdirectory can handle tuples
2209
+ of up to 25 elements. For example, a tuple's <tt class="docutils literal"><span
2210
+
2211
+ class="pre">N</span></tt>th element can be accessed via <tt class="docutils literal"><span
2212
+
2213
+ class="pre">BOOST_PP_TUPLE_ELEM</span></tt>, as follows:</p>
2214
+ <pre class="literal-block"> // length index tuple
2215
+ BOOST_PP_TUPLE_ELEM( 3 , 1 , TUPLE3) // a + 1
2216
+ </pre>
2217
+ <!-- @def gen_id(id = 'a', hdr = 'tuple'):
2218
+ example.wrap(''' #include <boost/preprocessor/%s.hpp> int const %s = 0; int const x =''' % (hdr,id), ';')
2219
+ compile('all', pop = 1)gen_id() -->
2220
+ <p>Notice that we had to pass the tuple's length as the second
2221
+ argument to <tt class="docutils literal"><span class="pre">BOOST_PP_TUPLE_ELEM</span></tt>;
2222
+ in fact, <em>all</em> tuple operations require explicit
2223
+ specification of the tuple's length. We're not going to summarize
2224
+ the other four operations in the "tuple" group here—you can
2225
+ consult the Preprocessor library's electronic documentation for
2226
+ more details. We note, however, that sequences can be transformed
2227
+ into tuples with <tt class="docutils literal"><span class="pre">BOOST_PP_SEQ_TO_TUPLE</span></tt>,
2228
+ and nonempty tuples can be transformed back into sequences with <tt
2229
+
2230
+ class="docutils literal"><span class="pre">BOOST_PP_TUPLE_TO_SEQ</span></tt>.</p>
2231
+ <p>The greatest strength of tuples is that they conveniently take
2232
+ the same representation as a macro argument list:</p>
2233
+ <pre class="literal-block">#define FIRST_OF_THREE(a1,a2,a3) a1
2234
+ #define SECOND_OF_THREE(a1,a2,a3) a2
2235
+ #define THIRD_OF_THREE(a1,a2,a3) a3
2236
+
2237
+ // uses tuple as an argument list
2238
+ # define SELECT(selector, tuple) <strong>selector tuple</strong>
2239
+
2240
+ SELECT(THIRD_OF_THREE, TUPLE3) // foo
2241
+ </pre>
2242
+ <!-- @gen_id('foo') --> </div>
2243
+ <div class="section" id="arrays">
2244
+ <h3><a name="arrays">A.4.5.3   Arrays</a></h3>
2245
+ <p>An <strong>array</strong> is just a tuple containing a
2246
+ non-negative integer and a tuple of that length:</p>
2247
+ <pre class="literal-block">#define ARRAY3 ( 3, TUPLE3 )
2248
+ </pre>
2249
+ <p>Because an array carries its length around with it, the library's
2250
+ interface for operating on arrays is much more convenient than the
2251
+ one used for tuples:</p>
2252
+ <pre class="literal-block">BOOST_PP_ARRAY_ELEM(1, ARRAY3) // a + 1
2253
+ </pre>
2254
+ <!-- @gen_id(hdr = 'array')
2255
+ del stack[-2:] -->
2256
+ <p>The facilities for manipulating arrays of up to 25 elements are
2257
+ all in the library's <tt class="docutils literal"><span class="pre">array/</span></tt>
2258
+ subdirectory. They are summarized in Table A.6, where <tt class="docutils literal"><span
2259
+
2260
+ class="pre">a</span></tt> is the array <tt class="docutils literal"><span
2261
+
2262
+ class="pre">(</span></tt><em>k</em><tt class="docutils literal"><span
2263
+
2264
+ class="pre">,</span> <span class="pre">(</span></tt><em>a</em><sub>0</sub><tt
2265
+
2266
+ class="docutils literal"><span class="pre">,</span></tt><em>a</em><sub>1</sub><tt
2267
+
2268
+ class="docutils literal"><span class="pre">,...</span></tt><em>a</em><sub>k-1</sub><tt
2269
+
2270
+ class="docutils literal"><span class="pre">))</span></tt>.</p>
2271
+ <table border="1" class="docutils">
2272
+ <caption>Preprocessor Array Operations</caption> <colgroup> <col
2273
+
2274
+ width="52%" /> <col width="48%" /> </colgroup>
2275
+ <thead valign="bottom">
2276
+ <tr>
2277
+ <th>Expression</th>
2278
+ <th>Result</th>
2279
+ </tr>
2280
+ </thead>
2281
+ <tbody valign="top">
2282
+ <tr>
2283
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_ARRAY_DATA(a)</span></tt></td>
2284
+ <td><tt class="docutils literal"><span class="pre">(</span></tt><em>a</em><sub>0</sub><tt
2285
+
2286
+ class="docutils literal"><span class="pre">,</span></tt><em>a</em><sub>1</sub><tt
2287
+
2288
+ class="docutils literal"><span class="pre">,</span></tt>...
2289
+ <em>a</em><sub>k-1</sub><tt class="docutils literal"><span class="pre">)</span></tt></td>
2290
+ </tr>
2291
+ <tr>
2292
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_ARRAY_ELEM(i,a)</span></tt></td>
2293
+ <td><em>a</em><sub>i</sub></td>
2294
+ </tr>
2295
+ <tr>
2296
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_ARRAY_INSERT(a,</span>
2297
+ <span class="pre">i,</span> <span class="pre">tokens)</span></tt></td>
2298
+ <td><tt class="docutils literal"><span class="pre">(</span></tt><em>k+1</em><tt
2299
+
2300
+ class="docutils literal"><span class="pre">,(</span></tt><em>a</em><sub>0</sub><tt
2301
+
2302
+ class="docutils literal"><span class="pre">,</span></tt><em>a</em><sub>1</sub><tt
2303
+
2304
+ class="docutils literal"><span class="pre">,</span></tt>...<em>a</em><sub>i-1</sub><tt
2305
+
2306
+ class="docutils literal"><span class="pre">,</span> <span
2307
+
2308
+ class="pre">tokens,</span></tt> <em>a</em><sub>i</sub><tt
2309
+
2310
+ class="docutils literal"><span class="pre">,</span></tt><em>a</em><sub>i+1</sub><tt
2311
+
2312
+ class="docutils literal"><span class="pre">,</span></tt>...
2313
+ <em>a</em><sub>k-1</sub><tt class="docutils literal"><span class="pre">))</span></tt></td>
2314
+ </tr>
2315
+ <tr>
2316
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_ARRAY_POP_BACK(a)</span></tt></td>
2317
+ <td><tt class="docutils literal"><span class="pre">(</span></tt><em>k-1</em><tt
2318
+
2319
+ class="docutils literal"><span class="pre">,(</span></tt><em>a</em><sub>0</sub><tt
2320
+
2321
+ class="docutils literal"><span class="pre">,</span></tt><em>a</em><sub>1</sub><tt
2322
+
2323
+ class="docutils literal"><span class="pre">,</span></tt>...
2324
+ <em>a</em><sub>k-2</sub><tt class="docutils literal"><span class="pre">))</span></tt></td>
2325
+ </tr>
2326
+ <tr>
2327
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_ARRAY_POP_FRONT(a)</span></tt></td>
2328
+ <td><tt class="docutils literal"><span class="pre">(</span></tt><em>k-1</em><tt
2329
+
2330
+ class="docutils literal"><span class="pre">,(</span></tt><em>a</em><sub>1</sub><tt
2331
+
2332
+ class="docutils literal"><span class="pre">,</span></tt><em>a</em><sub>2</sub><tt
2333
+
2334
+ class="docutils literal"><span class="pre">,</span></tt>...
2335
+ <em>a</em><sub>k-1</sub><tt class="docutils literal"><span class="pre">))</span></tt></td>
2336
+ </tr>
2337
+ <tr>
2338
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_ARRAY_PUSH_BACK(a,</span>
2339
+ <span class="pre">tokens)</span></tt></td>
2340
+ <td><tt class="docutils literal"><span class="pre">(</span></tt><em>k+1</em><tt
2341
+
2342
+ class="docutils literal"><span class="pre">,(</span></tt><em>a</em><sub>0</sub><tt
2343
+
2344
+ class="docutils literal"><span class="pre">,</span></tt><em>a</em><sub>1</sub><tt
2345
+
2346
+ class="docutils literal"><span class="pre">,</span></tt>...
2347
+ <em>a</em><sub>k-1</sub><tt class="docutils literal"><span class="pre">,</span>
2348
+ <span class="pre">tokens))</span></tt></td>
2349
+ </tr>
2350
+ <tr>
2351
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_ARRAY_PUSH_FRONT(a,</span>
2352
+ <span class="pre">tokens)</span></tt></td>
2353
+ <td><tt class="docutils literal"><span class="pre">(</span></tt><em>k+1</em><tt
2354
+
2355
+ class="docutils literal"><span class="pre">,(tokens,</span></tt>
2356
+ <em>a</em><sub>1</sub><tt class="docutils literal"><span class="pre">,</span></tt><em>a</em><sub>2</sub><tt
2357
+
2358
+ class="docutils literal"><span class="pre">,</span></tt>...
2359
+ <em>a</em><sub>k-1</sub><tt class="docutils literal"><span class="pre">))</span></tt></td>
2360
+ </tr>
2361
+ <tr>
2362
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_ARRAY_REMOVE(a,</span>
2363
+ <span class="pre">i)</span></tt></td>
2364
+ <td><tt class="docutils literal"><span class="pre">(</span></tt><em>k-1</em><tt
2365
+
2366
+ class="docutils literal"><span class="pre">,(</span></tt><em>a</em><sub>0</sub><tt
2367
+
2368
+ class="docutils literal"><span class="pre">,</span></tt><em>a</em><sub>1</sub><tt
2369
+
2370
+ class="docutils literal"><span class="pre">,</span></tt>...
2371
+ <em>a</em><sub>i-1</sub><tt class="docutils literal"><span class="pre">,</span></tt><em>a</em><sub>i+1</sub><tt
2372
+
2373
+ class="docutils literal"><span class="pre">,</span></tt>...
2374
+ <em>a</em><sub>k-1</sub><tt class="docutils literal"><span class="pre">))</span></tt></td>
2375
+ </tr>
2376
+ <tr>
2377
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_ARRAY_REPLACE(a,</span>
2378
+ <span class="pre">i,</span> <span class="pre">tokens)</span></tt></td>
2379
+ <td><tt class="docutils literal"><span class="pre">(</span></tt><em>k</em><tt
2380
+
2381
+ class="docutils literal"><span class="pre">,(</span></tt><em>a</em><sub>0</sub><tt
2382
+
2383
+ class="docutils literal"><span class="pre">,</span></tt><em>a</em><sub>1</sub><tt
2384
+
2385
+ class="docutils literal"><span class="pre">,</span></tt>...
2386
+ <em>a</em><sub>i-1</sub><tt class="docutils literal"><span class="pre">,</span>
2387
+ <span class="pre">tokens,</span></tt> <em>a</em><sub>i+1</sub><tt
2388
+
2389
+ class="docutils literal"><span class="pre">,</span></tt>...
2390
+ <em>a</em><sub>k-1</sub><tt class="docutils literal"><span class="pre">))</span></tt></td>
2391
+ </tr>
2392
+ <tr>
2393
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_ARRAY_REVERSE(a)</span></tt></td>
2394
+ <td><tt class="docutils literal"><span class="pre">(</span></tt><em>k</em><tt
2395
+
2396
+ class="docutils literal"><span class="pre">,(</span></tt><em>a</em><sub>k-1</sub><tt
2397
+
2398
+ class="docutils literal"><span class="pre">,</span></tt><em>a</em><sub>k-2</sub><tt
2399
+
2400
+ class="docutils literal"><span class="pre">,</span></tt>...
2401
+ <em>a</em><sub>1</sub><tt class="docutils literal"><span class="pre">,</span></tt><em>a</em><sub>0</sub><tt
2402
+
2403
+ class="docutils literal"><span class="pre">))</span></tt></td>
2404
+ </tr>
2405
+ <tr>
2406
+ <td><tt class="docutils literal"><span class="pre">BOOST_PP_ARRAY_SIZE(a)</span></tt></td>
2407
+ <td><em>k</em></td>
2408
+ </tr>
2409
+ </tbody>
2410
+ </table>
2411
+ </div>
2412
+ <div class="section" id="lists">
2413
+ <h3><a name="lists">A.4.5.4   Lists</a></h3>
2414
+ <p>A <strong>list</strong> is a two-element tuple whose first
2415
+ element is the first element of the list, and whose second element
2416
+ is a list of the remaining elements, or <tt class="docutils literal"><span
2417
+
2418
+ class="pre">BOOST_PP_NIL</span></tt> if there are no remaining
2419
+ elements. Lists have access characteristics similar to those of a
2420
+ runtime linked list. Here is a three-element list:</p>
2421
+ <pre class="literal-block">#define LIST3 (<strong>f(12)</strong>, (<strong>a + 1</strong>, (<strong>foo</strong>, BOOST_PP_NIL)))
2422
+ </pre>
2423
+ <!-- @ignore() -->
2424
+ <p>The facilities for manipulating lists are all in the library's <tt
2425
+
2426
+ class="docutils literal"><span class="pre">list/</span></tt>
2427
+ subdirectory. Because the operations are a subset of those
2428
+ provided for sequences, we're not going to summarize them here—it
2429
+ should be easy to understand the list operations by reading the
2430
+ documentation on the basis of our coverage of sequences.</p>
2431
+ <p>Like sequences, lists have no fixed upper length bound. Unlike
2432
+ sequences, lists can also be empty. It's rare to need more than 25
2433
+ elements in a preprocessor data structure, and lists tend to be
2434
+ slower to manipulate and harder to read than any of the other
2435
+ structures, so they should normally be used only as a last resort.</p>
2436
+ </div>
2437
+ </div>
2438
+ </div>
2439
+ <div class="section" id="exercise">
2440
+ <h1><a name="exercise">A.5   Exercise</a></h1>
2441
+ <dl class="docutils">
2442
+ <dt>A-0</dt>
2443
+ <dd>Fully preprocessor-ize the <tt class="docutils literal"><span class="pre">tiny</span></tt>
2444
+ type sequence implemented in Chapter 5 so that all boilerplate code
2445
+ is eliminated and the maximum size of a <tt class="docutils literal"><span
2446
+
2447
+ class="pre">tiny</span></tt> sequence can be adjusted by
2448
+ changing <tt class="docutils literal"><span class="pre">TINY_MAX_SIZE</span></tt>.</dd>
2449
+ </dl>
2450
+ <!-- on hold:
2451
+ It isn't uncommon to need token-wise arithmetic operations forpurposes other than invoking Preprocessor Library repetitionmacros. For example, let's write a metafunction to generate
2452
+ function types from "signature" type sequences that specify thefunction's return and parameter types:: template <unsigned Size, class Signature>
2453
+ struct to_function_impl; template <class Signature> struct to_function
2454
+ : to_function_impl<mpl::size<Signature>::type, Signature> {};The challenge now is to implement ``to_function_impl``. For
2455
+ ``Size == 3``, an appropriate specialization might look like this:: template <class Signature> struct to_function_impl<3,Signature>
2456
+ { typedef mpl::begin<Signature>::type i0; typedef mpl::deref<i0>::type t0;
2457
+ typedef mpl::next<i0>::type i1; typedef mpl::deref<i1>::type t1; typedef mpl::next<i1>::type i2;
2458
+ typedef mpl::deref<i2>::type t2; typedef t0 type(t1,t2); };
2459
+ A local macro to generate a single ``to_function_impl``specialization would look something like this:
2460
+ .. parsed-literal:: #define to_function_impl_spec(size) \\ template <class Signature> \\
2461
+ struct to_function_impl<3,Signature> \\ { \\ typedef mpl::begin<Signature>::type i0; \\ typedef mpl::deref<i0>::type t0; \\
2462
+ \\ BOOST_PP_REPEAT_FROM_TO(1, size, to_function_t, ~) \\ \\ typedef t0 type(BOOST_PP_ENUM_SHIFTED_PARAMS(size,t)); \\
2463
+ }; #define to_function_t(z, n, unused) \\ typedef mpl::next<BOOST_PP_CAT(i,\ **BOOST_PP_DEC(n)**)>::type \\
2464
+ BOOST_PP_CAT(i,n); \\ \\ typedef mpl::deref<BOOST_PP_CAT(i,n)>::type BOOST_PP_CAT(t,n);
2465
+ We've used some new library macros above; here is a brief rundown:* ``BOOST_PP_REPEAT_FROM_TO`` is just like ``BOOST_PP_REPEAT``, except that it accepts an initial repetition index. Since every
2466
+ function has a return type, we don't need to worry about the case where ``Size == 0``.* ``BOOST_PP_ENUM_SHIFTED_PARAMS`` is just like
2467
+ ``BOOST_PP_ENUM_PARAMS``, except that repetition indices start at ``1`` instead of ``0``.* ``BOOST_PP_CAT`` implements token pasting; its two arguments are
2468
+ "glued" together into a single token. Since this is a general-purpose macro, it sits in ``cat.hpp`` at the top level of the library's directory tree. [#paste]_
2469
+ .. [#paste] The preprocessor's built-in token-pasting operator, ``##``, often yields surprising results by taking effect before its arguments have been expanded. By contrast, ``BOOST_PP_CAT`` delays concatenation until after its arguments have been fully
2470
+ evaluated.* Finally, though it only performs trivial arithmetic, ``BOOST_PP_DEC`` plays a crucial role in generating an
2471
+ appropriate prior iterator identifier for our own code in ``to_function_t``.If we didn't have ``BOOST_PP_REPEAT_FROM_TO`` at our disposal in
2472
+ the previous example, we might've had to use ``BOOST_PP_REPEAT``,which always starts iterating at ``0``. Consequently``to_function_t`` would've been responsible for producing thedeclarations of ``i0`` and ``t0`` as well as those of the other
2473
+ nested types. To manage that, it would need a way to selectdifferent expansions depending on the value of ``n``.In its ``control/`` directory, the Preprocessor Library supplies a
2474
+ macro ``BOOST_PP_IF(c,t,f)`` that fulfills a similar role to theone filled by ``mpl::if_``. Rewriting the example accordingly, weget:
2475
+ .. parsed-literal:: #define to_function_impl_spec(size) \\ template <class Signature> \\
2476
+ struct to_function_impl<3,Signature> \\ { \\ BOOST_PP_REPEAT_FROM_TO(1, size, to_function_t, ~) \\ \\
2477
+ typedef t0 type(BOOST_PP_ENUM_SHIFTED_PARAMS(size,t)); \\ }; #define to_function_t(z, n, unused) \\
2478
+ typedef BOOST_PP_IF( \\ n, \\ mpl::next<BOOST_PP_CAT(i,BOOST_PP_DEC(n))>::type, \\ typedef mpl::begin<Signature>::type i0; \\
2479
+ ) \\ BOOST_PP_CAT(i,n); \\ \\ typedef mpl::deref<BOOST_PP_CAT(i,n)>::type BOOST_PP_CAT(t,n);
2480
+ Although the formulation above will work, it does unnecessary workwhen ``n == 0``, evaluating the "true" branch of the conditionalonly to discard it. -->
2481
+ </div>
2482
+ </div>
2483
+ <hr class="docutils footer" />
2484
+ <div class="footer"> Generated on: 2005-10-17 19:34 UTC. Generated by <a class="reference"
2485
+
2486
+ href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference"
2487
+
2488
+ href="http://docutils.sourceforge.net/rst.html">reStructuredText</a>
2489
+ source. </div>
2490
+ </body>
2491
+ </html>
2492
+ <!--
2493
+ FILE ARCHIVED ON 19:59:10 Mar 30, 2013 AND RETRIEVED FROM THE INTERNET ARCHIVE ON 21:06:19 May 19, 2015. JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE.
2494
+ ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C. SECTION 108(a)(3)).-->