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,753 @@
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_TRAITS_
14
+ #define _BOOST_UBLAS_TRAITS_
15
+
16
+ #include <iterator>
17
+ #include <complex>
18
+ #include <boost/config/no_tr1/cmath.hpp>
19
+
20
+ #include <boost/numeric/ublas/detail/config.hpp>
21
+ #include <boost/numeric/ublas/detail/iterator.hpp>
22
+ #include <boost/numeric/ublas/detail/returntype_deduction.hpp>
23
+ #ifdef BOOST_UBLAS_USE_INTERVAL
24
+ #include <boost/numeric/interval.hpp>
25
+ #endif
26
+
27
+ #include <boost/type_traits.hpp>
28
+ #include <complex>
29
+ #include <boost/typeof/typeof.hpp>
30
+ #include <boost/utility/enable_if.hpp>
31
+ #include <boost/type_traits/is_float.hpp>
32
+ #include <boost/type_traits/is_integral.hpp>
33
+ #include <boost/type_traits/is_unsigned.hpp>
34
+ #include <boost/mpl/and.hpp>
35
+ #include <boost/mpl/if.hpp>
36
+ #include <boost/typeof/typeof.hpp>
37
+
38
+
39
+ // anonymous namespace to avoid ADL issues
40
+ namespace {
41
+ template<class T>
42
+ typename boost::mpl::if_c<boost::is_integral<T>::value,
43
+ double,
44
+ T>::type
45
+ boost_numeric_ublas_sqrt (const T& t) {
46
+ using namespace std;
47
+ // we'll find either std::sqrt or else another version via ADL:
48
+ return sqrt (t);
49
+ }
50
+
51
+ template<typename T>
52
+ inline typename boost::disable_if<
53
+ boost::is_unsigned<T>, T >::type
54
+ boost_numeric_ublas_abs (const T &t ) {
55
+ using namespace std;
56
+ // force a type conversion back to T for char and short types
57
+ return static_cast<T>(abs( t ));
58
+ }
59
+
60
+ template<typename T>
61
+ inline typename boost::enable_if<
62
+ boost::is_unsigned<T>, T >::type
63
+ boost_numeric_ublas_abs (const T &t ) {
64
+ return t;
65
+ }
66
+ }
67
+
68
+ namespace boost { namespace numeric { namespace ublas {
69
+
70
+
71
+ template<typename R, typename I>
72
+ typename boost::enable_if<
73
+ mpl::and_<
74
+ boost::is_float<R>,
75
+ boost::is_integral<I>
76
+ >,
77
+ std::complex<R> >::type inline operator+ (I in1, std::complex<R> const& in2 ) {
78
+ return R (in1) + in2;
79
+ }
80
+
81
+ template<typename R, typename I>
82
+ typename boost::enable_if<
83
+ mpl::and_<
84
+ boost::is_float<R>,
85
+ boost::is_integral<I>
86
+ >,
87
+ std::complex<R> >::type inline operator+ (std::complex<R> const& in1, I in2) {
88
+ return in1 + R (in2);
89
+ }
90
+
91
+ template<typename R, typename I>
92
+ typename boost::enable_if<
93
+ mpl::and_<
94
+ boost::is_float<R>,
95
+ boost::is_integral<I>
96
+ >,
97
+ std::complex<R> >::type inline operator- (I in1, std::complex<R> const& in2) {
98
+ return R (in1) - in2;
99
+ }
100
+
101
+ template<typename R, typename I>
102
+ typename boost::enable_if<
103
+ mpl::and_<
104
+ boost::is_float<R>,
105
+ boost::is_integral<I>
106
+ >,
107
+ std::complex<R> >::type inline operator- (std::complex<R> const& in1, I in2) {
108
+ return in1 - R (in2);
109
+ }
110
+
111
+ template<typename R, typename I>
112
+ typename boost::enable_if<
113
+ mpl::and_<
114
+ boost::is_float<R>,
115
+ boost::is_integral<I>
116
+ >,
117
+ std::complex<R> >::type inline operator* (I in1, std::complex<R> const& in2) {
118
+ return R (in1) * in2;
119
+ }
120
+
121
+ template<typename R, typename I>
122
+ typename boost::enable_if<
123
+ mpl::and_<
124
+ boost::is_float<R>,
125
+ boost::is_integral<I>
126
+ >,
127
+ std::complex<R> >::type inline operator* (std::complex<R> const& in1, I in2) {
128
+ return in1 * R(in2);
129
+ }
130
+
131
+ template<typename R, typename I>
132
+ typename boost::enable_if<
133
+ mpl::and_<
134
+ boost::is_float<R>,
135
+ boost::is_integral<I>
136
+ >,
137
+ std::complex<R> >::type inline operator/ (I in1, std::complex<R> const& in2) {
138
+ return R(in1) / in2;
139
+ }
140
+
141
+ template<typename R, typename I>
142
+ typename boost::enable_if<
143
+ mpl::and_<
144
+ boost::is_float<R>,
145
+ boost::is_integral<I>
146
+ >,
147
+ std::complex<R> >::type inline operator/ (std::complex<R> const& in1, I in2) {
148
+ return in1 / R (in2);
149
+ }
150
+
151
+ // uBLAS assumes a common return type for all binary arithmetic operators
152
+ template<class X, class Y>
153
+ struct promote_traits {
154
+ typedef BOOST_TYPEOF_TPL(X() + Y()) promote_type;
155
+ };
156
+
157
+
158
+
159
+ // Type traits - generic numeric properties and functions
160
+ template<class T>
161
+ struct type_traits;
162
+
163
+ // Define properties for a generic scalar type
164
+ template<class T>
165
+ struct scalar_traits {
166
+ typedef scalar_traits<T> self_type;
167
+ typedef T value_type;
168
+ typedef const T &const_reference;
169
+ typedef T &reference;
170
+
171
+ typedef T real_type;
172
+ typedef real_type precision_type; // we do not know what type has more precision then the real_type
173
+
174
+ static const unsigned plus_complexity = 1;
175
+ static const unsigned multiplies_complexity = 1;
176
+
177
+ static
178
+ BOOST_UBLAS_INLINE
179
+ real_type real (const_reference t) {
180
+ return t;
181
+ }
182
+ static
183
+ BOOST_UBLAS_INLINE
184
+ real_type imag (const_reference /*t*/) {
185
+ return 0;
186
+ }
187
+ static
188
+ BOOST_UBLAS_INLINE
189
+ value_type conj (const_reference t) {
190
+ return t;
191
+ }
192
+
193
+ static
194
+ BOOST_UBLAS_INLINE
195
+ real_type type_abs (const_reference t) {
196
+ return boost_numeric_ublas_abs (t);
197
+ }
198
+ static
199
+ BOOST_UBLAS_INLINE
200
+ value_type type_sqrt (const_reference t) {
201
+ // force a type conversion back to value_type for intgral types
202
+ return value_type (boost_numeric_ublas_sqrt (t));
203
+ }
204
+
205
+ static
206
+ BOOST_UBLAS_INLINE
207
+ real_type norm_1 (const_reference t) {
208
+ return self_type::type_abs (t);
209
+ }
210
+ static
211
+ BOOST_UBLAS_INLINE
212
+ real_type norm_2 (const_reference t) {
213
+ return self_type::type_abs (t);
214
+ }
215
+ static
216
+ BOOST_UBLAS_INLINE
217
+ real_type norm_inf (const_reference t) {
218
+ return self_type::type_abs (t);
219
+ }
220
+
221
+ static
222
+ BOOST_UBLAS_INLINE
223
+ bool equals (const_reference t1, const_reference t2) {
224
+ return self_type::norm_inf (t1 - t2) < BOOST_UBLAS_TYPE_CHECK_EPSILON *
225
+ (std::max) ((std::max) (self_type::norm_inf (t1),
226
+ self_type::norm_inf (t2)),
227
+ BOOST_UBLAS_TYPE_CHECK_MIN);
228
+ }
229
+ };
230
+
231
+ // Define default type traits, assume T is a scalar type
232
+ template<class T>
233
+ struct type_traits : scalar_traits <T> {
234
+ typedef type_traits<T> self_type;
235
+ typedef T value_type;
236
+ typedef const T &const_reference;
237
+ typedef T &reference;
238
+
239
+ typedef T real_type;
240
+ typedef real_type precision_type;
241
+ static const unsigned multiplies_complexity = 1;
242
+
243
+ };
244
+
245
+ // Define real type traits
246
+ template<>
247
+ struct type_traits<float> : scalar_traits<float> {
248
+ typedef type_traits<float> self_type;
249
+ typedef float value_type;
250
+ typedef const value_type &const_reference;
251
+ typedef value_type &reference;
252
+ typedef value_type real_type;
253
+ typedef double precision_type;
254
+ };
255
+ template<>
256
+ struct type_traits<double> : scalar_traits<double> {
257
+ typedef type_traits<double> self_type;
258
+ typedef double value_type;
259
+ typedef const value_type &const_reference;
260
+ typedef value_type &reference;
261
+ typedef value_type real_type;
262
+ typedef long double precision_type;
263
+ };
264
+ template<>
265
+ struct type_traits<long double> : scalar_traits<long double> {
266
+ typedef type_traits<long double> self_type;
267
+ typedef long double value_type;
268
+ typedef const value_type &const_reference;
269
+ typedef value_type &reference;
270
+ typedef value_type real_type;
271
+ typedef value_type precision_type;
272
+ };
273
+
274
+ // Define properties for a generic complex type
275
+ template<class T>
276
+ struct complex_traits {
277
+ typedef complex_traits<T> self_type;
278
+ typedef T value_type;
279
+ typedef const T &const_reference;
280
+ typedef T &reference;
281
+
282
+ typedef typename T::value_type real_type;
283
+ typedef real_type precision_type; // we do not know what type has more precision then the real_type
284
+
285
+ static const unsigned plus_complexity = 2;
286
+ static const unsigned multiplies_complexity = 6;
287
+
288
+ static
289
+ BOOST_UBLAS_INLINE
290
+ real_type real (const_reference t) {
291
+ return std::real (t);
292
+ }
293
+ static
294
+ BOOST_UBLAS_INLINE
295
+ real_type imag (const_reference t) {
296
+ return std::imag (t);
297
+ }
298
+ static
299
+ BOOST_UBLAS_INLINE
300
+ value_type conj (const_reference t) {
301
+ return std::conj (t);
302
+ }
303
+
304
+ static
305
+ BOOST_UBLAS_INLINE
306
+ real_type type_abs (const_reference t) {
307
+ return abs (t);
308
+ }
309
+ static
310
+ BOOST_UBLAS_INLINE
311
+ value_type type_sqrt (const_reference t) {
312
+ return sqrt (t);
313
+ }
314
+
315
+ static
316
+ BOOST_UBLAS_INLINE
317
+ real_type norm_1 (const_reference t) {
318
+ return self_type::type_abs (t);
319
+ // original computation has been replaced because a complex number should behave like a scalar type
320
+ // return type_traits<real_type>::type_abs (self_type::real (t)) +
321
+ // type_traits<real_type>::type_abs (self_type::imag (t));
322
+ }
323
+ static
324
+ BOOST_UBLAS_INLINE
325
+ real_type norm_2 (const_reference t) {
326
+ return self_type::type_abs (t);
327
+ }
328
+ static
329
+ BOOST_UBLAS_INLINE
330
+ real_type norm_inf (const_reference t) {
331
+ return self_type::type_abs (t);
332
+ // original computation has been replaced because a complex number should behave like a scalar type
333
+ // return (std::max) (type_traits<real_type>::type_abs (self_type::real (t)),
334
+ // type_traits<real_type>::type_abs (self_type::imag (t)));
335
+ }
336
+
337
+ static
338
+ BOOST_UBLAS_INLINE
339
+ bool equals (const_reference t1, const_reference t2) {
340
+ return self_type::norm_inf (t1 - t2) < BOOST_UBLAS_TYPE_CHECK_EPSILON *
341
+ (std::max) ((std::max) (self_type::norm_inf (t1),
342
+ self_type::norm_inf (t2)),
343
+ BOOST_UBLAS_TYPE_CHECK_MIN);
344
+ }
345
+ };
346
+
347
+ // Define complex type traits
348
+ template<>
349
+ struct type_traits<std::complex<float> > : complex_traits<std::complex<float> >{
350
+ typedef type_traits<std::complex<float> > self_type;
351
+ typedef std::complex<float> value_type;
352
+ typedef const value_type &const_reference;
353
+ typedef value_type &reference;
354
+ typedef float real_type;
355
+ typedef std::complex<double> precision_type;
356
+
357
+ };
358
+ template<>
359
+ struct type_traits<std::complex<double> > : complex_traits<std::complex<double> >{
360
+ typedef type_traits<std::complex<double> > self_type;
361
+ typedef std::complex<double> value_type;
362
+ typedef const value_type &const_reference;
363
+ typedef value_type &reference;
364
+ typedef double real_type;
365
+ typedef std::complex<long double> precision_type;
366
+ };
367
+ template<>
368
+ struct type_traits<std::complex<long double> > : complex_traits<std::complex<long double> > {
369
+ typedef type_traits<std::complex<long double> > self_type;
370
+ typedef std::complex<long double> value_type;
371
+ typedef const value_type &const_reference;
372
+ typedef value_type &reference;
373
+ typedef long double real_type;
374
+ typedef value_type precision_type;
375
+ };
376
+
377
+ #ifdef BOOST_UBLAS_USE_INTERVAL
378
+ // Define scalar interval type traits
379
+ template<>
380
+ struct type_traits<boost::numeric::interval<float> > : scalar_traits<boost::numeric::interval<float> > {
381
+ typedef type_traits<boost::numeric::interval<float> > self_type;
382
+ typedef boost::numeric::interval<float> value_type;
383
+ typedef const value_type &const_reference;
384
+ typedef value_type &reference;
385
+ typedef value_type real_type;
386
+ typedef boost::numeric::interval<double> precision_type;
387
+
388
+ };
389
+ template<>
390
+ struct type_traits<boost::numeric::interval<double> > : scalar_traits<boost::numeric::interval<double> > {
391
+ typedef type_traits<boost::numeric::interval<double> > self_type;
392
+ typedef boost::numeric::interval<double> value_type;
393
+ typedef const value_type &const_reference;
394
+ typedef value_type &reference;
395
+ typedef value_type real_type;
396
+ typedef boost::numeric::interval<long double> precision_type;
397
+ };
398
+ template<>
399
+ struct type_traits<boost::numeric::interval<long double> > : scalar_traits<boost::numeric::interval<long double> > {
400
+ typedef type_traits<boost::numeric::interval<long double> > self_type;
401
+ typedef boost::numeric::interval<long double> value_type;
402
+ typedef const value_type &const_reference;
403
+ typedef value_type &reference;
404
+ typedef value_type real_type;
405
+ typedef value_type precision_type;
406
+ };
407
+ #endif
408
+
409
+
410
+ // Storage tags -- hierarchical definition of storage characteristics
411
+
412
+ struct unknown_storage_tag {};
413
+ struct sparse_proxy_tag: public unknown_storage_tag {};
414
+ struct sparse_tag: public sparse_proxy_tag {};
415
+ struct packed_proxy_tag: public sparse_proxy_tag {};
416
+ struct packed_tag: public packed_proxy_tag {};
417
+ struct dense_proxy_tag: public packed_proxy_tag {};
418
+ struct dense_tag: public dense_proxy_tag {};
419
+
420
+ template<class S1, class S2>
421
+ struct storage_restrict_traits {
422
+ typedef S1 storage_category;
423
+ };
424
+
425
+ template<>
426
+ struct storage_restrict_traits<sparse_tag, dense_proxy_tag> {
427
+ typedef sparse_proxy_tag storage_category;
428
+ };
429
+ template<>
430
+ struct storage_restrict_traits<sparse_tag, packed_proxy_tag> {
431
+ typedef sparse_proxy_tag storage_category;
432
+ };
433
+ template<>
434
+ struct storage_restrict_traits<sparse_tag, sparse_proxy_tag> {
435
+ typedef sparse_proxy_tag storage_category;
436
+ };
437
+
438
+ template<>
439
+ struct storage_restrict_traits<packed_tag, dense_proxy_tag> {
440
+ typedef packed_proxy_tag storage_category;
441
+ };
442
+ template<>
443
+ struct storage_restrict_traits<packed_tag, packed_proxy_tag> {
444
+ typedef packed_proxy_tag storage_category;
445
+ };
446
+ template<>
447
+ struct storage_restrict_traits<packed_tag, sparse_proxy_tag> {
448
+ typedef sparse_proxy_tag storage_category;
449
+ };
450
+
451
+ template<>
452
+ struct storage_restrict_traits<packed_proxy_tag, sparse_proxy_tag> {
453
+ typedef sparse_proxy_tag storage_category;
454
+ };
455
+
456
+ template<>
457
+ struct storage_restrict_traits<dense_tag, dense_proxy_tag> {
458
+ typedef dense_proxy_tag storage_category;
459
+ };
460
+ template<>
461
+ struct storage_restrict_traits<dense_tag, packed_proxy_tag> {
462
+ typedef packed_proxy_tag storage_category;
463
+ };
464
+ template<>
465
+ struct storage_restrict_traits<dense_tag, sparse_proxy_tag> {
466
+ typedef sparse_proxy_tag storage_category;
467
+ };
468
+
469
+ template<>
470
+ struct storage_restrict_traits<dense_proxy_tag, packed_proxy_tag> {
471
+ typedef packed_proxy_tag storage_category;
472
+ };
473
+ template<>
474
+ struct storage_restrict_traits<dense_proxy_tag, sparse_proxy_tag> {
475
+ typedef sparse_proxy_tag storage_category;
476
+ };
477
+
478
+
479
+ // Iterator tags -- hierarchical definition of storage characteristics
480
+
481
+ struct sparse_bidirectional_iterator_tag : public std::bidirectional_iterator_tag {};
482
+ struct packed_random_access_iterator_tag : public std::random_access_iterator_tag {};
483
+ struct dense_random_access_iterator_tag : public packed_random_access_iterator_tag {};
484
+
485
+ // Thanks to Kresimir Fresl for convincing Comeau with iterator_base_traits ;-)
486
+ template<class IC>
487
+ struct iterator_base_traits {};
488
+
489
+ template<>
490
+ struct iterator_base_traits<std::forward_iterator_tag> {
491
+ template<class I, class T>
492
+ struct iterator_base {
493
+ typedef forward_iterator_base<std::forward_iterator_tag, I, T> type;
494
+ };
495
+ };
496
+
497
+ template<>
498
+ struct iterator_base_traits<std::bidirectional_iterator_tag> {
499
+ template<class I, class T>
500
+ struct iterator_base {
501
+ typedef bidirectional_iterator_base<std::bidirectional_iterator_tag, I, T> type;
502
+ };
503
+ };
504
+ template<>
505
+ struct iterator_base_traits<sparse_bidirectional_iterator_tag> {
506
+ template<class I, class T>
507
+ struct iterator_base {
508
+ typedef bidirectional_iterator_base<sparse_bidirectional_iterator_tag, I, T> type;
509
+ };
510
+ };
511
+
512
+ template<>
513
+ struct iterator_base_traits<std::random_access_iterator_tag> {
514
+ template<class I, class T>
515
+ struct iterator_base {
516
+ typedef random_access_iterator_base<std::random_access_iterator_tag, I, T> type;
517
+ };
518
+ };
519
+ template<>
520
+ struct iterator_base_traits<packed_random_access_iterator_tag> {
521
+ template<class I, class T>
522
+ struct iterator_base {
523
+ typedef random_access_iterator_base<packed_random_access_iterator_tag, I, T> type;
524
+ };
525
+ };
526
+ template<>
527
+ struct iterator_base_traits<dense_random_access_iterator_tag> {
528
+ template<class I, class T>
529
+ struct iterator_base {
530
+ typedef random_access_iterator_base<dense_random_access_iterator_tag, I, T> type;
531
+ };
532
+ };
533
+
534
+ template<class I1, class I2>
535
+ struct iterator_restrict_traits {
536
+ typedef I1 iterator_category;
537
+ };
538
+
539
+ template<>
540
+ struct iterator_restrict_traits<packed_random_access_iterator_tag, sparse_bidirectional_iterator_tag> {
541
+ typedef sparse_bidirectional_iterator_tag iterator_category;
542
+ };
543
+ template<>
544
+ struct iterator_restrict_traits<sparse_bidirectional_iterator_tag, packed_random_access_iterator_tag> {
545
+ typedef sparse_bidirectional_iterator_tag iterator_category;
546
+ };
547
+
548
+ template<>
549
+ struct iterator_restrict_traits<dense_random_access_iterator_tag, sparse_bidirectional_iterator_tag> {
550
+ typedef sparse_bidirectional_iterator_tag iterator_category;
551
+ };
552
+ template<>
553
+ struct iterator_restrict_traits<sparse_bidirectional_iterator_tag, dense_random_access_iterator_tag> {
554
+ typedef sparse_bidirectional_iterator_tag iterator_category;
555
+ };
556
+
557
+ template<>
558
+ struct iterator_restrict_traits<dense_random_access_iterator_tag, packed_random_access_iterator_tag> {
559
+ typedef packed_random_access_iterator_tag iterator_category;
560
+ };
561
+ template<>
562
+ struct iterator_restrict_traits<packed_random_access_iterator_tag, dense_random_access_iterator_tag> {
563
+ typedef packed_random_access_iterator_tag iterator_category;
564
+ };
565
+
566
+ template<class I>
567
+ BOOST_UBLAS_INLINE
568
+ void increment (I &it, const I &it_end, typename I::difference_type compare, packed_random_access_iterator_tag) {
569
+ it += (std::min) (compare, it_end - it);
570
+ }
571
+ template<class I>
572
+ BOOST_UBLAS_INLINE
573
+ void increment (I &it, const I &/* it_end */, typename I::difference_type /* compare */, sparse_bidirectional_iterator_tag) {
574
+ ++ it;
575
+ }
576
+ template<class I>
577
+ BOOST_UBLAS_INLINE
578
+ void increment (I &it, const I &it_end, typename I::difference_type compare) {
579
+ increment (it, it_end, compare, typename I::iterator_category ());
580
+ }
581
+
582
+ template<class I>
583
+ BOOST_UBLAS_INLINE
584
+ void increment (I &it, const I &it_end) {
585
+ #if BOOST_UBLAS_TYPE_CHECK
586
+ I cit (it);
587
+ while (cit != it_end) {
588
+ BOOST_UBLAS_CHECK (*cit == typename I::value_type/*zero*/(), internal_logic ());
589
+ ++ cit;
590
+ }
591
+ #endif
592
+ it = it_end;
593
+ }
594
+
595
+ namespace detail {
596
+
597
+ // specialisation which define whether a type has a trivial constructor
598
+ // or not. This is used by array types.
599
+ template<typename T>
600
+ struct has_trivial_constructor : public boost::has_trivial_constructor<T> {};
601
+
602
+ template<typename T>
603
+ struct has_trivial_destructor : public boost::has_trivial_destructor<T> {};
604
+
605
+ template<typename FLT>
606
+ struct has_trivial_constructor<std::complex<FLT> > : public has_trivial_constructor<FLT> {};
607
+
608
+ template<typename FLT>
609
+ struct has_trivial_destructor<std::complex<FLT> > : public has_trivial_destructor<FLT> {};
610
+
611
+ }
612
+
613
+
614
+ /** \brief Traits class to extract type information from a constant matrix or vector CONTAINER.
615
+ *
616
+ */
617
+ template < class E >
618
+ struct container_view_traits {
619
+ /// type of indices
620
+ typedef typename E::size_type size_type;
621
+ /// type of differences of indices
622
+ typedef typename E::difference_type difference_type;
623
+
624
+ /// storage category: \c unknown_storage_tag, \c dense_tag, \c packed_tag, ...
625
+ typedef typename E::storage_category storage_category;
626
+
627
+ /// type of elements
628
+ typedef typename E::value_type value_type;
629
+ /// const reference to an element
630
+ typedef typename E::const_reference const_reference;
631
+
632
+ /// type used in expressions to mark a reference to this class (usually a const container_reference<const E> or the class itself)
633
+ typedef typename E::const_closure_type const_closure_type;
634
+ };
635
+
636
+ /** \brief Traits class to extract additional type information from a mutable matrix or vector CONTAINER.
637
+ *
638
+ */
639
+ template < class E >
640
+ struct mutable_container_traits {
641
+ /// reference to an element
642
+ typedef typename E::reference reference;
643
+
644
+ /// type used in expressions to mark a reference to this class (usually a container_reference<E> or the class itself)
645
+ typedef typename E::closure_type closure_type;
646
+ };
647
+
648
+ /** \brief Traits class to extract type information from a matrix or vector CONTAINER.
649
+ *
650
+ */
651
+ template < class E >
652
+ struct container_traits
653
+ : container_view_traits<E>, mutable_container_traits<E> {
654
+
655
+ };
656
+
657
+
658
+ /** \brief Traits class to extract type information from a constant MATRIX.
659
+ *
660
+ */
661
+ template < class MATRIX >
662
+ struct matrix_view_traits : container_view_traits <MATRIX> {
663
+
664
+ /// orientation of the matrix, either \c row_major_tag, \c column_major_tag or \c unknown_orientation_tag
665
+ typedef typename MATRIX::orientation_category orientation_category;
666
+
667
+ /// row iterator for the matrix
668
+ typedef typename MATRIX::const_iterator1 const_iterator1;
669
+
670
+ /// column iterator for the matrix
671
+ typedef typename MATRIX::const_iterator2 const_iterator2;
672
+ };
673
+
674
+ /** \brief Traits class to extract additional type information from a mutable MATRIX.
675
+ *
676
+ */
677
+ template < class MATRIX >
678
+ struct mutable_matrix_traits
679
+ : mutable_container_traits <MATRIX> {
680
+
681
+ /// row iterator for the matrix
682
+ typedef typename MATRIX::iterator1 iterator1;
683
+
684
+ /// column iterator for the matrix
685
+ typedef typename MATRIX::iterator2 iterator2;
686
+ };
687
+
688
+
689
+ /** \brief Traits class to extract type information from a MATRIX.
690
+ *
691
+ */
692
+ template < class MATRIX >
693
+ struct matrix_traits
694
+ : matrix_view_traits <MATRIX>, mutable_matrix_traits <MATRIX> {
695
+ };
696
+
697
+ /** \brief Traits class to extract type information from a VECTOR.
698
+ *
699
+ */
700
+ template < class VECTOR >
701
+ struct vector_view_traits : container_view_traits <VECTOR> {
702
+
703
+ /// iterator for the VECTOR
704
+ typedef typename VECTOR::const_iterator const_iterator;
705
+
706
+ /// iterator pointing to the first element
707
+ static
708
+ const_iterator begin(const VECTOR & v) {
709
+ return v.begin();
710
+ }
711
+ /// iterator pointing behind the last element
712
+ static
713
+ const_iterator end(const VECTOR & v) {
714
+ return v.end();
715
+ }
716
+
717
+ };
718
+
719
+ /** \brief Traits class to extract type information from a VECTOR.
720
+ *
721
+ */
722
+ template < class VECTOR >
723
+ struct mutable_vector_traits : mutable_container_traits <VECTOR> {
724
+ /// iterator for the VECTOR
725
+ typedef typename VECTOR::iterator iterator;
726
+
727
+ /// iterator pointing to the first element
728
+ static
729
+ iterator begin(VECTOR & v) {
730
+ return v.begin();
731
+ }
732
+
733
+ /// iterator pointing behind the last element
734
+ static
735
+ iterator end(VECTOR & v) {
736
+ return v.end();
737
+ }
738
+ };
739
+
740
+ /** \brief Traits class to extract type information from a VECTOR.
741
+ *
742
+ */
743
+ template < class VECTOR >
744
+ struct vector_traits
745
+ : vector_view_traits <VECTOR>, mutable_vector_traits <VECTOR> {
746
+ };
747
+
748
+
749
+ // Note: specializations for T[N] and T[M][N] have been moved to traits/c_array.hpp
750
+
751
+ }}}
752
+
753
+ #endif