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,609 @@
1
+ //
2
+ // Copyright (c) 2000-2002
3
+ // Joerg Walter, Mathias Koch
4
+ //
5
+ // Distributed under the Boost Software License, Version 1.0. (See
6
+ // accompanying file LICENSE_1_0.txt or copy at
7
+ // http://www.boost.org/LICENSE_1_0.txt)
8
+ //
9
+ // The authors gratefully acknowledge the support of
10
+ // GeNeSys mbH & Co. KG in producing this work.
11
+ //
12
+
13
+ #ifndef _BOOST_UBLAS_VECTOR_ASSIGN_
14
+ #define _BOOST_UBLAS_VECTOR_ASSIGN_
15
+
16
+ #include <boost/numeric/ublas/functional.hpp> // scalar_assign
17
+ // Required for make_conformant storage
18
+ #include <vector>
19
+
20
+ // Iterators based on ideas of Jeremy Siek
21
+
22
+ namespace boost { namespace numeric { namespace ublas {
23
+ namespace detail {
24
+
25
+ // Weak equality check - useful to compare equality two arbitary vector expression results.
26
+ // Since the actual expressions are unknown, we check for and arbitary error bound
27
+ // on the relative error.
28
+ // For a linear expression the infinity norm makes sense as we do not know how the elements will be
29
+ // combined in the expression. False positive results are inevitable for arbirary expressions!
30
+ template<class E1, class E2, class S>
31
+ BOOST_UBLAS_INLINE
32
+ bool equals (const vector_expression<E1> &e1, const vector_expression<E2> &e2, S epsilon, S min_norm) {
33
+ return norm_inf (e1 - e2) <= epsilon *
34
+ std::max<S> (std::max<S> (norm_inf (e1), norm_inf (e2)), min_norm);
35
+ }
36
+
37
+ template<class E1, class E2>
38
+ BOOST_UBLAS_INLINE
39
+ bool expression_type_check (const vector_expression<E1> &e1, const vector_expression<E2> &e2) {
40
+ typedef typename type_traits<typename promote_traits<typename E1::value_type,
41
+ typename E2::value_type>::promote_type>::real_type real_type;
42
+ return equals (e1, e2, BOOST_UBLAS_TYPE_CHECK_EPSILON, BOOST_UBLAS_TYPE_CHECK_MIN);
43
+ }
44
+
45
+
46
+ // Make sparse proxies conformant
47
+ template<class V, class E>
48
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
49
+ void make_conformant (V &v, const vector_expression<E> &e) {
50
+ BOOST_UBLAS_CHECK (v.size () == e ().size (), bad_size ());
51
+ typedef typename V::size_type size_type;
52
+ typedef typename V::difference_type difference_type;
53
+ typedef typename V::value_type value_type;
54
+ // FIXME unbounded_array with push_back maybe better
55
+ std::vector<size_type> index;
56
+ typename V::iterator it (v.begin ());
57
+ typename V::iterator it_end (v.end ());
58
+ typename E::const_iterator ite (e ().begin ());
59
+ typename E::const_iterator ite_end (e ().end ());
60
+ if (it != it_end && ite != ite_end) {
61
+ size_type it_index = it.index (), ite_index = ite.index ();
62
+ for (;;) {
63
+ difference_type compare = it_index - ite_index;
64
+ if (compare == 0) {
65
+ ++ it, ++ ite;
66
+ if (it != it_end && ite != ite_end) {
67
+ it_index = it.index ();
68
+ ite_index = ite.index ();
69
+ } else
70
+ break;
71
+ } else if (compare < 0) {
72
+ increment (it, it_end, - compare);
73
+ if (it != it_end)
74
+ it_index = it.index ();
75
+ else
76
+ break;
77
+ } else if (compare > 0) {
78
+ if (*ite != value_type/*zero*/())
79
+ index.push_back (ite.index ());
80
+ ++ ite;
81
+ if (ite != ite_end)
82
+ ite_index = ite.index ();
83
+ else
84
+ break;
85
+ }
86
+ }
87
+ }
88
+
89
+ while (ite != ite_end) {
90
+ if (*ite != value_type/*zero*/())
91
+ index.push_back (ite.index ());
92
+ ++ ite;
93
+ }
94
+ for (size_type k = 0; k < index.size (); ++ k)
95
+ v (index [k]) = value_type/*zero*/();
96
+ }
97
+
98
+ }//namespace detail
99
+
100
+
101
+ // Explicitly iterating
102
+ template<template <class T1, class T2> class F, class V, class T>
103
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
104
+ void iterating_vector_assign_scalar (V &v, const T &t) {
105
+ typedef F<typename V::iterator::reference, T> functor_type;
106
+ typedef typename V::difference_type difference_type;
107
+ difference_type size (v.size ());
108
+ typename V::iterator it (v.begin ());
109
+ BOOST_UBLAS_CHECK (v.end () - it == size, bad_size ());
110
+ #ifndef BOOST_UBLAS_USE_DUFF_DEVICE
111
+ while (-- size >= 0)
112
+ functor_type::apply (*it, t), ++ it;
113
+ #else
114
+ DD (size, 4, r, (functor_type::apply (*it, t), ++ it));
115
+ #endif
116
+ }
117
+ // Explicitly case
118
+ template<template <class T1, class T2> class F, class V, class T>
119
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
120
+ void indexing_vector_assign_scalar (V &v, const T &t) {
121
+ typedef F<typename V::reference, T> functor_type;
122
+ typedef typename V::size_type size_type;
123
+ size_type size (v.size ());
124
+ #ifndef BOOST_UBLAS_USE_DUFF_DEVICE
125
+ for (size_type i = 0; i < size; ++ i)
126
+ functor_type::apply (v (i), t);
127
+ #else
128
+ size_type i (0);
129
+ DD (size, 4, r, (functor_type::apply (v (i), t), ++ i));
130
+ #endif
131
+ }
132
+
133
+ // Dense (proxy) case
134
+ template<template <class T1, class T2> class F, class V, class T>
135
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
136
+ void vector_assign_scalar (V &v, const T &t, dense_proxy_tag) {
137
+ #ifdef BOOST_UBLAS_USE_INDEXING
138
+ indexing_vector_assign_scalar<F> (v, t);
139
+ #elif BOOST_UBLAS_USE_ITERATING
140
+ iterating_vector_assign_scalar<F> (v, t);
141
+ #else
142
+ typedef typename V::size_type size_type;
143
+ size_type size (v.size ());
144
+ if (size >= BOOST_UBLAS_ITERATOR_THRESHOLD)
145
+ iterating_vector_assign_scalar<F> (v, t);
146
+ else
147
+ indexing_vector_assign_scalar<F> (v, t);
148
+ #endif
149
+ }
150
+ // Packed (proxy) case
151
+ template<template <class T1, class T2> class F, class V, class T>
152
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
153
+ void vector_assign_scalar (V &v, const T &t, packed_proxy_tag) {
154
+ typedef F<typename V::iterator::reference, T> functor_type;
155
+ typedef typename V::difference_type difference_type;
156
+ typename V::iterator it (v.begin ());
157
+ difference_type size (v.end () - it);
158
+ while (-- size >= 0)
159
+ functor_type::apply (*it, t), ++ it;
160
+ }
161
+ // Sparse (proxy) case
162
+ template<template <class T1, class T2> class F, class V, class T>
163
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
164
+ void vector_assign_scalar (V &v, const T &t, sparse_proxy_tag) {
165
+ typedef F<typename V::iterator::reference, T> functor_type;
166
+ typename V::iterator it (v.begin ());
167
+ typename V::iterator it_end (v.end ());
168
+ while (it != it_end)
169
+ functor_type::apply (*it, t), ++ it;
170
+ }
171
+
172
+ // Dispatcher
173
+ template<template <class T1, class T2> class F, class V, class T>
174
+ BOOST_UBLAS_INLINE
175
+ void vector_assign_scalar (V &v, const T &t) {
176
+ typedef typename V::storage_category storage_category;
177
+ vector_assign_scalar<F> (v, t, storage_category ());
178
+ }
179
+
180
+ template<class SC, bool COMPUTED, class RI>
181
+ struct vector_assign_traits {
182
+ typedef SC storage_category;
183
+ };
184
+
185
+ template<bool COMPUTED>
186
+ struct vector_assign_traits<dense_tag, COMPUTED, packed_random_access_iterator_tag> {
187
+ typedef packed_tag storage_category;
188
+ };
189
+ template<>
190
+ struct vector_assign_traits<dense_tag, false, sparse_bidirectional_iterator_tag> {
191
+ typedef sparse_tag storage_category;
192
+ };
193
+ template<>
194
+ struct vector_assign_traits<dense_tag, true, sparse_bidirectional_iterator_tag> {
195
+ typedef sparse_proxy_tag storage_category;
196
+ };
197
+
198
+ template<bool COMPUTED>
199
+ struct vector_assign_traits<dense_proxy_tag, COMPUTED, packed_random_access_iterator_tag> {
200
+ typedef packed_proxy_tag storage_category;
201
+ };
202
+ template<>
203
+ struct vector_assign_traits<dense_proxy_tag, false, sparse_bidirectional_iterator_tag> {
204
+ typedef sparse_proxy_tag storage_category;
205
+ };
206
+ template<>
207
+ struct vector_assign_traits<dense_proxy_tag, true, sparse_bidirectional_iterator_tag> {
208
+ typedef sparse_proxy_tag storage_category;
209
+ };
210
+
211
+ template<>
212
+ struct vector_assign_traits<packed_tag, false, sparse_bidirectional_iterator_tag> {
213
+ typedef sparse_tag storage_category;
214
+ };
215
+ template<>
216
+ struct vector_assign_traits<packed_tag, true, sparse_bidirectional_iterator_tag> {
217
+ typedef sparse_proxy_tag storage_category;
218
+ };
219
+
220
+ template<bool COMPUTED>
221
+ struct vector_assign_traits<packed_proxy_tag, COMPUTED, sparse_bidirectional_iterator_tag> {
222
+ typedef sparse_proxy_tag storage_category;
223
+ };
224
+
225
+ template<>
226
+ struct vector_assign_traits<sparse_tag, true, dense_random_access_iterator_tag> {
227
+ typedef sparse_proxy_tag storage_category;
228
+ };
229
+ template<>
230
+ struct vector_assign_traits<sparse_tag, true, packed_random_access_iterator_tag> {
231
+ typedef sparse_proxy_tag storage_category;
232
+ };
233
+ template<>
234
+ struct vector_assign_traits<sparse_tag, true, sparse_bidirectional_iterator_tag> {
235
+ typedef sparse_proxy_tag storage_category;
236
+ };
237
+
238
+ // Explicitly iterating
239
+ template<template <class T1, class T2> class F, class V, class E>
240
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
241
+ void iterating_vector_assign (V &v, const vector_expression<E> &e) {
242
+ typedef F<typename V::iterator::reference, typename E::value_type> functor_type;
243
+ typedef typename V::difference_type difference_type;
244
+ difference_type size (BOOST_UBLAS_SAME (v.size (), e ().size ()));
245
+ typename V::iterator it (v.begin ());
246
+ BOOST_UBLAS_CHECK (v.end () - it == size, bad_size ());
247
+ typename E::const_iterator ite (e ().begin ());
248
+ BOOST_UBLAS_CHECK (e ().end () - ite == size, bad_size ());
249
+ #ifndef BOOST_UBLAS_USE_DUFF_DEVICE
250
+ while (-- size >= 0)
251
+ functor_type::apply (*it, *ite), ++ it, ++ ite;
252
+ #else
253
+ DD (size, 2, r, (functor_type::apply (*it, *ite), ++ it, ++ ite));
254
+ #endif
255
+ }
256
+ // Explicitly indexing
257
+ template<template <class T1, class T2> class F, class V, class E>
258
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
259
+ void indexing_vector_assign (V &v, const vector_expression<E> &e) {
260
+ typedef F<typename V::reference, typename E::value_type> functor_type;
261
+ typedef typename V::size_type size_type;
262
+ size_type size (BOOST_UBLAS_SAME (v.size (), e ().size ()));
263
+ #ifndef BOOST_UBLAS_USE_DUFF_DEVICE
264
+ for (size_type i = 0; i < size; ++ i)
265
+ functor_type::apply (v (i), e () (i));
266
+ #else
267
+ size_type i (0);
268
+ DD (size, 2, r, (functor_type::apply (v (i), e () (i)), ++ i));
269
+ #endif
270
+ }
271
+
272
+ // Dense (proxy) case
273
+ template<template <class T1, class T2> class F, class V, class E>
274
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
275
+ void vector_assign (V &v, const vector_expression<E> &e, dense_proxy_tag) {
276
+ #ifdef BOOST_UBLAS_USE_INDEXING
277
+ indexing_vector_assign<F> (v, e);
278
+ #elif BOOST_UBLAS_USE_ITERATING
279
+ iterating_vector_assign<F> (v, e);
280
+ #else
281
+ typedef typename V::size_type size_type;
282
+ size_type size (BOOST_UBLAS_SAME (v.size (), e ().size ()));
283
+ if (size >= BOOST_UBLAS_ITERATOR_THRESHOLD)
284
+ iterating_vector_assign<F> (v, e);
285
+ else
286
+ indexing_vector_assign<F> (v, e);
287
+ #endif
288
+ }
289
+ // Packed (proxy) case
290
+ template<template <class T1, class T2> class F, class V, class E>
291
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
292
+ void vector_assign (V &v, const vector_expression<E> &e, packed_proxy_tag) {
293
+ BOOST_UBLAS_CHECK (v.size () == e ().size (), bad_size ());
294
+ typedef F<typename V::iterator::reference, typename E::value_type> functor_type;
295
+ typedef typename V::difference_type difference_type;
296
+ typedef typename V::value_type value_type;
297
+ #if BOOST_UBLAS_TYPE_CHECK
298
+ vector<value_type> cv (v.size ());
299
+ indexing_vector_assign<scalar_assign> (cv, v);
300
+ indexing_vector_assign<F> (cv, e);
301
+ #endif
302
+ typename V::iterator it (v.begin ());
303
+ typename V::iterator it_end (v.end ());
304
+ typename E::const_iterator ite (e ().begin ());
305
+ typename E::const_iterator ite_end (e ().end ());
306
+ difference_type it_size (it_end - it);
307
+ difference_type ite_size (ite_end - ite);
308
+ if (it_size > 0 && ite_size > 0) {
309
+ difference_type size ((std::min) (difference_type (it.index () - ite.index ()), ite_size));
310
+ if (size > 0) {
311
+ ite += size;
312
+ ite_size -= size;
313
+ }
314
+ }
315
+ if (it_size > 0 && ite_size > 0) {
316
+ difference_type size ((std::min) (difference_type (ite.index () - it.index ()), it_size));
317
+ if (size > 0) {
318
+ it_size -= size;
319
+ //Disabled warning C4127 because the conditional expression is constant
320
+ #ifdef _MSC_VER
321
+ #pragma warning(push)
322
+ #pragma warning(disable: 4127)
323
+ #endif
324
+ if (!functor_type::computed) {
325
+ #ifdef _MSC_VER
326
+ #pragma warning(pop)
327
+ #endif
328
+ while (-- size >= 0) // zeroing
329
+ functor_type::apply (*it, value_type/*zero*/()), ++ it;
330
+ } else {
331
+ it += size;
332
+ }
333
+ }
334
+ }
335
+ difference_type size ((std::min) (it_size, ite_size));
336
+ it_size -= size;
337
+ ite_size -= size;
338
+ while (-- size >= 0)
339
+ functor_type::apply (*it, *ite), ++ it, ++ ite;
340
+ size = it_size;
341
+ //Disabled warning C4127 because the conditional expression is constant
342
+ #ifdef _MSC_VER
343
+ #pragma warning(push)
344
+ #pragma warning(disable: 4127)
345
+ #endif
346
+ if (!functor_type::computed) {
347
+ #ifdef _MSC_VER
348
+ #pragma warning(pop)
349
+ #endif
350
+ while (-- size >= 0) // zeroing
351
+ functor_type::apply (*it, value_type/*zero*/()), ++ it;
352
+ } else {
353
+ it += size;
354
+ }
355
+ #if BOOST_UBLAS_TYPE_CHECK
356
+ if (! disable_type_check<bool>::value)
357
+ BOOST_UBLAS_CHECK (detail::expression_type_check (v, cv),
358
+ external_logic ("external logic or bad condition of inputs"));
359
+ #endif
360
+ }
361
+ // Sparse case
362
+ template<template <class T1, class T2> class F, class V, class E>
363
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
364
+ void vector_assign (V &v, const vector_expression<E> &e, sparse_tag) {
365
+ BOOST_UBLAS_CHECK (v.size () == e ().size (), bad_size ());
366
+ typedef F<typename V::iterator::reference, typename E::value_type> functor_type;
367
+ //Disabled warning C4127 because the conditional expression is constant
368
+ #ifdef _MSC_VER
369
+ #pragma warning(push)
370
+ #pragma warning(disable: 4127)
371
+ #endif
372
+ BOOST_STATIC_ASSERT ((!functor_type::computed));
373
+ #ifdef _MSC_VER
374
+ #pragma warning(pop)
375
+ #endif
376
+ typedef typename V::value_type value_type;
377
+ #if BOOST_UBLAS_TYPE_CHECK
378
+ vector<value_type> cv (v.size ());
379
+ indexing_vector_assign<scalar_assign> (cv, v);
380
+ indexing_vector_assign<F> (cv, e);
381
+ #endif
382
+ v.clear ();
383
+ typename E::const_iterator ite (e ().begin ());
384
+ typename E::const_iterator ite_end (e ().end ());
385
+ while (ite != ite_end) {
386
+ value_type t (*ite);
387
+ if (t != value_type/*zero*/())
388
+ v.insert_element (ite.index (), t);
389
+ ++ ite;
390
+ }
391
+ #if BOOST_UBLAS_TYPE_CHECK
392
+ if (! disable_type_check<bool>::value)
393
+ BOOST_UBLAS_CHECK (detail::expression_type_check (v, cv),
394
+ external_logic ("external logic or bad condition of inputs"));
395
+ #endif
396
+ }
397
+ // Sparse proxy or functional case
398
+ template<template <class T1, class T2> class F, class V, class E>
399
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
400
+ void vector_assign (V &v, const vector_expression<E> &e, sparse_proxy_tag) {
401
+ BOOST_UBLAS_CHECK (v.size () == e ().size (), bad_size ());
402
+ typedef F<typename V::iterator::reference, typename E::value_type> functor_type;
403
+ typedef typename V::size_type size_type;
404
+ typedef typename V::difference_type difference_type;
405
+ typedef typename V::value_type value_type;
406
+
407
+ #if BOOST_UBLAS_TYPE_CHECK
408
+ vector<value_type> cv (v.size ());
409
+ indexing_vector_assign<scalar_assign> (cv, v);
410
+ indexing_vector_assign<F> (cv, e);
411
+ #endif
412
+ detail::make_conformant (v, e);
413
+
414
+ typename V::iterator it (v.begin ());
415
+ typename V::iterator it_end (v.end ());
416
+ typename E::const_iterator ite (e ().begin ());
417
+ typename E::const_iterator ite_end (e ().end ());
418
+ if (it != it_end && ite != ite_end) {
419
+ size_type it_index = it.index (), ite_index = ite.index ();
420
+ for (;;) {
421
+ difference_type compare = it_index - ite_index;
422
+ if (compare == 0) {
423
+ functor_type::apply (*it, *ite);
424
+ ++ it, ++ ite;
425
+ if (it != it_end && ite != ite_end) {
426
+ it_index = it.index ();
427
+ ite_index = ite.index ();
428
+ } else
429
+ break;
430
+ } else if (compare < 0) {
431
+ //Disabled warning C4127 because the conditional expression is constant
432
+ #ifdef _MSC_VER
433
+ #pragma warning(push)
434
+ #pragma warning(disable: 4127)
435
+ #endif
436
+ if (!functor_type::computed) {
437
+ #ifdef _MSC_VER
438
+ #pragma warning(pop)
439
+ #endif
440
+ functor_type::apply (*it, value_type/*zero*/());
441
+ ++ it;
442
+ } else
443
+ increment (it, it_end, - compare);
444
+ if (it != it_end)
445
+ it_index = it.index ();
446
+ else
447
+ break;
448
+ } else if (compare > 0) {
449
+ increment (ite, ite_end, compare);
450
+ if (ite != ite_end)
451
+ ite_index = ite.index ();
452
+ else
453
+ break;
454
+ }
455
+ }
456
+ }
457
+ //Disabled warning C4127 because the conditional expression is constant
458
+ #ifdef _MSC_VER
459
+ #pragma warning(push)
460
+ #pragma warning(disable: 4127)
461
+ #endif
462
+ if (!functor_type::computed) {
463
+ #ifdef _MSC_VER
464
+ #pragma warning(pop)
465
+ #endif
466
+ while (it != it_end) { // zeroing
467
+ functor_type::apply (*it, value_type/*zero*/());
468
+ ++ it;
469
+ }
470
+ } else {
471
+ it = it_end;
472
+ }
473
+ #if BOOST_UBLAS_TYPE_CHECK
474
+ if (! disable_type_check<bool>::value)
475
+ BOOST_UBLAS_CHECK (detail::expression_type_check (v, cv),
476
+ external_logic ("external logic or bad condition of inputs"));
477
+ #endif
478
+ }
479
+
480
+ // Dispatcher
481
+ template<template <class T1, class T2> class F, class V, class E>
482
+ BOOST_UBLAS_INLINE
483
+ void vector_assign (V &v, const vector_expression<E> &e) {
484
+ typedef typename vector_assign_traits<typename V::storage_category,
485
+ F<typename V::reference, typename E::value_type>::computed,
486
+ typename E::const_iterator::iterator_category>::storage_category storage_category;
487
+ vector_assign<F> (v, e, storage_category ());
488
+ }
489
+
490
+ template<class SC, class RI>
491
+ struct vector_swap_traits {
492
+ typedef SC storage_category;
493
+ };
494
+
495
+ template<>
496
+ struct vector_swap_traits<dense_proxy_tag, sparse_bidirectional_iterator_tag> {
497
+ typedef sparse_proxy_tag storage_category;
498
+ };
499
+
500
+ template<>
501
+ struct vector_swap_traits<packed_proxy_tag, sparse_bidirectional_iterator_tag> {
502
+ typedef sparse_proxy_tag storage_category;
503
+ };
504
+
505
+ // Dense (proxy) case
506
+ template<template <class T1, class T2> class F, class V, class E>
507
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
508
+ void vector_swap (V &v, vector_expression<E> &e, dense_proxy_tag) {
509
+ typedef F<typename V::iterator::reference, typename E::iterator::reference> functor_type;
510
+ typedef typename V::difference_type difference_type;
511
+ difference_type size (BOOST_UBLAS_SAME (v.size (), e ().size ()));
512
+ typename V::iterator it (v.begin ());
513
+ typename E::iterator ite (e ().begin ());
514
+ while (-- size >= 0)
515
+ functor_type::apply (*it, *ite), ++ it, ++ ite;
516
+ }
517
+ // Packed (proxy) case
518
+ template<template <class T1, class T2> class F, class V, class E>
519
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
520
+ void vector_swap (V &v, vector_expression<E> &e, packed_proxy_tag) {
521
+ typedef F<typename V::iterator::reference, typename E::iterator::reference> functor_type;
522
+ typedef typename V::difference_type difference_type;
523
+ typename V::iterator it (v.begin ());
524
+ typename V::iterator it_end (v.end ());
525
+ typename E::iterator ite (e ().begin ());
526
+ typename E::iterator ite_end (e ().end ());
527
+ difference_type it_size (it_end - it);
528
+ difference_type ite_size (ite_end - ite);
529
+ if (it_size > 0 && ite_size > 0) {
530
+ difference_type size ((std::min) (difference_type (it.index () - ite.index ()), ite_size));
531
+ if (size > 0) {
532
+ ite += size;
533
+ ite_size -= size;
534
+ }
535
+ }
536
+ if (it_size > 0 && ite_size > 0) {
537
+ difference_type size ((std::min) (difference_type (ite.index () - it.index ()), it_size));
538
+ if (size > 0)
539
+ it_size -= size;
540
+ }
541
+ difference_type size ((std::min) (it_size, ite_size));
542
+ it_size -= size;
543
+ ite_size -= size;
544
+ while (-- size >= 0)
545
+ functor_type::apply (*it, *ite), ++ it, ++ ite;
546
+ }
547
+ // Sparse proxy case
548
+ template<template <class T1, class T2> class F, class V, class E>
549
+ // BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
550
+ void vector_swap (V &v, vector_expression<E> &e, sparse_proxy_tag) {
551
+ BOOST_UBLAS_CHECK (v.size () == e ().size (), bad_size ());
552
+ typedef F<typename V::iterator::reference, typename E::iterator::reference> functor_type;
553
+ typedef typename V::size_type size_type;
554
+ typedef typename V::difference_type difference_type;
555
+
556
+ detail::make_conformant (v, e);
557
+ // FIXME should be a seperate restriction for E
558
+ detail::make_conformant (e (), v);
559
+
560
+ typename V::iterator it (v.begin ());
561
+ typename V::iterator it_end (v.end ());
562
+ typename E::iterator ite (e ().begin ());
563
+ typename E::iterator ite_end (e ().end ());
564
+ if (it != it_end && ite != ite_end) {
565
+ size_type it_index = it.index (), ite_index = ite.index ();
566
+ for (;;) {
567
+ difference_type compare = it_index - ite_index;
568
+ if (compare == 0) {
569
+ functor_type::apply (*it, *ite);
570
+ ++ it, ++ ite;
571
+ if (it != it_end && ite != ite_end) {
572
+ it_index = it.index ();
573
+ ite_index = ite.index ();
574
+ } else
575
+ break;
576
+ } else if (compare < 0) {
577
+ increment (it, it_end, - compare);
578
+ if (it != it_end)
579
+ it_index = it.index ();
580
+ else
581
+ break;
582
+ } else if (compare > 0) {
583
+ increment (ite, ite_end, compare);
584
+ if (ite != ite_end)
585
+ ite_index = ite.index ();
586
+ else
587
+ break;
588
+ }
589
+ }
590
+ }
591
+
592
+ #if BOOST_UBLAS_TYPE_CHECK
593
+ increment (ite, ite_end);
594
+ increment (it, it_end);
595
+ #endif
596
+ }
597
+
598
+ // Dispatcher
599
+ template<template <class T1, class T2> class F, class V, class E>
600
+ BOOST_UBLAS_INLINE
601
+ void vector_swap (V &v, vector_expression<E> &e) {
602
+ typedef typename vector_swap_traits<typename V::storage_category,
603
+ typename E::const_iterator::iterator_category>::storage_category storage_category;
604
+ vector_swap<F> (v, e, storage_category ());
605
+ }
606
+
607
+ }}}
608
+
609
+ #endif
@@ -0,0 +1,58 @@
1
+ // Copyright (c) 2010-2011 David Bellot
2
+ //
3
+ // Distributed under the Boost Software License, Version 1.0. (See
4
+ // accompanying file LICENSE_1_0.txt or copy at
5
+ // http://www.boost.org/LICENSE_1_0.txt)
6
+
7
+ /** \mainpage BOOST uBLAS: a Linear Algebra Library
8
+ *
9
+ * This is the API Reference Documentation.
10
+ *
11
+ * \section main_classes Main classes
12
+ *
13
+ * \subsection listvector Vectors
14
+ * - \link #boost::numeric::ublas::vector vector \endlink
15
+ * - \link #boost::numeric::ublas::bounded_vector bounded_vector \endlink
16
+ * - \link #boost::numeric::ublas::zero_vector zero_vector \endlink
17
+ * - \link #boost::numeric::ublas::unit_vector unit_vector \endlink
18
+ * - \link #boost::numeric::ublas::scalar_vector scalar_vector \endlink
19
+ * - \link #boost::numeric::ublas::c_vector c_vector \endlink
20
+ * - \link #boost::numeric::ublas::vector_slice vector_slice \endlink
21
+ * - \link #boost::numeric::ublas::vector_range vector_range \endlink
22
+ * - \link #boost::numeric::ublas::vector_indirect vector_indirect \endlink
23
+ * - \link #boost::numeric::ublas::mapped_vector mapped_vector \endlink
24
+ * - \link #boost::numeric::ublas::compressed_vector compressed_vector \endlink
25
+ * - \link #boost::numeric::ublas::coordinate_vector coordinate_vector \endlink
26
+ * - \link #boost::numeric::ublas::matrix_row matrix_row \endlink
27
+ * - \link #boost::numeric::ublas::matrix_column matrix_column \endlink
28
+ *
29
+ * \subsection listmatrix Matrices
30
+ * - \link #boost::numeric::ublas::matrix matrix \endlink
31
+ * - \link #boost::numeric::ublas::banded_matrix banded_matrix \endlink
32
+ * - \link #boost::numeric::ublas::diagonal_matrix diagonal_matrix \endlink
33
+ * - \link #boost::numeric::ublas::banded_adaptor banded_adaptor \endlink
34
+ * - \link #boost::numeric::ublas::diagonal_adaptor diagonal_adaptor \endlink
35
+ * - \link #boost::numeric::ublas::hermitian_matrix hermitian_matrix \endlink
36
+ * - \link #boost::numeric::ublas::hermitian_adaptor hermitian_adaptor \endlink
37
+ * - \link #boost::numeric::ublas::symmetric_matrix symmetric_matrix \endlink
38
+ * - \link #boost::numeric::ublas::symmetric_adaptor symmetric_adaptor \endlink
39
+ * - \link #boost::numeric::ublas::triangular_matrix triangular_matrix \endlink
40
+ * - \link #boost::numeric::ublas::triangular_adaptor triangular_adaptor \endlink
41
+ * - \link #boost::numeric::ublas::vector_of_vector vector_of_vector \endlink
42
+ * - \link #boost::numeric::ublas::bounded_matrix bounded_matrix \endlink
43
+ * - \link #boost::numeric::ublas::zero_matrix zero_matrix \endlink
44
+ * - \link #boost::numeric::ublas::identity_matrix identity_matrix \endlink
45
+ * - \link #boost::numeric::ublas::scalar_matrix scalar_matrix \endlink
46
+ * - \link #boost::numeric::ublas::c_matrix c_matrix \endlink
47
+ * - \link #boost::numeric::ublas::matrix_vector_range matrix_vector_range \endlink
48
+ * - \link #boost::numeric::ublas::matrix_vector_slice matrix_vector_slice \endlink
49
+ * - \link #boost::numeric::ublas::matrix_vector_indirect matrix_vector_indirect \endlink
50
+ * - \link #boost::numeric::ublas::matrix_range matrix_range \endlink
51
+ * - \link #boost::numeric::ublas::matrix_slice matrix_slice \endlink
52
+ * - \link #boost::numeric::ublas::matrix_indirect matrix_indirect \endlink
53
+ * - \link #boost::numeric::ublas::mapped_matrix mapped_matrix \endlink
54
+ * - \link #boost::numeric::ublas::mapped_vector_of_mapped_vector mapped_vector_of_mapped_vector \endlink
55
+ * - \link #boost::numeric::ublas::compressed_matrix compressed_matrix \endlink
56
+ * - \link #boost::numeric::ublas::coordinate_matrix coordinate_matrix \endlink
57
+ * - \link #boost::numeric::ublas::generalized_vector_of_vector generalized_vector_of_vector \endlink
58
+ */