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,50 @@
1
+ /* Boost interval/detail/c99_rounding_control.hpp file
2
+ *
3
+ * Copyright 2000 Jens Maurer
4
+ * Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
5
+ *
6
+ * Distributed under the Boost Software License, Version 1.0.
7
+ * (See accompanying file LICENSE_1_0.txt or
8
+ * copy at http://www.boost.org/LICENSE_1_0.txt)
9
+ */
10
+
11
+ #ifndef BOOST_NUMERIC_INTERVAL_DETAIL_C99_ROUNDING_CONTROL_HPP
12
+ #define BOOST_NUMERIC_INTERVAL_DETAIL_C99_ROUNDING_CONTROL_HPP
13
+
14
+ #include <boost/numeric/interval/detail/c99sub_rounding_control.hpp>
15
+
16
+ namespace boost {
17
+ namespace numeric {
18
+ namespace interval_lib {
19
+
20
+ template<>
21
+ struct rounding_control<float>:
22
+ detail::c99_rounding_control
23
+ {
24
+ static float force_rounding(float const &r)
25
+ { volatile float r_ = r; return r_; }
26
+ };
27
+
28
+ template<>
29
+ struct rounding_control<double>:
30
+ detail::c99_rounding_control
31
+ {
32
+ static double force_rounding(double const &r)
33
+ { volatile double r_ = r; return r_; }
34
+ };
35
+
36
+ template<>
37
+ struct rounding_control<long double>:
38
+ detail::c99_rounding_control
39
+ {
40
+ static long double force_rounding(long double const &r)
41
+ { volatile long double r_ = r; return r_; }
42
+ };
43
+
44
+ } // namespace interval_lib
45
+ } // namespace numeric
46
+ } // namespace boost
47
+
48
+ #undef BOOST_NUMERIC_INTERVAL_NO_HARDWARE
49
+
50
+ #endif // BOOST_NUMERIC_INTERVAL_DETAIL_C99_ROUNDING_CONTROL_HPP
@@ -0,0 +1,43 @@
1
+ /* Boost interval/detail/c99sub_rounding_control.hpp file
2
+ *
3
+ * Copyright 2000 Jens Maurer
4
+ * Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
5
+ *
6
+ * Distributed under the Boost Software License, Version 1.0.
7
+ * (See accompanying file LICENSE_1_0.txt or
8
+ * copy at http://www.boost.org/LICENSE_1_0.txt)
9
+ */
10
+
11
+ #ifndef BOOST_NUMERIC_INTERVAL_DETAIL_C99SUB_ROUNDING_CONTROL_HPP
12
+ #define BOOST_NUMERIC_INTERVAL_DETAIL_C99SUB_ROUNDING_CONTROL_HPP
13
+
14
+ #include <boost/detail/fenv.hpp> // ISO C 99 rounding mode control
15
+
16
+ namespace boost {
17
+ namespace numeric {
18
+ namespace interval_lib {
19
+ namespace detail {
20
+
21
+ extern "C" { double rint(double); }
22
+
23
+ struct c99_rounding_control
24
+ {
25
+ typedef int rounding_mode;
26
+
27
+ static void set_rounding_mode(rounding_mode mode) { fesetround(mode); }
28
+ static void get_rounding_mode(rounding_mode &mode) { mode = fegetround(); }
29
+ static void downward() { set_rounding_mode(FE_DOWNWARD); }
30
+ static void upward() { set_rounding_mode(FE_UPWARD); }
31
+ static void to_nearest() { set_rounding_mode(FE_TONEAREST); }
32
+ static void toward_zero() { set_rounding_mode(FE_TOWARDZERO); }
33
+
34
+ template<class T>
35
+ static T to_int(const T& r) { return rint(r); }
36
+ };
37
+
38
+ } // namespace detail
39
+ } // namespace interval_lib
40
+ } // namespace numeric
41
+ } // namespace boost
42
+
43
+ #endif // BOOST_NUMERIC_INTERVAL_DETAIL_C99SUB_ROUBDING_CONTROL_HPP
@@ -0,0 +1,194 @@
1
+ /* Boost interval/detail/division.hpp file
2
+ *
3
+ * Copyright 2003 Guillaume Melquiond, Sylvain Pion
4
+ *
5
+ * Distributed under the Boost Software License, Version 1.0.
6
+ * (See accompanying file LICENSE_1_0.txt or
7
+ * copy at http://www.boost.org/LICENSE_1_0.txt)
8
+ */
9
+
10
+ #ifndef BOOST_NUMERIC_INTERVAL_DETAIL_DIVISION_HPP
11
+ #define BOOST_NUMERIC_INTERVAL_DETAIL_DIVISION_HPP
12
+
13
+ #include <boost/numeric/interval/detail/interval_prototype.hpp>
14
+ #include <boost/numeric/interval/detail/bugs.hpp>
15
+ #include <boost/numeric/interval/detail/test_input.hpp>
16
+ #include <boost/numeric/interval/rounded_arith.hpp>
17
+ #include <algorithm>
18
+
19
+ namespace boost {
20
+ namespace numeric {
21
+ namespace interval_lib {
22
+ namespace detail {
23
+
24
+ template<class T, class Policies> inline
25
+ interval<T, Policies> div_non_zero(const interval<T, Policies>& x,
26
+ const interval<T, Policies>& y)
27
+ {
28
+ // assert(!in_zero(y));
29
+ typename Policies::rounding rnd;
30
+ typedef interval<T, Policies> I;
31
+ const T& xl = x.lower();
32
+ const T& xu = x.upper();
33
+ const T& yl = y.lower();
34
+ const T& yu = y.upper();
35
+ if (::boost::numeric::interval_lib::user::is_neg(xu))
36
+ if (::boost::numeric::interval_lib::user::is_neg(yu))
37
+ return I(rnd.div_down(xu, yl), rnd.div_up(xl, yu), true);
38
+ else
39
+ return I(rnd.div_down(xl, yl), rnd.div_up(xu, yu), true);
40
+ else if (::boost::numeric::interval_lib::user::is_neg(xl))
41
+ if (::boost::numeric::interval_lib::user::is_neg(yu))
42
+ return I(rnd.div_down(xu, yu), rnd.div_up(xl, yu), true);
43
+ else
44
+ return I(rnd.div_down(xl, yl), rnd.div_up(xu, yl), true);
45
+ else
46
+ if (::boost::numeric::interval_lib::user::is_neg(yu))
47
+ return I(rnd.div_down(xu, yu), rnd.div_up(xl, yl), true);
48
+ else
49
+ return I(rnd.div_down(xl, yu), rnd.div_up(xu, yl), true);
50
+ }
51
+
52
+ template<class T, class Policies> inline
53
+ interval<T, Policies> div_non_zero(const T& x, const interval<T, Policies>& y)
54
+ {
55
+ // assert(!in_zero(y));
56
+ typename Policies::rounding rnd;
57
+ typedef interval<T, Policies> I;
58
+ const T& yl = y.lower();
59
+ const T& yu = y.upper();
60
+ if (::boost::numeric::interval_lib::user::is_neg(x))
61
+ return I(rnd.div_down(x, yl), rnd.div_up(x, yu), true);
62
+ else
63
+ return I(rnd.div_down(x, yu), rnd.div_up(x, yl), true);
64
+ }
65
+
66
+ template<class T, class Policies> inline
67
+ interval<T, Policies> div_positive(const interval<T, Policies>& x, const T& yu)
68
+ {
69
+ // assert(::boost::numeric::interval_lib::user::is_pos(yu));
70
+ if (::boost::numeric::interval_lib::user::is_zero(x.lower()) &&
71
+ ::boost::numeric::interval_lib::user::is_zero(x.upper()))
72
+ return x;
73
+ typename Policies::rounding rnd;
74
+ typedef interval<T, Policies> I;
75
+ const T& xl = x.lower();
76
+ const T& xu = x.upper();
77
+ typedef typename Policies::checking checking;
78
+ if (::boost::numeric::interval_lib::user::is_neg(xu))
79
+ return I(checking::neg_inf(), rnd.div_up(xu, yu), true);
80
+ else if (::boost::numeric::interval_lib::user::is_neg(xl))
81
+ return I(checking::neg_inf(), checking::pos_inf(), true);
82
+ else
83
+ return I(rnd.div_down(xl, yu), checking::pos_inf(), true);
84
+ }
85
+
86
+ template<class T, class Policies> inline
87
+ interval<T, Policies> div_positive(const T& x, const T& yu)
88
+ {
89
+ // assert(::boost::numeric::interval_lib::user::is_pos(yu));
90
+ typedef interval<T, Policies> I;
91
+ if (::boost::numeric::interval_lib::user::is_zero(x))
92
+ return I(static_cast<T>(0), static_cast<T>(0), true);
93
+ typename Policies::rounding rnd;
94
+ typedef typename Policies::checking checking;
95
+ if (::boost::numeric::interval_lib::user::is_neg(x))
96
+ return I(checking::neg_inf(), rnd.div_up(x, yu), true);
97
+ else
98
+ return I(rnd.div_down(x, yu), checking::pos_inf(), true);
99
+ }
100
+
101
+ template<class T, class Policies> inline
102
+ interval<T, Policies> div_negative(const interval<T, Policies>& x, const T& yl)
103
+ {
104
+ // assert(::boost::numeric::interval_lib::user::is_neg(yl));
105
+ if (::boost::numeric::interval_lib::user::is_zero(x.lower()) &&
106
+ ::boost::numeric::interval_lib::user::is_zero(x.upper()))
107
+ return x;
108
+ typename Policies::rounding rnd;
109
+ typedef interval<T, Policies> I;
110
+ const T& xl = x.lower();
111
+ const T& xu = x.upper();
112
+ typedef typename Policies::checking checking;
113
+ if (::boost::numeric::interval_lib::user::is_neg(xu))
114
+ return I(rnd.div_down(xu, yl), checking::pos_inf(), true);
115
+ else if (::boost::numeric::interval_lib::user::is_neg(xl))
116
+ return I(checking::neg_inf(), checking::pos_inf(), true);
117
+ else
118
+ return I(checking::neg_inf(), rnd.div_up(xl, yl), true);
119
+ }
120
+
121
+ template<class T, class Policies> inline
122
+ interval<T, Policies> div_negative(const T& x, const T& yl)
123
+ {
124
+ // assert(::boost::numeric::interval_lib::user::is_neg(yl));
125
+ typedef interval<T, Policies> I;
126
+ if (::boost::numeric::interval_lib::user::is_zero(x))
127
+ return I(static_cast<T>(0), static_cast<T>(0), true);
128
+ typename Policies::rounding rnd;
129
+ typedef typename Policies::checking checking;
130
+ if (::boost::numeric::interval_lib::user::is_neg(x))
131
+ return I(rnd.div_down(x, yl), checking::pos_inf(), true);
132
+ else
133
+ return I(checking::neg_inf(), rnd.div_up(x, yl), true);
134
+ }
135
+
136
+ template<class T, class Policies> inline
137
+ interval<T, Policies> div_zero(const interval<T, Policies>& x)
138
+ {
139
+ if (::boost::numeric::interval_lib::user::is_zero(x.lower()) &&
140
+ ::boost::numeric::interval_lib::user::is_zero(x.upper()))
141
+ return x;
142
+ else return interval<T, Policies>::whole();
143
+ }
144
+
145
+ template<class T, class Policies> inline
146
+ interval<T, Policies> div_zero(const T& x)
147
+ {
148
+ if (::boost::numeric::interval_lib::user::is_zero(x))
149
+ return interval<T, Policies>(static_cast<T>(0), static_cast<T>(0), true);
150
+ else return interval<T, Policies>::whole();
151
+ }
152
+
153
+ template<class T, class Policies> inline
154
+ interval<T, Policies> div_zero_part1(const interval<T, Policies>& x,
155
+ const interval<T, Policies>& y, bool& b)
156
+ {
157
+ // assert(::boost::numeric::interval_lib::user::is_neg(y.lower()) && ::boost::numeric::interval_lib::user::is_pos(y.upper()));
158
+ if (::boost::numeric::interval_lib::user::is_zero(x.lower()) && ::boost::numeric::interval_lib::user::is_zero(x.upper()))
159
+ { b = false; return x; }
160
+ typename Policies::rounding rnd;
161
+ typedef interval<T, Policies> I;
162
+ const T& xl = x.lower();
163
+ const T& xu = x.upper();
164
+ const T& yl = y.lower();
165
+ const T& yu = y.upper();
166
+ typedef typename Policies::checking checking;
167
+ if (::boost::numeric::interval_lib::user::is_neg(xu))
168
+ { b = true; return I(checking::neg_inf(), rnd.div_up(xu, yu), true); }
169
+ else if (::boost::numeric::interval_lib::user::is_neg(xl))
170
+ { b = false; return I(checking::neg_inf(), checking::pos_inf(), true); }
171
+ else
172
+ { b = true; return I(checking::neg_inf(), rnd.div_up(xl, yl), true); }
173
+ }
174
+
175
+ template<class T, class Policies> inline
176
+ interval<T, Policies> div_zero_part2(const interval<T, Policies>& x,
177
+ const interval<T, Policies>& y)
178
+ {
179
+ // assert(::boost::numeric::interval_lib::user::is_neg(y.lower()) && ::boost::numeric::interval_lib::user::is_pos(y.upper()) && (div_zero_part1(x, y, b), b));
180
+ typename Policies::rounding rnd;
181
+ typedef interval<T, Policies> I;
182
+ typedef typename Policies::checking checking;
183
+ if (::boost::numeric::interval_lib::user::is_neg(x.upper()))
184
+ return I(rnd.div_down(x.upper(), y.lower()), checking::pos_inf(), true);
185
+ else
186
+ return I(rnd.div_down(x.lower(), y.upper()), checking::pos_inf(), true);
187
+ }
188
+
189
+ } // namespace detail
190
+ } // namespace interval_lib
191
+ } // namespace numeric
192
+ } // namespace boost
193
+
194
+ #endif // BOOST_NUMERIC_INTERVAL_DETAIL_DIVISION_HPP
@@ -0,0 +1,83 @@
1
+ /* Boost interval/detail/ia64_rounding_control.hpp file
2
+ *
3
+ * Copyright 2006-2007 Boris Gubenko
4
+ *
5
+ * Distributed under the Boost Software License, Version 1.0.
6
+ * (See accompanying file LICENSE_1_0.txt or
7
+ * copy at http://www.boost.org/LICENSE_1_0.txt)
8
+ */
9
+
10
+ #ifndef BOOST_NUMERIC_INTERVAL_DETAIL_IA64_ROUNDING_CONTROL_HPP
11
+ #define BOOST_NUMERIC_INTERVAL_DETAIL_IA64_ROUNDING_CONTROL_HPP
12
+
13
+ #if !defined(ia64) && !defined(__ia64) && !defined(__ia64__)
14
+ #error This header only works on ia64 CPUs.
15
+ #endif
16
+
17
+ #if defined(__hpux)
18
+
19
+ # include <fenv.h>
20
+
21
+ namespace boost {
22
+ namespace numeric {
23
+ namespace interval_lib {
24
+ namespace detail {
25
+
26
+
27
+ struct ia64_rounding_control
28
+ {
29
+ typedef unsigned int rounding_mode;
30
+
31
+ static void set_rounding_mode(const rounding_mode& mode) {
32
+ fesetround(mode); }
33
+ static void get_rounding_mode(rounding_mode& mode) { mode = fegetround(); }
34
+
35
+ static void downward() { set_rounding_mode(FE_DOWNWARD); }
36
+ static void upward() { set_rounding_mode(FE_UPWARD); }
37
+ static void to_nearest() { set_rounding_mode(FE_TONEAREST); }
38
+ static void toward_zero() { set_rounding_mode(FE_TOWARDZERO); }
39
+ };
40
+
41
+ } // namespace detail
42
+
43
+ extern "C" {
44
+ float rintf(float);
45
+ double rint(double);
46
+ long double rintl(long double);
47
+ }
48
+
49
+ template<>
50
+ struct rounding_control<float>:
51
+ detail::ia64_rounding_control
52
+ {
53
+ static float force_rounding(const float r)
54
+ { volatile float _r = r; return _r; }
55
+ static float to_int(const float& x) { return rintf(x); }
56
+ };
57
+
58
+ template<>
59
+ struct rounding_control<double>:
60
+ detail::ia64_rounding_control
61
+ {
62
+ static const double & force_rounding(const double& r) { return r; }
63
+ static double to_int(const double& r) { return rint(r); }
64
+ };
65
+
66
+ template<>
67
+ struct rounding_control<long double>:
68
+ detail::ia64_rounding_control
69
+ {
70
+ static const long double & force_rounding(const long double& r) { return r; }
71
+ static long double to_int(const long double& r) { return rintl(r); }
72
+ };
73
+
74
+ } // namespace interval_lib
75
+ } // namespace numeric
76
+ } // namespace boost
77
+
78
+ #undef BOOST_NUMERIC_INTERVAL_NO_HARDWARE
79
+
80
+ #endif /* __hpux */
81
+
82
+ #endif /* BOOST_NUMERIC_INTERVAL_DETAIL_IA64_ROUNDING_CONTROL_HPP */
83
+
@@ -0,0 +1,41 @@
1
+ /* Boost interval/detail/interval_prototype.hpp file
2
+ *
3
+ * Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
4
+ *
5
+ * Distributed under the Boost Software License, Version 1.0.
6
+ * (See accompanying file LICENSE_1_0.txt or
7
+ * copy at http://www.boost.org/LICENSE_1_0.txt)
8
+ */
9
+
10
+ #ifndef BOOST_NUMERIC_INTERVAL_DETAIL_INTERVAL_PROTOTYPE_HPP
11
+ #define BOOST_NUMERIC_INTERVAL_DETAIL_INTERVAL_PROTOTYPE_HPP
12
+
13
+ namespace boost {
14
+ namespace numeric {
15
+
16
+ namespace interval_lib {
17
+
18
+ template<class T> struct rounded_math;
19
+ template<class T> struct checking_strict;
20
+ class comparison_error;
21
+ template<class Rounding, class Checking> struct policies;
22
+
23
+ /*
24
+ * default policies class
25
+ */
26
+
27
+ template<class T>
28
+ struct default_policies
29
+ {
30
+ typedef policies<rounded_math<T>, checking_strict<T> > type;
31
+ };
32
+
33
+ } // namespace interval_lib
34
+
35
+ template<class T, class Policies = typename interval_lib::default_policies<T>::type >
36
+ class interval;
37
+
38
+ } // namespace numeric
39
+ } // namespace boost
40
+
41
+ #endif // BOOST_NUMERIC_INTERVAL_DETAIL_INTERVAL_PROTOTYPE_HPP
@@ -0,0 +1,113 @@
1
+ /* Boost interval/detail/msvc_rounding_control.hpp file
2
+ *
3
+ * Copyright 2000 Maarten Keijzer
4
+ * Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
5
+ *
6
+ * Distributed under the Boost Software License, Version 1.0.
7
+ * (See accompanying file LICENSE_1_0.txt or
8
+ * copy at http://www.boost.org/LICENSE_1_0.txt)
9
+ */
10
+
11
+ #ifndef BOOST_NUMERIC_INTERVAL_DETAIL_MSVC_ROUNDING_CONTROL_HPP
12
+ #define BOOST_NUMERIC_INTERVAL_DETAIL_MSVC_ROUNDING_CONTROL_HPP
13
+
14
+ #ifndef _MSC_VER
15
+ # error This header is only intended for MSVC, but might work for Borland as well
16
+ #endif
17
+
18
+ #include <float.h> // MSVC rounding control
19
+
20
+ // Although the function is called _control87, it seems to work for
21
+ // other FPUs too, so it does not have to be changed to _controlfp.
22
+
23
+ namespace boost {
24
+ namespace numeric {
25
+ namespace interval_lib {
26
+ namespace detail {
27
+
28
+ #if BOOST_MSVC < 1400 || defined(_WIN64)
29
+ extern "C" { double rint(double); }
30
+ #else
31
+ inline double rint(double x)
32
+ {
33
+ _asm FLD [x] ;
34
+ _asm FRNDINT ;
35
+ //_asm RET ;
36
+ }
37
+ #endif
38
+
39
+ struct x86_rounding
40
+ {
41
+ static unsigned int hard2msvc(unsigned short m) {
42
+ unsigned int n = 0;
43
+ if (m & 0x01) n |= _EM_INVALID;
44
+ if (m & 0x02) n |= _EM_DENORMAL;
45
+ if (m & 0x04) n |= _EM_ZERODIVIDE;
46
+ if (m & 0x08) n |= _EM_OVERFLOW;
47
+ if (m & 0x10) n |= _EM_UNDERFLOW;
48
+ if (m & 0x20) n |= _EM_INEXACT;
49
+ switch (m & 0x300) {
50
+ case 0x000: n |= _PC_24; break;
51
+ case 0x200: n |= _PC_53; break;
52
+ case 0x300: n |= _PC_64; break;
53
+ }
54
+ switch (m & 0xC00) {
55
+ case 0x000: n |= _RC_NEAR; break;
56
+ case 0x400: n |= _RC_DOWN; break;
57
+ case 0x800: n |= _RC_UP; break;
58
+ case 0xC00: n |= _RC_CHOP; break;
59
+ }
60
+ if (m & 0x1000) n |= _IC_AFFINE; // only useful on 287
61
+ return n;
62
+ }
63
+
64
+ static unsigned short msvc2hard(unsigned int n) {
65
+ unsigned short m = 0;
66
+ if (n & _EM_INVALID) m |= 0x01;
67
+ if (n & _EM_DENORMAL) m |= 0x02;
68
+ if (n & _EM_ZERODIVIDE) m |= 0x04;
69
+ if (n & _EM_OVERFLOW) m |= 0x08;
70
+ if (n & _EM_UNDERFLOW) m |= 0x10;
71
+ if (n & _EM_INEXACT) m |= 0x20;
72
+ switch (n & _MCW_RC) {
73
+ case _RC_NEAR: m |= 0x000; break;
74
+ case _RC_DOWN: m |= 0x400; break;
75
+ case _RC_UP: m |= 0x800; break;
76
+ case _RC_CHOP: m |= 0xC00; break;
77
+ }
78
+ switch (n & _MCW_PC) {
79
+ case _PC_24: m |= 0x000; break;
80
+ case _PC_53: m |= 0x200; break;
81
+ case _PC_64: m |= 0x300; break;
82
+ }
83
+ if ((n & _MCW_IC) == _IC_AFFINE) m |= 0x1000;
84
+ return m;
85
+ }
86
+
87
+ typedef unsigned short rounding_mode;
88
+ static void get_rounding_mode(rounding_mode& mode)
89
+ { mode = msvc2hard(_control87(0, 0)); }
90
+ static void set_rounding_mode(const rounding_mode mode)
91
+ {
92
+ _control87(hard2msvc(mode),
93
+ _MCW_EM | _MCW_RC
94
+ #if !defined(_M_AMD64) && !defined(_M_ARM) && !defined(_M_ARM64)
95
+ // x64 ignores _MCW_PC and _MCW_IC, and the Debug CRT library actually
96
+ // asserts when these are passed to _control87.
97
+ // MSDN says on '_control87' that changing precision (_MCW_PC) or
98
+ // infinity (_MCW_IC) handling is not supported on the ARM and x64
99
+ // architectures and that _control87 raises an assertion
100
+ // and the invalid parameter handler is invoked.
101
+ | _MCW_PC | _MCW_IC
102
+ #endif
103
+ );
104
+ }
105
+ static double to_int(const double& x) { return rint(x); }
106
+ };
107
+
108
+ } // namespace detail
109
+ } // namespace interval_lib
110
+ } // namespace numeric
111
+ } // namespace boost
112
+
113
+ #endif /* BOOST_NUMERIC_INTERVAL_DETAIL_MSVC_ROUNDING_CONTROL_HPP */
@@ -0,0 +1,99 @@
1
+ /* Boost interval/detail/ppc_rounding_control.hpp file
2
+ *
3
+ * Copyright 2000 Jens Maurer
4
+ * Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
5
+ * Copyright 2005 Guillaume Melquiond
6
+ *
7
+ * Distributed under the Boost Software License, Version 1.0.
8
+ * (See accompanying file LICENSE_1_0.txt or
9
+ * copy at http://www.boost.org/LICENSE_1_0.txt)
10
+ */
11
+
12
+ #ifndef BOOST_NUMERIC_INTERVAL_DETAIL_PPC_ROUNDING_CONTROL_HPP
13
+ #define BOOST_NUMERIC_INTERVAL_DETAIL_PPC_ROUNDING_CONTROL_HPP
14
+
15
+ #if !defined(powerpc) && !defined(__powerpc__) && !defined(__ppc__)
16
+ #error This header only works on PPC CPUs.
17
+ #endif
18
+
19
+ #if defined(__GNUC__ ) || (__IBMCPP__ >= 700)
20
+
21
+ namespace boost {
22
+ namespace numeric {
23
+ namespace interval_lib {
24
+ namespace detail {
25
+
26
+ typedef union {
27
+ ::boost::long_long_type imode;
28
+ double dmode;
29
+ } rounding_mode_struct;
30
+
31
+ static const rounding_mode_struct mode_upward = { 0xFFF8000000000002LL };
32
+ static const rounding_mode_struct mode_downward = { 0xFFF8000000000003LL };
33
+ static const rounding_mode_struct mode_to_nearest = { 0xFFF8000000000000LL };
34
+ static const rounding_mode_struct mode_toward_zero = { 0xFFF8000000000001LL };
35
+
36
+ struct ppc_rounding_control
37
+ {
38
+ typedef double rounding_mode;
39
+
40
+ static void set_rounding_mode(const rounding_mode mode)
41
+ { __asm__ __volatile__ ("mtfsf 255,%0" : : "f"(mode)); }
42
+
43
+ static void get_rounding_mode(rounding_mode& mode)
44
+ { __asm__ __volatile__ ("mffs %0" : "=f"(mode)); }
45
+
46
+ static void downward() { set_rounding_mode(mode_downward.dmode); }
47
+ static void upward() { set_rounding_mode(mode_upward.dmode); }
48
+ static void to_nearest() { set_rounding_mode(mode_to_nearest.dmode); }
49
+ static void toward_zero() { set_rounding_mode(mode_toward_zero.dmode); }
50
+ };
51
+
52
+ } // namespace detail
53
+
54
+ // Do not declare the following C99 symbols if <math.h> provides them.
55
+ // Otherwise, conflicts may occur, due to differences between prototypes.
56
+ #if !defined(_ISOC99_SOURCE) && !defined(__USE_ISOC99)
57
+ extern "C" {
58
+ float rintf(float);
59
+ double rint(double);
60
+ }
61
+ #endif
62
+
63
+ template<>
64
+ struct rounding_control<float>:
65
+ detail::ppc_rounding_control
66
+ {
67
+ static float force_rounding(const float r)
68
+ {
69
+ float tmp;
70
+ __asm__ __volatile__ ("frsp %0, %1" : "=f" (tmp) : "f" (r));
71
+ return tmp;
72
+ }
73
+ static float to_int(const float& x) { return rintf(x); }
74
+ };
75
+
76
+ template<>
77
+ struct rounding_control<double>:
78
+ detail::ppc_rounding_control
79
+ {
80
+ static const double & force_rounding(const double& r) { return r; }
81
+ static double to_int(const double& r) { return rint(r); }
82
+ };
83
+
84
+ template<>
85
+ struct rounding_control<long double>:
86
+ detail::ppc_rounding_control
87
+ {
88
+ static const long double & force_rounding(const long double& r) { return r; }
89
+ static long double to_int(const long double& r) { return rint(r); }
90
+ };
91
+
92
+ } // namespace interval_lib
93
+ } // namespace numeric
94
+ } // namespace boost
95
+
96
+ #undef BOOST_NUMERIC_INTERVAL_NO_HARDWARE
97
+ #endif
98
+
99
+ #endif /* BOOST_NUMERIC_INTERVAL_DETAIL_PPC_ROUNDING_CONTROL_HPP */