boost.cxx 0.0.2 → 1.90.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (327) hide show
  1. package/README.md +29 -2
  2. package/boost/cast.hpp +20 -0
  3. package/boost/numeric/conversion/bounds.hpp +24 -0
  4. package/boost/numeric/conversion/cast.hpp +61 -0
  5. package/boost/numeric/conversion/conversion_traits.hpp +32 -0
  6. package/boost/numeric/conversion/converter.hpp +68 -0
  7. package/boost/numeric/conversion/converter_policies.hpp +194 -0
  8. package/boost/numeric/conversion/detail/bounds.hpp +58 -0
  9. package/boost/numeric/conversion/detail/conversion_traits.hpp +97 -0
  10. package/boost/numeric/conversion/detail/converter.hpp +593 -0
  11. package/boost/numeric/conversion/detail/int_float_mixture.hpp +72 -0
  12. package/boost/numeric/conversion/detail/is_subranged.hpp +234 -0
  13. package/boost/numeric/conversion/detail/meta.hpp +120 -0
  14. package/boost/numeric/conversion/detail/numeric_cast_traits.hpp +138 -0
  15. package/boost/numeric/conversion/detail/old_numeric_cast.hpp +308 -0
  16. package/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp +1741 -0
  17. package/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp +347 -0
  18. package/boost/numeric/conversion/detail/sign_mixture.hpp +72 -0
  19. package/boost/numeric/conversion/detail/udt_builtin_mixture.hpp +69 -0
  20. package/boost/numeric/conversion/int_float_mixture.hpp +30 -0
  21. package/boost/numeric/conversion/int_float_mixture_enum.hpp +29 -0
  22. package/boost/numeric/conversion/is_subranged.hpp +27 -0
  23. package/boost/numeric/conversion/numeric_cast_traits.hpp +31 -0
  24. package/boost/numeric/conversion/sign_mixture.hpp +30 -0
  25. package/boost/numeric/conversion/sign_mixture_enum.hpp +29 -0
  26. package/boost/numeric/conversion/udt_builtin_mixture.hpp +28 -0
  27. package/boost/numeric/conversion/udt_builtin_mixture_enum.hpp +26 -0
  28. package/boost/numeric/interval/arith.hpp +305 -0
  29. package/boost/numeric/interval/arith2.hpp +304 -0
  30. package/boost/numeric/interval/arith3.hpp +69 -0
  31. package/boost/numeric/interval/checking.hpp +130 -0
  32. package/boost/numeric/interval/compare/certain.hpp +113 -0
  33. package/boost/numeric/interval/compare/explicit.hpp +248 -0
  34. package/boost/numeric/interval/compare/lexicographic.hpp +122 -0
  35. package/boost/numeric/interval/compare/possible.hpp +113 -0
  36. package/boost/numeric/interval/compare/set.hpp +101 -0
  37. package/boost/numeric/interval/compare/tribool.hpp +138 -0
  38. package/boost/numeric/interval/compare.hpp +19 -0
  39. package/boost/numeric/interval/constants.hpp +85 -0
  40. package/boost/numeric/interval/detail/alpha_rounding_control.hpp +113 -0
  41. package/boost/numeric/interval/detail/bcc_rounding_control.hpp +57 -0
  42. package/boost/numeric/interval/detail/bugs.hpp +48 -0
  43. package/boost/numeric/interval/detail/c99_rounding_control.hpp +50 -0
  44. package/boost/numeric/interval/detail/c99sub_rounding_control.hpp +43 -0
  45. package/boost/numeric/interval/detail/division.hpp +194 -0
  46. package/boost/numeric/interval/detail/ia64_rounding_control.hpp +83 -0
  47. package/boost/numeric/interval/detail/interval_prototype.hpp +41 -0
  48. package/boost/numeric/interval/detail/msvc_rounding_control.hpp +113 -0
  49. package/boost/numeric/interval/detail/ppc_rounding_control.hpp +99 -0
  50. package/boost/numeric/interval/detail/sparc_rounding_control.hpp +112 -0
  51. package/boost/numeric/interval/detail/test_input.hpp +76 -0
  52. package/boost/numeric/interval/detail/x86_rounding_control.hpp +108 -0
  53. package/boost/numeric/interval/detail/x86gcc_rounding_control.hpp +51 -0
  54. package/boost/numeric/interval/ext/integer.hpp +70 -0
  55. package/boost/numeric/interval/ext/x86_fast_rounding_control.hpp +70 -0
  56. package/boost/numeric/interval/hw_rounding.hpp +73 -0
  57. package/boost/numeric/interval/interval.hpp +450 -0
  58. package/boost/numeric/interval/io.hpp +41 -0
  59. package/boost/numeric/interval/limits.hpp +49 -0
  60. package/boost/numeric/interval/policies.hpp +75 -0
  61. package/boost/numeric/interval/rounded_arith.hpp +120 -0
  62. package/boost/numeric/interval/rounded_transc.hpp +140 -0
  63. package/boost/numeric/interval/rounding.hpp +101 -0
  64. package/boost/numeric/interval/transc.hpp +232 -0
  65. package/boost/numeric/interval/utility.hpp +335 -0
  66. package/boost/numeric/interval/utility_fwd.hpp +172 -0
  67. package/boost/numeric/interval.hpp +32 -0
  68. package/boost/numeric/odeint/algebra/algebra_dispatcher.hpp +86 -0
  69. package/boost/numeric/odeint/algebra/array_algebra.hpp +293 -0
  70. package/boost/numeric/odeint/algebra/default_operations.hpp +599 -0
  71. package/boost/numeric/odeint/algebra/detail/extract_value_type.hpp +51 -0
  72. package/boost/numeric/odeint/algebra/detail/for_each.hpp +165 -0
  73. package/boost/numeric/odeint/algebra/detail/macros.hpp +35 -0
  74. package/boost/numeric/odeint/algebra/detail/norm_inf.hpp +46 -0
  75. package/boost/numeric/odeint/algebra/fusion_algebra.hpp +216 -0
  76. package/boost/numeric/odeint/algebra/fusion_algebra_dispatcher.hpp +48 -0
  77. package/boost/numeric/odeint/algebra/multi_array_algebra.hpp +146 -0
  78. package/boost/numeric/odeint/algebra/norm_result_type.hpp +33 -0
  79. package/boost/numeric/odeint/algebra/operations_dispatcher.hpp +41 -0
  80. package/boost/numeric/odeint/algebra/range_algebra.hpp +142 -0
  81. package/boost/numeric/odeint/algebra/vector_space_algebra.hpp +175 -0
  82. package/boost/numeric/odeint/config.hpp +53 -0
  83. package/boost/numeric/odeint/external/blaze/blaze_algebra_dispatcher.hpp +55 -0
  84. package/boost/numeric/odeint/external/blaze/blaze_resize.hpp +64 -0
  85. package/boost/numeric/odeint/external/compute/compute.hpp +27 -0
  86. package/boost/numeric/odeint/external/compute/compute_algebra.hpp +65 -0
  87. package/boost/numeric/odeint/external/compute/compute_algebra_dispatcher.hpp +41 -0
  88. package/boost/numeric/odeint/external/compute/compute_operations.hpp +198 -0
  89. package/boost/numeric/odeint/external/compute/compute_operations_dispatcher.hpp +44 -0
  90. package/boost/numeric/odeint/external/compute/compute_resize.hpp +92 -0
  91. package/boost/numeric/odeint/external/eigen/eigen.hpp +27 -0
  92. package/boost/numeric/odeint/external/eigen/eigen_algebra.hpp +98 -0
  93. package/boost/numeric/odeint/external/eigen/eigen_algebra_dispatcher.hpp +49 -0
  94. package/boost/numeric/odeint/external/eigen/eigen_resize.hpp +103 -0
  95. package/boost/numeric/odeint/external/gsl/gsl_wrapper.hpp +228 -0
  96. package/boost/numeric/odeint/external/mkl/mkl_operations.hpp +181 -0
  97. package/boost/numeric/odeint/external/mpi/mpi.hpp +25 -0
  98. package/boost/numeric/odeint/external/mpi/mpi_nested_algebra.hpp +62 -0
  99. package/boost/numeric/odeint/external/mpi/mpi_state.hpp +113 -0
  100. package/boost/numeric/odeint/external/mpi/mpi_vector_state.hpp +95 -0
  101. package/boost/numeric/odeint/external/mtl4/implicit_euler_mtl4.hpp +161 -0
  102. package/boost/numeric/odeint/external/mtl4/mtl4.hpp +23 -0
  103. package/boost/numeric/odeint/external/mtl4/mtl4_algebra_dispatcher.hpp +99 -0
  104. package/boost/numeric/odeint/external/mtl4/mtl4_resize.hpp +134 -0
  105. package/boost/numeric/odeint/external/nt2/nt2_algebra_dispatcher.hpp +25 -0
  106. package/boost/numeric/odeint/external/nt2/nt2_copy.hpp +33 -0
  107. package/boost/numeric/odeint/external/nt2/nt2_norm_inf.hpp +31 -0
  108. package/boost/numeric/odeint/external/nt2/nt2_resize.hpp +54 -0
  109. package/boost/numeric/odeint/external/openmp/openmp.hpp +31 -0
  110. package/boost/numeric/odeint/external/openmp/openmp_nested_algebra.hpp +281 -0
  111. package/boost/numeric/odeint/external/openmp/openmp_range_algebra.hpp +276 -0
  112. package/boost/numeric/odeint/external/openmp/openmp_state.hpp +172 -0
  113. package/boost/numeric/odeint/external/thrust/thrust.hpp +27 -0
  114. package/boost/numeric/odeint/external/thrust/thrust_algebra.hpp +217 -0
  115. package/boost/numeric/odeint/external/thrust/thrust_algebra_dispatcher.hpp +118 -0
  116. package/boost/numeric/odeint/external/thrust/thrust_operations.hpp +233 -0
  117. package/boost/numeric/odeint/external/thrust/thrust_operations_dispatcher.hpp +118 -0
  118. package/boost/numeric/odeint/external/thrust/thrust_resize.hpp +197 -0
  119. package/boost/numeric/odeint/external/vexcl/vexcl.hpp +28 -0
  120. package/boost/numeric/odeint/external/vexcl/vexcl_abs.hpp +61 -0
  121. package/boost/numeric/odeint/external/vexcl/vexcl_algebra_dispatcher.hpp +51 -0
  122. package/boost/numeric/odeint/external/vexcl/vexcl_copy.hpp +55 -0
  123. package/boost/numeric/odeint/external/vexcl/vexcl_norm_inf.hpp +68 -0
  124. package/boost/numeric/odeint/external/vexcl/vexcl_resize.hpp +96 -0
  125. package/boost/numeric/odeint/external/vexcl/vexcl_same_instance.hpp +58 -0
  126. package/boost/numeric/odeint/external/viennacl/viennacl_operations.hpp +226 -0
  127. package/boost/numeric/odeint/external/viennacl/viennacl_resize.hpp +68 -0
  128. package/boost/numeric/odeint/integrate/check_adapter.hpp +222 -0
  129. package/boost/numeric/odeint/integrate/detail/functors.hpp +70 -0
  130. package/boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp +161 -0
  131. package/boost/numeric/odeint/integrate/detail/integrate_const.hpp +167 -0
  132. package/boost/numeric/odeint/integrate/detail/integrate_n_steps.hpp +161 -0
  133. package/boost/numeric/odeint/integrate/detail/integrate_times.hpp +179 -0
  134. package/boost/numeric/odeint/integrate/integrate.hpp +133 -0
  135. package/boost/numeric/odeint/integrate/integrate_adaptive.hpp +127 -0
  136. package/boost/numeric/odeint/integrate/integrate_const.hpp +195 -0
  137. package/boost/numeric/odeint/integrate/integrate_n_steps.hpp +178 -0
  138. package/boost/numeric/odeint/integrate/integrate_times.hpp +220 -0
  139. package/boost/numeric/odeint/integrate/max_step_checker.hpp +114 -0
  140. package/boost/numeric/odeint/integrate/null_observer.hpp +38 -0
  141. package/boost/numeric/odeint/integrate/observer_collection.hpp +55 -0
  142. package/boost/numeric/odeint/iterator/adaptive_iterator.hpp +183 -0
  143. package/boost/numeric/odeint/iterator/adaptive_time_iterator.hpp +175 -0
  144. package/boost/numeric/odeint/iterator/const_step_iterator.hpp +180 -0
  145. package/boost/numeric/odeint/iterator/const_step_time_iterator.hpp +173 -0
  146. package/boost/numeric/odeint/iterator/detail/ode_iterator_base.hpp +199 -0
  147. package/boost/numeric/odeint/iterator/impl/adaptive_iterator_impl.hpp +251 -0
  148. package/boost/numeric/odeint/iterator/impl/const_step_iterator_impl.hpp +228 -0
  149. package/boost/numeric/odeint/iterator/impl/n_step_iterator_impl.hpp +239 -0
  150. package/boost/numeric/odeint/iterator/impl/times_iterator_impl.hpp +369 -0
  151. package/boost/numeric/odeint/iterator/integrate/detail/functors.hpp +70 -0
  152. package/boost/numeric/odeint/iterator/integrate/detail/integrate_adaptive.hpp +121 -0
  153. package/boost/numeric/odeint/iterator/integrate/detail/integrate_const.hpp +111 -0
  154. package/boost/numeric/odeint/iterator/integrate/detail/integrate_n_steps.hpp +107 -0
  155. package/boost/numeric/odeint/iterator/integrate/detail/integrate_times.hpp +67 -0
  156. package/boost/numeric/odeint/iterator/integrate/integrate.hpp +111 -0
  157. package/boost/numeric/odeint/iterator/integrate/integrate_adaptive.hpp +127 -0
  158. package/boost/numeric/odeint/iterator/integrate/integrate_const.hpp +158 -0
  159. package/boost/numeric/odeint/iterator/integrate/integrate_n_steps.hpp +123 -0
  160. package/boost/numeric/odeint/iterator/integrate/integrate_times.hpp +131 -0
  161. package/boost/numeric/odeint/iterator/integrate/null_observer.hpp +38 -0
  162. package/boost/numeric/odeint/iterator/integrate/observer_collection.hpp +55 -0
  163. package/boost/numeric/odeint/iterator/n_step_iterator.hpp +168 -0
  164. package/boost/numeric/odeint/iterator/n_step_time_iterator.hpp +169 -0
  165. package/boost/numeric/odeint/iterator/times_iterator.hpp +189 -0
  166. package/boost/numeric/odeint/iterator/times_time_iterator.hpp +193 -0
  167. package/boost/numeric/odeint/stepper/adams_bashforth.hpp +418 -0
  168. package/boost/numeric/odeint/stepper/adams_bashforth_moulton.hpp +313 -0
  169. package/boost/numeric/odeint/stepper/adams_moulton.hpp +201 -0
  170. package/boost/numeric/odeint/stepper/adaptive_adams_bashforth_moulton.hpp +237 -0
  171. package/boost/numeric/odeint/stepper/base/algebra_stepper_base.hpp +91 -0
  172. package/boost/numeric/odeint/stepper/base/explicit_error_stepper_base.hpp +588 -0
  173. package/boost/numeric/odeint/stepper/base/explicit_error_stepper_fsal_base.hpp +677 -0
  174. package/boost/numeric/odeint/stepper/base/explicit_stepper_base.hpp +415 -0
  175. package/boost/numeric/odeint/stepper/base/symplectic_rkn_stepper_base.hpp +431 -0
  176. package/boost/numeric/odeint/stepper/bulirsch_stoer.hpp +642 -0
  177. package/boost/numeric/odeint/stepper/bulirsch_stoer_dense_out.hpp +838 -0
  178. package/boost/numeric/odeint/stepper/controlled_adams_bashforth_moulton.hpp +322 -0
  179. package/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp +1018 -0
  180. package/boost/numeric/odeint/stepper/controlled_step_result.hpp +42 -0
  181. package/boost/numeric/odeint/stepper/dense_output_runge_kutta.hpp +476 -0
  182. package/boost/numeric/odeint/stepper/detail/adams_bashforth_call_algebra.hpp +148 -0
  183. package/boost/numeric/odeint/stepper/detail/adams_bashforth_coefficients.hpp +168 -0
  184. package/boost/numeric/odeint/stepper/detail/adams_moulton_call_algebra.hpp +148 -0
  185. package/boost/numeric/odeint/stepper/detail/adams_moulton_coefficients.hpp +168 -0
  186. package/boost/numeric/odeint/stepper/detail/adaptive_adams_coefficients.hpp +207 -0
  187. package/boost/numeric/odeint/stepper/detail/generic_rk_algorithm.hpp +247 -0
  188. package/boost/numeric/odeint/stepper/detail/generic_rk_call_algebra.hpp +263 -0
  189. package/boost/numeric/odeint/stepper/detail/generic_rk_operations.hpp +252 -0
  190. package/boost/numeric/odeint/stepper/detail/pid_step_adjuster.hpp +199 -0
  191. package/boost/numeric/odeint/stepper/detail/pid_step_adjuster_coefficients.hpp +180 -0
  192. package/boost/numeric/odeint/stepper/detail/rotating_buffer.hpp +84 -0
  193. package/boost/numeric/odeint/stepper/euler.hpp +166 -0
  194. package/boost/numeric/odeint/stepper/explicit_error_generic_rk.hpp +255 -0
  195. package/boost/numeric/odeint/stepper/explicit_generic_rk.hpp +246 -0
  196. package/boost/numeric/odeint/stepper/extrapolation_stepper.hpp +288 -0
  197. package/boost/numeric/odeint/stepper/generation/generation_controlled_adams_bashforth_moulton.hpp +59 -0
  198. package/boost/numeric/odeint/stepper/generation/generation_controlled_runge_kutta.hpp +61 -0
  199. package/boost/numeric/odeint/stepper/generation/generation_dense_output_runge_kutta.hpp +65 -0
  200. package/boost/numeric/odeint/stepper/generation/generation_rosenbrock4.hpp +79 -0
  201. package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54.hpp +47 -0
  202. package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54_classic.hpp +48 -0
  203. package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_dopri5.hpp +56 -0
  204. package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_fehlberg78.hpp +46 -0
  205. package/boost/numeric/odeint/stepper/generation/make_controlled.hpp +103 -0
  206. package/boost/numeric/odeint/stepper/generation/make_dense_output.hpp +100 -0
  207. package/boost/numeric/odeint/stepper/generation.hpp +37 -0
  208. package/boost/numeric/odeint/stepper/implicit_euler.hpp +170 -0
  209. package/boost/numeric/odeint/stepper/modified_midpoint.hpp +315 -0
  210. package/boost/numeric/odeint/stepper/rosenbrock4.hpp +346 -0
  211. package/boost/numeric/odeint/stepper/rosenbrock4_controller.hpp +240 -0
  212. package/boost/numeric/odeint/stepper/rosenbrock4_dense_output.hpp +204 -0
  213. package/boost/numeric/odeint/stepper/runge_kutta4.hpp +181 -0
  214. package/boost/numeric/odeint/stepper/runge_kutta4_classic.hpp +232 -0
  215. package/boost/numeric/odeint/stepper/runge_kutta_cash_karp54.hpp +231 -0
  216. package/boost/numeric/odeint/stepper/runge_kutta_cash_karp54_classic.hpp +289 -0
  217. package/boost/numeric/odeint/stepper/runge_kutta_dopri5.hpp +403 -0
  218. package/boost/numeric/odeint/stepper/runge_kutta_fehlberg78.hpp +374 -0
  219. package/boost/numeric/odeint/stepper/stepper_categories.hpp +66 -0
  220. package/boost/numeric/odeint/stepper/symplectic_euler.hpp +136 -0
  221. package/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_m4_mclachlan.hpp +160 -0
  222. package/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_mclachlan.hpp +162 -0
  223. package/boost/numeric/odeint/stepper/velocity_verlet.hpp +375 -0
  224. package/boost/numeric/odeint/tools/assert.hpp +30 -0
  225. package/boost/numeric/odeint/tools/is_standalone.hpp +21 -0
  226. package/boost/numeric/odeint/tools/traits.hpp +39 -0
  227. package/boost/numeric/odeint/util/bind.hpp +35 -0
  228. package/boost/numeric/odeint/util/copy.hpp +88 -0
  229. package/boost/numeric/odeint/util/detail/is_range.hpp +127 -0
  230. package/boost/numeric/odeint/util/detail/less_with_sign.hpp +78 -0
  231. package/boost/numeric/odeint/util/is_pair.hpp +42 -0
  232. package/boost/numeric/odeint/util/is_resizeable.hpp +84 -0
  233. package/boost/numeric/odeint/util/multi_array_adaption.hpp +131 -0
  234. package/boost/numeric/odeint/util/n_ary_helper.hpp +96 -0
  235. package/boost/numeric/odeint/util/odeint_error.hpp +77 -0
  236. package/boost/numeric/odeint/util/resize.hpp +120 -0
  237. package/boost/numeric/odeint/util/resizer.hpp +94 -0
  238. package/boost/numeric/odeint/util/same_instance.hpp +56 -0
  239. package/boost/numeric/odeint/util/same_size.hpp +117 -0
  240. package/boost/numeric/odeint/util/split.hpp +64 -0
  241. package/boost/numeric/odeint/util/split_adaptor.hpp +103 -0
  242. package/boost/numeric/odeint/util/state_wrapper.hpp +50 -0
  243. package/boost/numeric/odeint/util/stepper_traits.hpp +63 -0
  244. package/boost/numeric/odeint/util/ublas_matrix_expression.patch +6 -0
  245. package/boost/numeric/odeint/util/ublas_wrapper.hpp +297 -0
  246. package/boost/numeric/odeint/util/unit_helper.hpp +151 -0
  247. package/boost/numeric/odeint/util/unwrap_reference.hpp +141 -0
  248. package/boost/numeric/odeint/version.hpp +55 -0
  249. package/boost/numeric/odeint.hpp +87 -0
  250. package/boost/numeric/ublas/assignment.hpp +1288 -0
  251. package/boost/numeric/ublas/banded.hpp +2372 -0
  252. package/boost/numeric/ublas/blas.hpp +499 -0
  253. package/boost/numeric/ublas/detail/concepts.hpp +1465 -0
  254. package/boost/numeric/ublas/detail/config.hpp +304 -0
  255. package/boost/numeric/ublas/detail/definitions.hpp +212 -0
  256. package/boost/numeric/ublas/detail/documentation.hpp +33 -0
  257. package/boost/numeric/ublas/detail/duff.hpp +56 -0
  258. package/boost/numeric/ublas/detail/iterator.hpp +1448 -0
  259. package/boost/numeric/ublas/detail/matrix_assign.hpp +1785 -0
  260. package/boost/numeric/ublas/detail/raw.hpp +878 -0
  261. package/boost/numeric/ublas/detail/returntype_deduction.hpp +174 -0
  262. package/boost/numeric/ublas/detail/temporary.hpp +33 -0
  263. package/boost/numeric/ublas/detail/vector_assign.hpp +609 -0
  264. package/boost/numeric/ublas/doxydoc.hpp +58 -0
  265. package/boost/numeric/ublas/exception.hpp +297 -0
  266. package/boost/numeric/ublas/experimental/sparse_view.hpp +317 -0
  267. package/boost/numeric/ublas/expression_types.hpp +506 -0
  268. package/boost/numeric/ublas/functional.hpp +2112 -0
  269. package/boost/numeric/ublas/fwd.hpp +229 -0
  270. package/boost/numeric/ublas/hermitian.hpp +2633 -0
  271. package/boost/numeric/ublas/io.hpp +355 -0
  272. package/boost/numeric/ublas/lu.hpp +350 -0
  273. package/boost/numeric/ublas/matrix.hpp +6013 -0
  274. package/boost/numeric/ublas/matrix_expression.hpp +5693 -0
  275. package/boost/numeric/ublas/matrix_proxy.hpp +5457 -0
  276. package/boost/numeric/ublas/matrix_sparse.hpp +5773 -0
  277. package/boost/numeric/ublas/matrix_vector.hpp +406 -0
  278. package/boost/numeric/ublas/opencl/elementwise.hpp +508 -0
  279. package/boost/numeric/ublas/opencl/library.hpp +38 -0
  280. package/boost/numeric/ublas/opencl/matrix.hpp +123 -0
  281. package/boost/numeric/ublas/opencl/misc.hpp +182 -0
  282. package/boost/numeric/ublas/opencl/operations.hpp +18 -0
  283. package/boost/numeric/ublas/opencl/prod.hpp +364 -0
  284. package/boost/numeric/ublas/opencl/transpose.hpp +142 -0
  285. package/boost/numeric/ublas/opencl/vector.hpp +90 -0
  286. package/boost/numeric/ublas/opencl.hpp +16 -0
  287. package/boost/numeric/ublas/operation/begin.hpp +318 -0
  288. package/boost/numeric/ublas/operation/c_array.hpp +41 -0
  289. package/boost/numeric/ublas/operation/end.hpp +318 -0
  290. package/boost/numeric/ublas/operation/num_columns.hpp +45 -0
  291. package/boost/numeric/ublas/operation/num_rows.hpp +44 -0
  292. package/boost/numeric/ublas/operation/size.hpp +350 -0
  293. package/boost/numeric/ublas/operation.hpp +830 -0
  294. package/boost/numeric/ublas/operation_blocked.hpp +266 -0
  295. package/boost/numeric/ublas/operation_sparse.hpp +198 -0
  296. package/boost/numeric/ublas/operations.hpp +26 -0
  297. package/boost/numeric/ublas/storage.hpp +2131 -0
  298. package/boost/numeric/ublas/storage_sparse.hpp +578 -0
  299. package/boost/numeric/ublas/symmetric.hpp +2309 -0
  300. package/boost/numeric/ublas/tags.hpp +37 -0
  301. package/boost/numeric/ublas/tensor/algorithms.hpp +345 -0
  302. package/boost/numeric/ublas/tensor/expression.hpp +181 -0
  303. package/boost/numeric/ublas/tensor/expression_evaluation.hpp +288 -0
  304. package/boost/numeric/ublas/tensor/extents.hpp +335 -0
  305. package/boost/numeric/ublas/tensor/functions.hpp +558 -0
  306. package/boost/numeric/ublas/tensor/index.hpp +89 -0
  307. package/boost/numeric/ublas/tensor/multi_index.hpp +110 -0
  308. package/boost/numeric/ublas/tensor/multi_index_utility.hpp +364 -0
  309. package/boost/numeric/ublas/tensor/multiplication.hpp +945 -0
  310. package/boost/numeric/ublas/tensor/operators_arithmetic.hpp +244 -0
  311. package/boost/numeric/ublas/tensor/operators_comparison.hpp +175 -0
  312. package/boost/numeric/ublas/tensor/ostream.hpp +122 -0
  313. package/boost/numeric/ublas/tensor/storage_traits.hpp +84 -0
  314. package/boost/numeric/ublas/tensor/strides.hpp +251 -0
  315. package/boost/numeric/ublas/tensor/tensor.hpp +734 -0
  316. package/boost/numeric/ublas/tensor.hpp +26 -0
  317. package/boost/numeric/ublas/traits/c_array.hpp +110 -0
  318. package/boost/numeric/ublas/traits/const_iterator_type.hpp +127 -0
  319. package/boost/numeric/ublas/traits/iterator_type.hpp +126 -0
  320. package/boost/numeric/ublas/traits.hpp +753 -0
  321. package/boost/numeric/ublas/triangular.hpp +2775 -0
  322. package/boost/numeric/ublas/vector.hpp +2947 -0
  323. package/boost/numeric/ublas/vector_expression.hpp +1762 -0
  324. package/boost/numeric/ublas/vector_of_vector.hpp +1347 -0
  325. package/boost/numeric/ublas/vector_proxy.hpp +1697 -0
  326. package/boost/numeric/ublas/vector_sparse.hpp +2246 -0
  327. package/package.json +3 -7
@@ -0,0 +1,593 @@
1
+ // (c) Copyright Fernando Luis Cacciola Carballal 2000-2004
2
+ // Use, modification, and distribution is subject to the Boost Software
3
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
4
+ // http://www.boost.org/LICENSE_1_0.txt)
5
+
6
+ // See library home page at http://www.boost.org/libs/numeric/conversion
7
+ //
8
+ // Contact the author at: fernando_cacciola@hotmail.com
9
+ //
10
+ #ifndef BOOST_NUMERIC_CONVERSION_DETAIL_CONVERTER_FLC_12NOV2002_HPP
11
+ #define BOOST_NUMERIC_CONVERSION_DETAIL_CONVERTER_FLC_12NOV2002_HPP
12
+
13
+ #include <functional>
14
+
15
+ #include "boost/numeric/conversion/detail/meta.hpp"
16
+ #include "boost/numeric/conversion/detail/conversion_traits.hpp"
17
+ #include "boost/numeric/conversion/bounds.hpp"
18
+
19
+ #include "boost/type_traits/is_same.hpp"
20
+
21
+ #include "boost/mpl/integral_c.hpp"
22
+
23
+ namespace boost { namespace numeric { namespace convdetail
24
+ {
25
+ // Integral Constants representing rounding modes
26
+ typedef mpl::integral_c<std::float_round_style, std::round_toward_zero> round2zero_c ;
27
+ typedef mpl::integral_c<std::float_round_style, std::round_to_nearest> round2nearest_c ;
28
+ typedef mpl::integral_c<std::float_round_style, std::round_toward_infinity> round2inf_c ;
29
+ typedef mpl::integral_c<std::float_round_style, std::round_toward_neg_infinity> round2neg_inf_c ;
30
+
31
+ // Metafunction:
32
+ //
33
+ // for_round_style<RoundStyle,RoundToZero,RoundToNearest,RoundToInf,RoundToNegInf>::type
34
+ //
35
+ // {RoundStyle} Integral Constant specifying a round style as declared above.
36
+ // {RoundToZero,RoundToNearest,RoundToInf,RoundToNegInf} arbitrary types.
37
+ //
38
+ // Selects one of the 4 types according to the value of RoundStyle.
39
+ //
40
+ template<class RoundStyle,class RoundToZero,class RoundToNearest,class RoundToInf,class RoundToNegInf>
41
+ struct for_round_style
42
+ {
43
+ typedef ct_switch4<RoundStyle
44
+ , round2zero_c, round2nearest_c, round2inf_c // round2neg_inf_c
45
+ , RoundToZero , RoundToNearest , RoundToInf , RoundToNegInf
46
+ > selector ;
47
+
48
+ typedef typename selector::type type ;
49
+ } ;
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+
67
+
68
+ //--------------------------------------------------------------------------
69
+ // Range Checking Logic.
70
+ //
71
+ // The range checking logic is built up by combining 1 or 2 predicates.
72
+ // Each predicate is encapsulated in a template class and exposes
73
+ // the static member function 'apply'.
74
+ //
75
+ //--------------------------------------------------------------------------
76
+
77
+
78
+ // Because a particular logic can combine either 1 or two predicates, the following
79
+ // tags are used to allow the predicate applier to receive 2 preds, but optimize away
80
+ // one of them if it is 'non-applicable'
81
+ struct non_applicable { typedef mpl::false_ do_apply ; } ;
82
+ struct applicable { typedef mpl::true_ do_apply ; } ;
83
+
84
+
85
+ //--------------------------------------------------------------------------
86
+ //
87
+ // Range Checking Logic implementations.
88
+ //
89
+ // The following classes, collectivelly named 'Predicates', are instantiated within
90
+ // the corresponding range checkers.
91
+ // Their static member function 'apply' is called to perform the actual range checking logic.
92
+ //--------------------------------------------------------------------------
93
+
94
+ // s < Lowest(T) ? cNegOverflow : cInRange
95
+ //
96
+ template<class Traits>
97
+ struct LT_LoT : applicable
98
+ {
99
+ typedef typename Traits::target_type T ;
100
+ typedef typename Traits::source_type S ;
101
+ typedef typename Traits::argument_type argument_type ;
102
+
103
+ static range_check_result apply ( argument_type s )
104
+ {
105
+ return s < static_cast<S>(bounds<T>::lowest()) ? cNegOverflow : cInRange ;
106
+ }
107
+ } ;
108
+
109
+ // s < 0 ? cNegOverflow : cInRange
110
+ //
111
+ template<class Traits>
112
+ struct LT_Zero : applicable
113
+ {
114
+ typedef typename Traits::source_type S ;
115
+ typedef typename Traits::argument_type argument_type ;
116
+
117
+ static range_check_result apply ( argument_type s )
118
+ {
119
+ return s < static_cast<S>(0) ? cNegOverflow : cInRange ;
120
+ }
121
+ } ;
122
+
123
+ // s <= Lowest(T)-1 ? cNegOverflow : cInRange
124
+ //
125
+ template<class Traits>
126
+ struct LE_PrevLoT : applicable
127
+ {
128
+ typedef typename Traits::target_type T ;
129
+ typedef typename Traits::source_type S ;
130
+ typedef typename Traits::argument_type argument_type ;
131
+
132
+ static range_check_result apply ( argument_type s )
133
+ {
134
+ return s <= static_cast<S>(bounds<T>::lowest()) - static_cast<S>(1.0)
135
+ ? cNegOverflow : cInRange ;
136
+ }
137
+ } ;
138
+
139
+ // s < Lowest(T)-0.5 ? cNegOverflow : cInRange
140
+ //
141
+ template<class Traits>
142
+ struct LT_HalfPrevLoT : applicable
143
+ {
144
+ typedef typename Traits::target_type T ;
145
+ typedef typename Traits::source_type S ;
146
+ typedef typename Traits::argument_type argument_type ;
147
+
148
+ static range_check_result apply ( argument_type s )
149
+ {
150
+ return s < static_cast<S>(bounds<T>::lowest()) - static_cast<S>(0.5)
151
+ ? cNegOverflow : cInRange ;
152
+ }
153
+ } ;
154
+
155
+ // s > Highest(T) ? cPosOverflow : cInRange
156
+ //
157
+ template<class Traits>
158
+ struct GT_HiT : applicable
159
+ {
160
+ typedef typename Traits::target_type T ;
161
+ typedef typename Traits::source_type S ;
162
+ typedef typename Traits::argument_type argument_type ;
163
+
164
+ static range_check_result apply ( argument_type s )
165
+ {
166
+ return s > static_cast<S>(bounds<T>::highest())
167
+ ? cPosOverflow : cInRange ;
168
+ }
169
+ } ;
170
+
171
+ // s >= Lowest(T) + 1 ? cPosOverflow : cInRange
172
+ //
173
+ template<class Traits>
174
+ struct GE_SuccHiT : applicable
175
+ {
176
+ typedef typename Traits::target_type T ;
177
+ typedef typename Traits::source_type S ;
178
+ typedef typename Traits::argument_type argument_type ;
179
+
180
+ static range_check_result apply ( argument_type s )
181
+ {
182
+ return s >= static_cast<S>(bounds<T>::highest()) + static_cast<S>(1.0)
183
+ ? cPosOverflow : cInRange ;
184
+ }
185
+ } ;
186
+
187
+ // s >= Lowest(T) + 0.5 ? cPosgOverflow : cInRange
188
+ //
189
+ template<class Traits>
190
+ struct GT_HalfSuccHiT : applicable
191
+ {
192
+ typedef typename Traits::target_type T ;
193
+ typedef typename Traits::source_type S ;
194
+ typedef typename Traits::argument_type argument_type ;
195
+
196
+ static range_check_result apply ( argument_type s )
197
+ {
198
+ return s >= static_cast<S>(bounds<T>::highest()) + static_cast<S>(0.5)
199
+ ? cPosOverflow : cInRange ;
200
+ }
201
+ } ;
202
+
203
+
204
+ //--------------------------------------------------------------------------
205
+ //
206
+ // Predicate Combiner.
207
+ //
208
+ // This helper classes are used to possibly combine the range checking logic
209
+ // individually performed by the predicates
210
+ //
211
+ //--------------------------------------------------------------------------
212
+
213
+
214
+ // Applies both predicates: first 'PredA', and if it equals 'cInRange', 'PredB'
215
+ template<class PredA, class PredB>
216
+ struct applyBoth
217
+ {
218
+ typedef typename PredA::argument_type argument_type ;
219
+
220
+ static range_check_result apply ( argument_type s )
221
+ {
222
+ range_check_result r = PredA::apply(s) ;
223
+ if ( r == cInRange )
224
+ r = PredB::apply(s);
225
+ return r ;
226
+ }
227
+ } ;
228
+
229
+ template<class PredA, class PredB>
230
+ struct combine
231
+ {
232
+ typedef applyBoth<PredA,PredB> Both ;
233
+ typedef void NNone ; // 'None' is defined as a macro in (/usr/X11R6/include/X11/X.h)
234
+
235
+ typedef typename PredA::do_apply do_applyA ;
236
+ typedef typename PredB::do_apply do_applyB ;
237
+
238
+ typedef typename for_both<do_applyA, do_applyB, Both, PredA, PredB, NNone>::type type ;
239
+ } ;
240
+
241
+
242
+
243
+
244
+
245
+
246
+
247
+
248
+
249
+
250
+
251
+
252
+ //--------------------------------------------------------------------------
253
+ // Range Checker classes.
254
+ //
255
+ // The following classes are VISIBLE base classes of the user-level converter<> class.
256
+ // They supply the optimized 'out_of_range()' and 'validate_range()' static member functions
257
+ // visible in the user interface.
258
+ //
259
+ //--------------------------------------------------------------------------
260
+
261
+ // Dummy range checker.
262
+ template<class Traits>
263
+ struct dummy_range_checker
264
+ {
265
+ typedef typename Traits::argument_type argument_type ;
266
+
267
+ static range_check_result out_of_range ( argument_type ) { return cInRange ; }
268
+ static void validate_range ( argument_type ) {}
269
+ } ;
270
+
271
+ // Generic range checker.
272
+ //
273
+ // All the range checking logic for all possible combinations of source and target
274
+ // can be arranged in terms of one or two predicates, which test overflow on both neg/pos 'sides'
275
+ // of the ranges.
276
+ //
277
+ // These predicates are given here as IsNegOverflow and IsPosOverflow.
278
+ //
279
+ template<class Traits, class IsNegOverflow, class IsPosOverflow, class OverflowHandler>
280
+ struct generic_range_checker
281
+ {
282
+ typedef OverflowHandler overflow_handler ;
283
+
284
+ typedef typename Traits::argument_type argument_type ;
285
+
286
+ static range_check_result out_of_range ( argument_type s )
287
+ {
288
+ typedef typename combine<IsNegOverflow,IsPosOverflow>::type Predicate ;
289
+
290
+ return Predicate::apply(s);
291
+ }
292
+
293
+ static void validate_range ( argument_type s )
294
+ { OverflowHandler()( out_of_range(s) ) ; }
295
+ } ;
296
+
297
+
298
+
299
+ //--------------------------------------------------------------------------
300
+ //
301
+ // Selectors for the optimized Range Checker class.
302
+ //
303
+ //--------------------------------------------------------------------------
304
+
305
+ template<class Traits,class OverflowHandler>
306
+ struct GetRC_Sig2Sig_or_Unsig2Unsig
307
+ {
308
+ typedef dummy_range_checker<Traits> Dummy ;
309
+
310
+ typedef LT_LoT<Traits> Pred1 ;
311
+ typedef GT_HiT<Traits> Pred2 ;
312
+
313
+ typedef generic_range_checker<Traits,Pred1,Pred2,OverflowHandler> Normal ;
314
+
315
+ typedef typename Traits::subranged subranged ;
316
+
317
+ typedef typename mpl::if_<subranged,Normal,Dummy>::type type ;
318
+ } ;
319
+
320
+ template<class Traits, class OverflowHandler>
321
+ struct GetRC_Sig2Unsig
322
+ {
323
+ typedef LT_Zero<Traits> Pred1 ;
324
+ typedef GT_HiT <Traits> Pred2 ;
325
+
326
+ typedef generic_range_checker<Traits,Pred1,Pred2,OverflowHandler> ChoiceA ;
327
+
328
+ typedef generic_range_checker<Traits,Pred1,non_applicable,OverflowHandler> ChoiceB ;
329
+
330
+ typedef typename Traits::target_type T ;
331
+ typedef typename Traits::source_type S ;
332
+
333
+ typedef typename subranged_Unsig2Sig<S,T>::type oposite_subranged ;
334
+
335
+ typedef typename mpl::not_<oposite_subranged>::type positively_subranged ;
336
+
337
+ typedef typename mpl::if_<positively_subranged,ChoiceA,ChoiceB>::type type ;
338
+ } ;
339
+
340
+ template<class Traits, class OverflowHandler>
341
+ struct GetRC_Unsig2Sig
342
+ {
343
+ typedef GT_HiT<Traits> Pred1 ;
344
+
345
+ typedef generic_range_checker<Traits,non_applicable,Pred1,OverflowHandler> type ;
346
+ } ;
347
+
348
+ template<class Traits,class OverflowHandler>
349
+ struct GetRC_Int2Int
350
+ {
351
+ typedef GetRC_Sig2Sig_or_Unsig2Unsig<Traits,OverflowHandler> Sig2SigQ ;
352
+ typedef GetRC_Sig2Unsig <Traits,OverflowHandler> Sig2UnsigQ ;
353
+ typedef GetRC_Unsig2Sig <Traits,OverflowHandler> Unsig2SigQ ;
354
+ typedef Sig2SigQ Unsig2UnsigQ ;
355
+
356
+ typedef typename Traits::sign_mixture sign_mixture ;
357
+
358
+ typedef typename
359
+ for_sign_mixture<sign_mixture,Sig2SigQ,Sig2UnsigQ,Unsig2SigQ,Unsig2UnsigQ>::type
360
+ selector ;
361
+
362
+ typedef typename selector::type type ;
363
+ } ;
364
+
365
+ template<class Traits>
366
+ struct GetRC_Int2Float
367
+ {
368
+ typedef dummy_range_checker<Traits> type ;
369
+ } ;
370
+
371
+ template<class Traits, class OverflowHandler, class Float2IntRounder>
372
+ struct GetRC_Float2Int
373
+ {
374
+ typedef LE_PrevLoT <Traits> Pred1 ;
375
+ typedef GE_SuccHiT <Traits> Pred2 ;
376
+ typedef LT_HalfPrevLoT<Traits> Pred3 ;
377
+ typedef GT_HalfSuccHiT<Traits> Pred4 ;
378
+ typedef GT_HiT <Traits> Pred5 ;
379
+ typedef LT_LoT <Traits> Pred6 ;
380
+
381
+ typedef generic_range_checker<Traits,Pred1,Pred2,OverflowHandler> ToZero ;
382
+ typedef generic_range_checker<Traits,Pred3,Pred4,OverflowHandler> ToNearest ;
383
+ typedef generic_range_checker<Traits,Pred1,Pred5,OverflowHandler> ToInf ;
384
+ typedef generic_range_checker<Traits,Pred6,Pred2,OverflowHandler> ToNegInf ;
385
+
386
+ typedef typename Float2IntRounder::round_style round_style ;
387
+
388
+ typedef typename for_round_style<round_style,ToZero,ToNearest,ToInf,ToNegInf>::type type ;
389
+ } ;
390
+
391
+ template<class Traits, class OverflowHandler>
392
+ struct GetRC_Float2Float
393
+ {
394
+ typedef dummy_range_checker<Traits> Dummy ;
395
+
396
+ typedef LT_LoT<Traits> Pred1 ;
397
+ typedef GT_HiT<Traits> Pred2 ;
398
+
399
+ typedef generic_range_checker<Traits,Pred1,Pred2,OverflowHandler> Normal ;
400
+
401
+ typedef typename Traits::subranged subranged ;
402
+
403
+ typedef typename mpl::if_<subranged,Normal,Dummy>::type type ;
404
+ } ;
405
+
406
+ template<class Traits, class OverflowHandler, class Float2IntRounder>
407
+ struct GetRC_BuiltIn2BuiltIn
408
+ {
409
+ typedef GetRC_Int2Int<Traits,OverflowHandler> Int2IntQ ;
410
+ typedef GetRC_Int2Float<Traits> Int2FloatQ ;
411
+ typedef GetRC_Float2Int<Traits,OverflowHandler,Float2IntRounder> Float2IntQ ;
412
+ typedef GetRC_Float2Float<Traits,OverflowHandler> Float2FloatQ ;
413
+
414
+ typedef typename Traits::int_float_mixture int_float_mixture ;
415
+
416
+ typedef typename for_int_float_mixture<int_float_mixture, Int2IntQ, Int2FloatQ, Float2IntQ, Float2FloatQ>::type selector ;
417
+
418
+ typedef typename selector::type type ;
419
+ } ;
420
+
421
+ template<class Traits, class OverflowHandler, class Float2IntRounder>
422
+ struct GetRC
423
+ {
424
+ typedef GetRC_BuiltIn2BuiltIn<Traits,OverflowHandler,Float2IntRounder> BuiltIn2BuiltInQ ;
425
+
426
+ typedef dummy_range_checker<Traits> Dummy ;
427
+
428
+ typedef mpl::identity<Dummy> DummyQ ;
429
+
430
+ typedef typename Traits::udt_builtin_mixture udt_builtin_mixture ;
431
+
432
+ typedef typename for_udt_builtin_mixture<udt_builtin_mixture,BuiltIn2BuiltInQ,DummyQ,DummyQ,DummyQ>::type selector ;
433
+
434
+ typedef typename selector::type type ;
435
+ } ;
436
+
437
+
438
+
439
+
440
+ //--------------------------------------------------------------------------
441
+ // Converter classes.
442
+ //
443
+ // The following classes are VISIBLE base classes of the user-level converter<> class.
444
+ // They supply the optimized 'nearbyint()' and 'convert()' static member functions
445
+ // visible in the user interface.
446
+ //
447
+ //--------------------------------------------------------------------------
448
+
449
+ //
450
+ // Trivial Converter : used when (cv-unqualified) T == (cv-unqualified) S
451
+ //
452
+ template<class Traits>
453
+ struct trivial_converter_impl : public dummy_range_checker<Traits>
454
+ {
455
+ typedef Traits traits ;
456
+
457
+ typedef typename Traits::source_type source_type ;
458
+ typedef typename Traits::argument_type argument_type ;
459
+ typedef typename Traits::result_type result_type ;
460
+
461
+ static result_type low_level_convert ( argument_type s ) { return s ; }
462
+ static source_type nearbyint ( argument_type s ) { return s ; }
463
+ static result_type convert ( argument_type s ) { return s ; }
464
+ } ;
465
+
466
+
467
+ //
468
+ // Rounding Converter : used for float to integral conversions.
469
+ //
470
+ template<class Traits,class RangeChecker,class RawConverter,class Float2IntRounder>
471
+ struct rounding_converter : public RangeChecker
472
+ ,public Float2IntRounder
473
+ ,public RawConverter
474
+ {
475
+ typedef RangeChecker RangeCheckerBase ;
476
+ typedef Float2IntRounder Float2IntRounderBase ;
477
+ typedef RawConverter RawConverterBase ;
478
+
479
+ typedef Traits traits ;
480
+
481
+ typedef typename Traits::source_type source_type ;
482
+ typedef typename Traits::argument_type argument_type ;
483
+ typedef typename Traits::result_type result_type ;
484
+
485
+ static result_type convert ( argument_type s )
486
+ {
487
+ RangeCheckerBase::validate_range(s);
488
+ source_type s1 = Float2IntRounderBase::nearbyint(s);
489
+ return RawConverterBase::low_level_convert(s1);
490
+ }
491
+ } ;
492
+
493
+
494
+ //
495
+ // Non-Rounding Converter : used for all other conversions.
496
+ //
497
+ template<class Traits,class RangeChecker,class RawConverter>
498
+ struct non_rounding_converter : public RangeChecker
499
+ ,public RawConverter
500
+ {
501
+ typedef RangeChecker RangeCheckerBase ;
502
+ typedef RawConverter RawConverterBase ;
503
+
504
+ typedef Traits traits ;
505
+
506
+ typedef typename Traits::source_type source_type ;
507
+ typedef typename Traits::argument_type argument_type ;
508
+ typedef typename Traits::result_type result_type ;
509
+
510
+ static source_type nearbyint ( argument_type s ) { return s ; }
511
+
512
+ static result_type convert ( argument_type s )
513
+ {
514
+ RangeCheckerBase::validate_range(s);
515
+ return RawConverterBase::low_level_convert(s);
516
+ }
517
+ } ;
518
+
519
+
520
+
521
+
522
+ //--------------------------------------------------------------------------
523
+ //
524
+ // Selectors for the optimized Converter class.
525
+ //
526
+ //--------------------------------------------------------------------------
527
+
528
+ template<class Traits,class OverflowHandler,class Float2IntRounder,class RawConverter, class UserRangeChecker>
529
+ struct get_non_trivial_converter
530
+ {
531
+ typedef GetRC<Traits,OverflowHandler,Float2IntRounder> InternalRangeCheckerQ ;
532
+
533
+ typedef is_same<UserRangeChecker,UseInternalRangeChecker> use_internal_RC ;
534
+
535
+ typedef mpl::identity<UserRangeChecker> UserRangeCheckerQ ;
536
+
537
+ typedef typename
538
+ mpl::eval_if<use_internal_RC,InternalRangeCheckerQ,UserRangeCheckerQ>::type
539
+ RangeChecker ;
540
+
541
+ typedef non_rounding_converter<Traits,RangeChecker,RawConverter> NonRounding ;
542
+ typedef rounding_converter<Traits,RangeChecker,RawConverter,Float2IntRounder> Rounding ;
543
+
544
+ typedef mpl::identity<NonRounding> NonRoundingQ ;
545
+ typedef mpl::identity<Rounding> RoundingQ ;
546
+
547
+ typedef typename Traits::int_float_mixture int_float_mixture ;
548
+
549
+ typedef typename
550
+ for_int_float_mixture<int_float_mixture, NonRoundingQ, NonRoundingQ, RoundingQ, NonRoundingQ>::type
551
+ selector ;
552
+
553
+ typedef typename selector::type type ;
554
+ } ;
555
+
556
+ template< class Traits
557
+ ,class OverflowHandler
558
+ ,class Float2IntRounder
559
+ ,class RawConverter
560
+ ,class UserRangeChecker
561
+ >
562
+ struct get_converter_impl
563
+ {
564
+ #if BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT( 0x0561 ) )
565
+ // bcc55 prefers sometimes template parameters to be explicit local types.
566
+ // (notice that is is illegal to reuse the names like this)
567
+ typedef Traits Traits ;
568
+ typedef OverflowHandler OverflowHandler ;
569
+ typedef Float2IntRounder Float2IntRounder ;
570
+ typedef RawConverter RawConverter ;
571
+ typedef UserRangeChecker UserRangeChecker ;
572
+ #endif
573
+
574
+ typedef trivial_converter_impl<Traits> Trivial ;
575
+ typedef mpl::identity <Trivial> TrivialQ ;
576
+
577
+ typedef get_non_trivial_converter< Traits
578
+ ,OverflowHandler
579
+ ,Float2IntRounder
580
+ ,RawConverter
581
+ ,UserRangeChecker
582
+ > NonTrivialQ ;
583
+
584
+ typedef typename Traits::trivial trivial ;
585
+
586
+ typedef typename mpl::eval_if<trivial,TrivialQ,NonTrivialQ>::type type ;
587
+ } ;
588
+
589
+ } } } // namespace boost::numeric::convdetail
590
+
591
+ #endif
592
+
593
+
@@ -0,0 +1,72 @@
1
+ // (c) Copyright Fernando Luis Cacciola Carballal 2000-2004
2
+ // Use, modification, and distribution is subject to the Boost Software
3
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
4
+ // http://www.boost.org/LICENSE_1_0.txt)
5
+
6
+ // See library home page at http://www.boost.org/libs/numeric/conversion
7
+ //
8
+ // Contact the author at: fernando_cacciola@hotmail.com
9
+ //
10
+ #ifndef BOOST_NUMERIC_CONVERSION_DETAIL_INT_FLOAT_MIXTURE_FLC_12NOV2002_HPP
11
+ #define BOOST_NUMERIC_CONVERSION_DETAIL_INT_FLOAT_MIXTURE_FLC_12NOV2002_HPP
12
+
13
+ #include "boost/config.hpp"
14
+ #include "boost/limits.hpp"
15
+
16
+ #include "boost/numeric/conversion/int_float_mixture_enum.hpp"
17
+ #include "boost/numeric/conversion/detail/meta.hpp"
18
+
19
+ #include "boost/type_traits/integral_constant.hpp"
20
+
21
+ namespace boost { namespace numeric { namespace convdetail
22
+ {
23
+ // Integral Constants for 'IntFloatMixture'
24
+ typedef boost::integral_constant<int_float_mixture_enum, integral_to_integral> int2int_c ;
25
+ typedef boost::integral_constant<int_float_mixture_enum, integral_to_float> int2float_c ;
26
+ typedef boost::integral_constant<int_float_mixture_enum, float_to_integral> float2int_c ;
27
+ typedef boost::integral_constant<int_float_mixture_enum, float_to_float> float2float_c ;
28
+
29
+ // Metafunction:
30
+ //
31
+ // get_int_float_mixture<T,S>::type
32
+ //
33
+ // Selects the appropriate Int-Float Mixture Integral Constant for the combination T,S.
34
+ //
35
+ template<class T,class S>
36
+ struct get_int_float_mixture
37
+ {
38
+ typedef mpl::bool_< ::std::numeric_limits<S>::is_integer > S_int ;
39
+ typedef mpl::bool_< ::std::numeric_limits<T>::is_integer > T_int ;
40
+
41
+ typedef typename
42
+ for_both<S_int, T_int, int2int_c, int2float_c, float2int_c, float2float_c>::type
43
+ type ;
44
+ } ;
45
+
46
+ // Metafunction:
47
+ //
48
+ // for_int_float_mixture<Mixture,int_int,int_float,float_int,float_float>::type
49
+ //
50
+ // {Mixture} is one of the Integral Constants for Mixture, declared above.
51
+ // {int_int,int_float,float_int,float_float} are aribtrary types. (not metafunctions)
52
+ //
53
+ // According to the value of 'IntFloatMixture', selects the corresponding type.
54
+ //
55
+ template<class IntFloatMixture, class Int2Int, class Int2Float, class Float2Int, class Float2Float>
56
+ struct for_int_float_mixture
57
+ {
58
+ typedef typename
59
+ ct_switch4<IntFloatMixture
60
+ ,int2int_c, int2float_c, float2int_c // default
61
+ ,Int2Int , Int2Float , Float2Int , Float2Float
62
+ >::type
63
+ type ;
64
+ } ;
65
+
66
+ } } } // namespace boost::numeric::convdetail
67
+
68
+ #endif
69
+ //
70
+ ///////////////////////////////////////////////////////////////////////////////////////////////
71
+
72
+