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,450 @@
1
+ /* Boost interval/interval.hpp header file
2
+ *
3
+ * Copyright 2002-2003 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_INTERVAL_HPP
11
+ #define BOOST_NUMERIC_INTERVAL_INTERVAL_HPP
12
+
13
+ #include <stdexcept>
14
+ #include <string>
15
+ #include <boost/numeric/interval/detail/interval_prototype.hpp>
16
+
17
+ namespace boost {
18
+ namespace numeric {
19
+
20
+ namespace interval_lib {
21
+
22
+ class comparison_error
23
+ : public std::runtime_error
24
+ {
25
+ public:
26
+ comparison_error()
27
+ : std::runtime_error("boost::interval: uncertain comparison")
28
+ { }
29
+ };
30
+
31
+ } // namespace interval_lib
32
+
33
+ /*
34
+ * interval class
35
+ */
36
+
37
+ template<class T, class Policies>
38
+ class interval
39
+ {
40
+ private:
41
+ struct interval_holder;
42
+ struct number_holder;
43
+ public:
44
+ typedef T base_type;
45
+ typedef Policies traits_type;
46
+
47
+ T const &lower() const;
48
+ T const &upper() const;
49
+
50
+ interval();
51
+ interval(T const &v);
52
+ template<class T1> interval(T1 const &v);
53
+ interval(T const &l, T const &u);
54
+ template<class T1, class T2> interval(T1 const &l, T2 const &u);
55
+ interval(interval<T, Policies> const &r);
56
+ template<class Policies1> interval(interval<T, Policies1> const &r);
57
+ template<class T1, class Policies1> interval(interval<T1, Policies1> const &r);
58
+
59
+ interval &operator=(T const &v);
60
+ template<class T1> interval &operator=(T1 const &v);
61
+ interval &operator=(interval<T, Policies> const &r);
62
+ template<class Policies1> interval &operator=(interval<T, Policies1> const &r);
63
+ template<class T1, class Policies1> interval &operator=(interval<T1, Policies1> const &r);
64
+
65
+ void assign(const T& l, const T& u);
66
+
67
+ static interval empty();
68
+ static interval whole();
69
+ static interval hull(const T& x, const T& y);
70
+
71
+ interval& operator+= (const T& r);
72
+ interval& operator+= (const interval& r);
73
+ interval& operator-= (const T& r);
74
+ interval& operator-= (const interval& r);
75
+ interval& operator*= (const T& r);
76
+ interval& operator*= (const interval& r);
77
+ interval& operator/= (const T& r);
78
+ interval& operator/= (const interval& r);
79
+
80
+ bool operator< (const interval_holder& r) const;
81
+ bool operator> (const interval_holder& r) const;
82
+ bool operator<= (const interval_holder& r) const;
83
+ bool operator>= (const interval_holder& r) const;
84
+ bool operator== (const interval_holder& r) const;
85
+ bool operator!= (const interval_holder& r) const;
86
+
87
+ bool operator< (const number_holder& r) const;
88
+ bool operator> (const number_holder& r) const;
89
+ bool operator<= (const number_holder& r) const;
90
+ bool operator>= (const number_holder& r) const;
91
+ bool operator== (const number_holder& r) const;
92
+ bool operator!= (const number_holder& r) const;
93
+
94
+ // the following is for internal use only, it is not a published interface
95
+ // nevertheless, it's public because friends don't always work correctly.
96
+ interval(const T& l, const T& u, bool): low(l), up(u) {}
97
+ void set_empty();
98
+ void set_whole();
99
+ void set(const T& l, const T& u);
100
+
101
+ private:
102
+ struct interval_holder {
103
+ template<class Policies2>
104
+ interval_holder(const interval<T, Policies2>& r)
105
+ : low(r.lower()), up(r.upper())
106
+ {
107
+ typedef typename Policies2::checking checking2;
108
+ if (checking2::is_empty(low, up))
109
+ throw interval_lib::comparison_error();
110
+ }
111
+
112
+ const T& low;
113
+ const T& up;
114
+ };
115
+
116
+ struct number_holder {
117
+ number_holder(const T& r) : val(r)
118
+ {
119
+ typedef typename Policies::checking checking;
120
+ if (checking::is_nan(r))
121
+ throw interval_lib::comparison_error();
122
+ }
123
+
124
+ const T& val;
125
+ };
126
+
127
+ typedef typename Policies::checking checking;
128
+ typedef typename Policies::rounding rounding;
129
+
130
+ T low;
131
+ T up;
132
+ };
133
+
134
+ template<class T, class Policies> inline
135
+ interval<T, Policies>::interval():
136
+ low(static_cast<T>(0)), up(static_cast<T>(0))
137
+ {}
138
+
139
+ template<class T, class Policies> inline
140
+ interval<T, Policies>::interval(T const &v): low(v), up(v)
141
+ {
142
+ if (checking::is_nan(v)) set_empty();
143
+ }
144
+
145
+ template<class T, class Policies> template<class T1> inline
146
+ interval<T, Policies>::interval(T1 const &v)
147
+ {
148
+ if (checking::is_nan(v)) set_empty();
149
+ else {
150
+ rounding rnd;
151
+ low = rnd.conv_down(v);
152
+ up = rnd.conv_up (v);
153
+ }
154
+ }
155
+
156
+ template<class T, class Policies> template<class T1, class T2> inline
157
+ interval<T, Policies>::interval(T1 const &l, T2 const &u)
158
+ {
159
+ if (checking::is_nan(l) || checking::is_nan(u) || !(l <= u)) set_empty();
160
+ else {
161
+ rounding rnd;
162
+ low = rnd.conv_down(l);
163
+ up = rnd.conv_up (u);
164
+ }
165
+ }
166
+
167
+ template<class T, class Policies> inline
168
+ interval<T, Policies>::interval(T const &l, T const &u): low(l), up(u)
169
+ {
170
+ if (checking::is_nan(l) || checking::is_nan(u) || !(l <= u))
171
+ set_empty();
172
+ }
173
+
174
+
175
+ template<class T, class Policies> inline
176
+ interval<T, Policies>::interval(interval<T, Policies> const &r): low(r.lower()), up(r.upper())
177
+ {}
178
+
179
+ template<class T, class Policies> template<class Policies1> inline
180
+ interval<T, Policies>::interval(interval<T, Policies1> const &r): low(r.lower()), up(r.upper())
181
+ {
182
+ typedef typename Policies1::checking checking1;
183
+ if (checking1::is_empty(r.lower(), r.upper())) set_empty();
184
+ }
185
+
186
+ template<class T, class Policies> template<class T1, class Policies1> inline
187
+ interval<T, Policies>::interval(interval<T1, Policies1> const &r)
188
+ {
189
+ typedef typename Policies1::checking checking1;
190
+ if (checking1::is_empty(r.lower(), r.upper())) set_empty();
191
+ else {
192
+ rounding rnd;
193
+ low = rnd.conv_down(r.lower());
194
+ up = rnd.conv_up (r.upper());
195
+ }
196
+ }
197
+
198
+ template<class T, class Policies> inline
199
+ interval<T, Policies> &interval<T, Policies>::operator=(T const &v)
200
+ {
201
+ if (checking::is_nan(v)) set_empty();
202
+ else low = up = v;
203
+ return *this;
204
+ }
205
+
206
+ template<class T, class Policies> template<class T1> inline
207
+ interval<T, Policies> &interval<T, Policies>::operator=(T1 const &v)
208
+ {
209
+ if (checking::is_nan(v)) set_empty();
210
+ else {
211
+ rounding rnd;
212
+ low = rnd.conv_down(v);
213
+ up = rnd.conv_up (v);
214
+ }
215
+ return *this;
216
+ }
217
+
218
+ template<class T, class Policies> inline
219
+ interval<T, Policies> &interval<T, Policies>::operator=(interval<T, Policies> const &r)
220
+ {
221
+ low = r.lower();
222
+ up = r.upper();
223
+ return *this;
224
+ }
225
+
226
+ template<class T, class Policies> template<class Policies1> inline
227
+ interval<T, Policies> &interval<T, Policies>::operator=(interval<T, Policies1> const &r)
228
+ {
229
+ typedef typename Policies1::checking checking1;
230
+ if (checking1::is_empty(r.lower(), r.upper())) set_empty();
231
+ else {
232
+ low = r.lower();
233
+ up = r.upper();
234
+ }
235
+ return *this;
236
+ }
237
+
238
+ template<class T, class Policies> template<class T1, class Policies1> inline
239
+ interval<T, Policies> &interval<T, Policies>::operator=(interval<T1, Policies1> const &r)
240
+ {
241
+ typedef typename Policies1::checking checking1;
242
+ if (checking1::is_empty(r.lower(), r.upper())) set_empty();
243
+ else {
244
+ rounding rnd;
245
+ low = rnd.conv_down(r.lower());
246
+ up = rnd.conv_up (r.upper());
247
+ }
248
+ return *this;
249
+ }
250
+
251
+ template<class T, class Policies> inline
252
+ void interval<T, Policies>::assign(const T& l, const T& u)
253
+ {
254
+ if (checking::is_nan(l) || checking::is_nan(u) || !(l <= u))
255
+ set_empty();
256
+ else set(l, u);
257
+ }
258
+
259
+ template<class T, class Policies> inline
260
+ void interval<T, Policies>::set(const T& l, const T& u)
261
+ {
262
+ low = l;
263
+ up = u;
264
+ }
265
+
266
+ template<class T, class Policies> inline
267
+ void interval<T, Policies>::set_empty()
268
+ {
269
+ low = checking::empty_lower();
270
+ up = checking::empty_upper();
271
+ }
272
+
273
+ template<class T, class Policies> inline
274
+ void interval<T, Policies>::set_whole()
275
+ {
276
+ low = checking::neg_inf();
277
+ up = checking::pos_inf();
278
+ }
279
+
280
+ template<class T, class Policies> inline
281
+ interval<T, Policies> interval<T, Policies>::hull(const T& x, const T& y)
282
+ {
283
+ bool bad_x = checking::is_nan(x);
284
+ bool bad_y = checking::is_nan(y);
285
+ if (bad_x)
286
+ if (bad_y) return interval::empty();
287
+ else return interval(y, y, true);
288
+ else
289
+ if (bad_y) return interval(x, x, true);
290
+ if (x <= y) return interval(x, y, true);
291
+ else return interval(y, x, true);
292
+ }
293
+
294
+ template<class T, class Policies> inline
295
+ interval<T, Policies> interval<T, Policies>::empty()
296
+ {
297
+ return interval<T, Policies>(checking::empty_lower(),
298
+ checking::empty_upper(), true);
299
+ }
300
+
301
+ template<class T, class Policies> inline
302
+ interval<T, Policies> interval<T, Policies>::whole()
303
+ {
304
+ return interval<T, Policies>(checking::neg_inf(), checking::pos_inf(), true);
305
+ }
306
+
307
+ template<class T, class Policies> inline
308
+ const T& interval<T, Policies>::lower() const
309
+ {
310
+ return low;
311
+ }
312
+
313
+ template<class T, class Policies> inline
314
+ const T& interval<T, Policies>::upper() const
315
+ {
316
+ return up;
317
+ }
318
+
319
+ /*
320
+ * interval/interval comparisons
321
+ */
322
+
323
+ template<class T, class Policies> inline
324
+ bool interval<T, Policies>::operator< (const interval_holder& r) const
325
+ {
326
+ if (!checking::is_empty(low, up)) {
327
+ if (up < r.low) return true;
328
+ else if (low >= r.up) return false;
329
+ }
330
+ throw interval_lib::comparison_error();
331
+ }
332
+
333
+ template<class T, class Policies> inline
334
+ bool interval<T, Policies>::operator> (const interval_holder& r) const
335
+ {
336
+ if (!checking::is_empty(low, up)) {
337
+ if (low > r.up) return true;
338
+ else if (up <= r.low) return false;
339
+ }
340
+ throw interval_lib::comparison_error();
341
+ }
342
+
343
+ template<class T, class Policies> inline
344
+ bool interval<T, Policies>::operator<= (const interval_holder& r) const
345
+ {
346
+ if (!checking::is_empty(low, up)) {
347
+ if (up <= r.low) return true;
348
+ else if (low > r.up) return false;
349
+ }
350
+ throw interval_lib::comparison_error();
351
+ }
352
+
353
+ template<class T, class Policies> inline
354
+ bool interval<T, Policies>::operator>= (const interval_holder& r) const
355
+ {
356
+ if (!checking::is_empty(low, up)) {
357
+ if (low >= r.up) return true;
358
+ else if (up < r.low) return false;
359
+ }
360
+ throw interval_lib::comparison_error();
361
+ }
362
+
363
+ template<class T, class Policies> inline
364
+ bool interval<T, Policies>::operator== (const interval_holder& r) const
365
+ {
366
+ if (!checking::is_empty(low, up)) {
367
+ if (up == r.low && low == r.up) return true;
368
+ else if (up < r.low || low > r.up) return false;
369
+ }
370
+ throw interval_lib::comparison_error();
371
+ }
372
+
373
+ template<class T, class Policies> inline
374
+ bool interval<T, Policies>::operator!= (const interval_holder& r) const
375
+ {
376
+ if (!checking::is_empty(low, up)) {
377
+ if (up < r.low || low > r.up) return true;
378
+ else if (up == r.low && low == r.up) return false;
379
+ }
380
+ throw interval_lib::comparison_error();
381
+ }
382
+
383
+ /*
384
+ * interval/number comparisons
385
+ */
386
+
387
+ template<class T, class Policies> inline
388
+ bool interval<T, Policies>::operator< (const number_holder& r) const
389
+ {
390
+ if (!checking::is_empty(low, up)) {
391
+ if (up < r.val) return true;
392
+ else if (low >= r.val) return false;
393
+ }
394
+ throw interval_lib::comparison_error();
395
+ }
396
+
397
+ template<class T, class Policies> inline
398
+ bool interval<T, Policies>::operator> (const number_holder& r) const
399
+ {
400
+ if (!checking::is_empty(low, up)) {
401
+ if (low > r.val) return true;
402
+ else if (up <= r.val) return false;
403
+ }
404
+ throw interval_lib::comparison_error();
405
+ }
406
+
407
+ template<class T, class Policies> inline
408
+ bool interval<T, Policies>::operator<= (const number_holder& r) const
409
+ {
410
+ if (!checking::is_empty(low, up)) {
411
+ if (up <= r.val) return true;
412
+ else if (low > r.val) return false;
413
+ }
414
+ throw interval_lib::comparison_error();
415
+ }
416
+
417
+ template<class T, class Policies> inline
418
+ bool interval<T, Policies>::operator>= (const number_holder& r) const
419
+ {
420
+ if (!checking::is_empty(low, up)) {
421
+ if (low >= r.val) return true;
422
+ else if (up < r.val) return false;
423
+ }
424
+ throw interval_lib::comparison_error();
425
+ }
426
+
427
+ template<class T, class Policies> inline
428
+ bool interval<T, Policies>::operator== (const number_holder& r) const
429
+ {
430
+ if (!checking::is_empty(low, up)) {
431
+ if (up == r.val && low == r.val) return true;
432
+ else if (up < r.val || low > r.val) return false;
433
+ }
434
+ throw interval_lib::comparison_error();
435
+ }
436
+
437
+ template<class T, class Policies> inline
438
+ bool interval<T, Policies>::operator!= (const number_holder& r) const
439
+ {
440
+ if (!checking::is_empty(low, up)) {
441
+ if (up < r.val || low > r.val) return true;
442
+ else if (up == r.val && low == r.val) return false;
443
+ }
444
+ throw interval_lib::comparison_error();
445
+ }
446
+
447
+ } // namespace numeric
448
+ } // namespace boost
449
+
450
+ #endif // BOOST_NUMERIC_INTERVAL_INTERVAL_HPP
@@ -0,0 +1,41 @@
1
+ /* Boost interval/io.hpp header file
2
+ *
3
+ * This file is only meant to provide a quick
4
+ * implementation of the output operator. It is
5
+ * provided for test programs that aren't even
6
+ * interested in the precision of the results.
7
+ * A real progam should define its own operators
8
+ * and never include this header.
9
+ *
10
+ * Copyright 2003 Guillaume Melquiond
11
+ *
12
+ * Distributed under the Boost Software License, Version 1.0.
13
+ * (See accompanying file LICENSE_1_0.txt or
14
+ * copy at http://www.boost.org/LICENSE_1_0.txt)
15
+ */
16
+
17
+ #ifndef BOOST_NUMERIC_INTERVAL_IO_HPP
18
+ #define BOOST_NUMERIC_INTERVAL_IO_HPP
19
+
20
+ #include <boost/numeric/interval/interval.hpp>
21
+ #include <boost/numeric/interval/utility.hpp>
22
+ #include <ostream>
23
+
24
+ namespace boost {
25
+ namespace numeric {
26
+
27
+ template<class CharType, class CharTraits, class T, class Policies>
28
+ std::basic_ostream<CharType, CharTraits> &operator<<
29
+ (std::basic_ostream<CharType, CharTraits> &stream,
30
+ interval<T, Policies> const &value)
31
+ {
32
+ if (empty(value))
33
+ return stream << "[]";
34
+ else
35
+ return stream << '[' << lower(value) << ',' << upper(value) << ']';
36
+ }
37
+
38
+ } // namespace numeric
39
+ } // namespace boost
40
+
41
+ #endif // BOOST_NUMERIC_INTERVAL_IO_HPP
@@ -0,0 +1,49 @@
1
+ /* Boost interval/limits.hpp template implementation file
2
+ *
3
+ * Copyright 2000 Jens Maurer
4
+ * Copyright 2002-2003 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_LIMITS_HPP
12
+ #define BOOST_NUMERIC_INTERVAL_LIMITS_HPP
13
+
14
+
15
+ #include <boost/config.hpp>
16
+ #include <boost/limits.hpp>
17
+ #include <boost/numeric/interval/detail/interval_prototype.hpp>
18
+
19
+ namespace std {
20
+
21
+ template<class T, class Policies>
22
+ class numeric_limits<boost::numeric::interval<T, Policies> >
23
+ : public numeric_limits<T>
24
+ {
25
+ private:
26
+ typedef boost::numeric::interval<T, Policies> I;
27
+ typedef numeric_limits<T> bl;
28
+ public:
29
+ static I min BOOST_PREVENT_MACRO_SUBSTITUTION () BOOST_NOEXCEPT_OR_NOTHROW { return I((bl::min)(), (bl::min)()); }
30
+ static I max BOOST_PREVENT_MACRO_SUBSTITUTION () BOOST_NOEXCEPT_OR_NOTHROW { return I((bl::max)(), (bl::max)()); }
31
+ static I epsilon() BOOST_NOEXCEPT_OR_NOTHROW { return I(bl::epsilon(), bl::epsilon()); }
32
+
33
+ BOOST_STATIC_CONSTANT(float_round_style, round_style = round_indeterminate);
34
+ BOOST_STATIC_CONSTANT(bool, is_iec559 = false);
35
+
36
+ static I infinity () BOOST_NOEXCEPT_OR_NOTHROW { return I::whole(); }
37
+ static I quiet_NaN() BOOST_NOEXCEPT_OR_NOTHROW { return I::empty(); }
38
+ static I signaling_NaN() BOOST_NOEXCEPT_OR_NOTHROW
39
+ { return I(bl::signaling_NaN(), bl::signaling_Nan()); }
40
+ static I denorm_min() BOOST_NOEXCEPT_OR_NOTHROW
41
+ { return I(bl::denorm_min(), bl::denorm_min()); }
42
+ private:
43
+ static I round_error(); // hide this on purpose, not yet implemented
44
+ };
45
+
46
+ } // namespace std
47
+
48
+
49
+ #endif // BOOST_NUMERIC_INTERVAL_LIMITS_HPP
@@ -0,0 +1,75 @@
1
+ /* Boost interval/policies.hpp template implementation file
2
+ *
3
+ * Copyright 2003 Guillaume Melquiond
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_POLICIES_HPP
11
+ #define BOOST_NUMERIC_INTERVAL_POLICIES_HPP
12
+
13
+ #include <boost/numeric/interval/interval.hpp>
14
+
15
+ namespace boost {
16
+ namespace numeric {
17
+ namespace interval_lib {
18
+
19
+ /*
20
+ * policies class
21
+ */
22
+
23
+ template<class Rounding, class Checking>
24
+ struct policies
25
+ {
26
+ typedef Rounding rounding;
27
+ typedef Checking checking;
28
+ };
29
+
30
+ /*
31
+ * policies switching classes
32
+ */
33
+
34
+ template<class OldInterval, class NewRounding>
35
+ class change_rounding
36
+ {
37
+ typedef typename OldInterval::base_type T;
38
+ typedef typename OldInterval::traits_type p;
39
+ typedef typename p::checking checking;
40
+ public:
41
+ typedef interval<T, policies<NewRounding, checking> > type;
42
+ };
43
+
44
+ template<class OldInterval, class NewChecking>
45
+ class change_checking
46
+ {
47
+ typedef typename OldInterval::base_type T;
48
+ typedef typename OldInterval::traits_type p;
49
+ typedef typename p::rounding rounding;
50
+ public:
51
+ typedef interval<T, policies<rounding, NewChecking> > type;
52
+ };
53
+
54
+ /*
55
+ * Protect / unprotect: control whether the rounding mode is set/reset
56
+ * at each operation, rather than once and for all.
57
+ */
58
+
59
+ template<class OldInterval>
60
+ class unprotect
61
+ {
62
+ typedef typename OldInterval::base_type T;
63
+ typedef typename OldInterval::traits_type p;
64
+ typedef typename p::rounding r;
65
+ typedef typename r::unprotected_rounding newRounding;
66
+ public:
67
+ typedef typename change_rounding<OldInterval, newRounding>::type type;
68
+ };
69
+
70
+ } // namespace interval_lib
71
+ } // namespace numeric
72
+ } // namespace boost
73
+
74
+
75
+ #endif // BOOST_NUMERIC_INTERVAL_POLICIES_HPP