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,1465 @@
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_CONCEPTS_
14
+ #define _BOOST_UBLAS_CONCEPTS_
15
+
16
+ #include <boost/concept_check.hpp>
17
+
18
+ // Concept checks based on ideas of Jeremy Siek
19
+
20
+ namespace boost { namespace numeric { namespace ublas {
21
+
22
+
23
+ template<class I>
24
+ struct Indexed1DIteratorConcept {
25
+ typedef I iterator_type;
26
+
27
+ void constraints () {
28
+ iterator_type it = iterator_type ();
29
+ // Index
30
+ it.index ();
31
+ }
32
+ };
33
+
34
+ template<class I>
35
+ struct IndexedBidirectional1DIteratorConcept {
36
+ typedef I iterator_type;
37
+
38
+ void constraints () {
39
+ function_requires< BidirectionalIteratorConcept<iterator_type> >();
40
+ function_requires< Indexed1DIteratorConcept<iterator_type> >();
41
+ }
42
+ };
43
+
44
+ template<class I>
45
+ struct Mutable_IndexedBidirectional1DIteratorConcept {
46
+ typedef I iterator_type;
47
+
48
+ void constraints () {
49
+ function_requires< Mutable_BidirectionalIteratorConcept<iterator_type> >();
50
+ function_requires< Indexed1DIteratorConcept<iterator_type> >();
51
+ }
52
+ };
53
+
54
+ template<class I>
55
+ struct IndexedRandomAccess1DIteratorConcept {
56
+ typedef I iterator_type;
57
+
58
+ void constraints () {
59
+ function_requires< RandomAccessIteratorConcept<iterator_type> >();
60
+ function_requires< Indexed1DIteratorConcept<iterator_type> >();
61
+ }
62
+ };
63
+
64
+ template<class I>
65
+ struct Mutable_IndexedRandomAccess1DIteratorConcept {
66
+ typedef I iterator_type;
67
+
68
+ void constraints () {
69
+ function_requires< Mutable_RandomAccessIteratorConcept<iterator_type> >();
70
+ function_requires< Indexed1DIteratorConcept<iterator_type> >();
71
+ }
72
+ };
73
+
74
+ template<class I>
75
+ struct Indexed2DIteratorConcept {
76
+ typedef I iterator_type;
77
+ typedef typename I::dual_iterator_type dual_iterator_type;
78
+ typedef typename I::dual_reverse_iterator_type dual_reverse_iterator_type;
79
+
80
+ void constraints () {
81
+ iterator_type it = iterator_type ();
82
+ // Indices
83
+ it.index1 ();
84
+ it.index2 ();
85
+ // Iterator begin/end
86
+ dual_iterator_type it_begin (it.begin ());
87
+ dual_iterator_type it_end (it.end ());
88
+ // Reverse iterator begin/end
89
+ dual_reverse_iterator_type it_rbegin (it.rbegin ());
90
+ dual_reverse_iterator_type it_rend (it.rend ());
91
+ ignore_unused_variable_warning (it_begin);
92
+ ignore_unused_variable_warning (it_end);
93
+ ignore_unused_variable_warning (it_rbegin);
94
+ ignore_unused_variable_warning (it_rend);
95
+ }
96
+ };
97
+
98
+ template<class I1, class I2>
99
+ struct IndexedBidirectional2DIteratorConcept {
100
+ typedef I1 subiterator1_type;
101
+ typedef I2 subiterator2_type;
102
+
103
+ void constraints () {
104
+ function_requires< BidirectionalIteratorConcept<subiterator1_type> >();
105
+ function_requires< BidirectionalIteratorConcept<subiterator2_type> >();
106
+ function_requires< Indexed2DIteratorConcept<subiterator1_type> >();
107
+ function_requires< Indexed2DIteratorConcept<subiterator2_type> >();
108
+ }
109
+ };
110
+
111
+ template<class I1, class I2>
112
+ struct Mutable_IndexedBidirectional2DIteratorConcept {
113
+ typedef I1 subiterator1_type;
114
+ typedef I2 subiterator2_type;
115
+
116
+ void constraints () {
117
+ function_requires< Mutable_BidirectionalIteratorConcept<subiterator1_type> >();
118
+ function_requires< Mutable_BidirectionalIteratorConcept<subiterator2_type> >();
119
+ function_requires< Indexed2DIteratorConcept<subiterator1_type> >();
120
+ function_requires< Indexed2DIteratorConcept<subiterator2_type> >();
121
+ }
122
+ };
123
+
124
+ template<class I1, class I2>
125
+ struct IndexedRandomAccess2DIteratorConcept {
126
+ typedef I1 subiterator1_type;
127
+ typedef I2 subiterator2_type;
128
+
129
+ void constraints () {
130
+ function_requires< RandomAccessIteratorConcept<subiterator1_type> >();
131
+ function_requires< RandomAccessIteratorConcept<subiterator2_type> >();
132
+ function_requires< Indexed2DIteratorConcept<subiterator1_type> >();
133
+ function_requires< Indexed2DIteratorConcept<subiterator2_type> >();
134
+ }
135
+ };
136
+
137
+ template<class I1, class I2>
138
+ struct Mutable_IndexedRandomAccess2DIteratorConcept {
139
+ typedef I1 subiterator1_type;
140
+ typedef I2 subiterator2_type;
141
+
142
+ void constraints () {
143
+ function_requires< Mutable_RandomAccessIteratorConcept<subiterator1_type> >();
144
+ function_requires< Mutable_RandomAccessIteratorConcept<subiterator2_type> >();
145
+ function_requires< Indexed2DIteratorConcept<subiterator1_type> >();
146
+ function_requires< Indexed2DIteratorConcept<subiterator2_type> >();
147
+ }
148
+ };
149
+
150
+ template<class C>
151
+ struct StorageArrayConcept {
152
+ typedef C container_type;
153
+ typedef typename C::size_type size_type;
154
+ typedef typename C::value_type value_type;
155
+
156
+ void constraints () {
157
+ function_requires< RandomAccessContainerConcept<container_type> >();
158
+ size_type n (0);
159
+ // Sizing constructor
160
+ container_type c = container_type (n);
161
+ // Initialised sizing constructor
162
+ container_type (n, value_type (5));
163
+ ignore_unused_variable_warning (c);
164
+ }
165
+ };
166
+
167
+ template<class C>
168
+ struct Mutable_StorageArrayConcept {
169
+ typedef C container_type;
170
+ typedef typename C::size_type size_type;
171
+ typedef typename C::value_type value_type;
172
+ typedef typename C::iterator iterator_type;
173
+
174
+ void constraints () {
175
+ function_requires< Mutable_RandomAccessContainerConcept<container_type> > ();
176
+ size_type n (0);
177
+ // Sizing constructor
178
+ container_type c = container_type (n);
179
+ // Initialised sizing constructor
180
+ c = container_type (n, value_type (3));
181
+ // Resize
182
+ c.resize (n, value_type (5));
183
+ // Resize - none preserving
184
+ c.resize (n);
185
+ }
186
+ };
187
+
188
+ template<class C>
189
+ struct StorageSparseConcept {
190
+ typedef C container_type;
191
+ typedef typename C::size_type size_type;
192
+
193
+ void constraints () {
194
+ function_requires< ReversibleContainerConcept<container_type> > ();
195
+ }
196
+ };
197
+
198
+ template<class C>
199
+ struct Mutable_StorageSparseConcept {
200
+ typedef C container_type;
201
+ typedef typename C::size_type size_type;
202
+ typedef typename C::value_type value_type;
203
+ typedef typename C::iterator iterator_type;
204
+
205
+ void constraints () {
206
+ // NOTE - Not Mutable_ReversibleContainerConcept
207
+ function_requires< ReversibleContainerConcept<container_type> >();
208
+ container_type c = container_type ();
209
+ value_type t = value_type ();
210
+ iterator_type it = iterator_type (), it1 = iterator_type (), it2 = iterator_type ();
211
+ // Insert
212
+ c.insert (it, t);
213
+ // Erase
214
+ c.erase (it);
215
+ // Range erase
216
+ c.erase (it1, it2);
217
+ // Clear
218
+ c.clear ();
219
+ }
220
+ };
221
+
222
+ template<class G>
223
+ struct IndexSetConcept {
224
+ typedef G generator_type;
225
+ typedef typename G::size_type size_type;
226
+ typedef typename G::value_type value_type;
227
+
228
+ void constraints () {
229
+ function_requires< AssignableConcept<generator_type> >();
230
+ function_requires< ReversibleContainerConcept<generator_type> >();
231
+ generator_type g = generator_type ();
232
+ size_type n (0);
233
+ value_type t;
234
+ // Element access
235
+ t = g (n);
236
+ ignore_unused_variable_warning (t);
237
+ }
238
+ };
239
+
240
+ /** \brief Scalar expression concept.
241
+ *
242
+ * requirements
243
+ * \li \c SE::value_type is the type of the scalar expression
244
+ * \li \c SE must be convertable to \c SE::value_type
245
+ * \li the constant \c SE::complexity must exist
246
+ *
247
+ * \param SE the type of the scalar expression
248
+ */
249
+ template<class SE>
250
+ struct ScalarExpressionConcept {
251
+ typedef SE scalar_expression_type;
252
+ typedef typename SE::value_type value_type;
253
+
254
+ static const unsigned complexity = SE::complexity;
255
+
256
+ void constraints () {
257
+ scalar_expression_type *sp;
258
+ scalar_expression_type s = *sp;
259
+ value_type t;
260
+ // Conversion
261
+ t = s;
262
+ ignore_unused_variable_warning (t);
263
+ }
264
+ };
265
+
266
+ /** \brief Vector expression concept.
267
+ *
268
+ * requirements
269
+ * \li \c VE::value_type is the type of the elements
270
+ * \li \c VE::const_reference The return type when accessing an element of a constant vector
271
+ * expression. Must be convertable to a \c value_type.
272
+ * \li \c VE::size_type is the (unsigned) type of the indices
273
+ * \li \c VE::difference_type is the (signed) type of distances between indices
274
+ * \li \c VE::category
275
+ *
276
+ * \li the constant \c SE::complexity must exist
277
+ *
278
+ * \param SE the type of the scalar expression
279
+ */
280
+ template<class VE>
281
+ struct VectorExpressionConcept {
282
+ typedef VE vector_expression_type;
283
+ typedef typename VE::type_category type_category;
284
+ typedef typename VE::size_type size_type;
285
+ typedef typename VE::difference_type difference_type;
286
+ typedef typename VE::value_type value_type;
287
+ typedef typename VE::const_reference const_reference;
288
+ typedef typename VE::const_iterator const_iterator_type;
289
+ typedef typename VE::const_reverse_iterator const_reverse_iterator_type;
290
+
291
+ void constraints () {
292
+ vector_expression_type *vp;
293
+ const vector_expression_type *cvp;
294
+ vector_expression_type v = *vp;
295
+ const vector_expression_type cv = *cvp;
296
+ size_type n (0), i (0);
297
+ value_type t;
298
+ // Find (internal?)
299
+ const_iterator_type cit (v.find (i));
300
+ // Beginning of range
301
+ const_iterator_type cit_begin (v.begin ());
302
+ // End of range
303
+ const_iterator_type cit_end (v.end ());
304
+ // Size
305
+ n = v.size ();
306
+ // Beginning of reverse range
307
+ const_reverse_iterator_type crit_begin (cv.rbegin ());
308
+ // End of reverse range
309
+ const_reverse_iterator_type crit_end (cv.rend ());
310
+ // Element access
311
+ t = v (i);
312
+ ignore_unused_variable_warning (n);
313
+ ignore_unused_variable_warning (cit);
314
+ ignore_unused_variable_warning (cit_begin);
315
+ ignore_unused_variable_warning (cit_end);
316
+ ignore_unused_variable_warning (crit_begin);
317
+ ignore_unused_variable_warning (crit_end);
318
+ ignore_unused_variable_warning (t);
319
+ }
320
+ };
321
+
322
+ template<class VE>
323
+ struct Mutable_VectorExpressionConcept {
324
+ typedef VE vector_expression_type;
325
+ typedef typename VE::size_type size_type;
326
+ typedef typename VE::value_type value_type;
327
+ typedef typename VE::iterator iterator_type;
328
+ typedef typename VE::reverse_iterator reverse_iterator_type;
329
+
330
+ void constraints () {
331
+ function_requires< AssignableConcept<vector_expression_type> >();
332
+ function_requires< VectorExpressionConcept<vector_expression_type> >();
333
+ vector_expression_type *vp;
334
+ vector_expression_type v = *vp, v1 = *vp, v2 = *vp;
335
+ size_type i (0);
336
+ value_type t = value_type ();
337
+ // Find (internal?)
338
+ iterator_type it (v.find (i));
339
+ // Beginning of range
340
+ iterator_type it_begin (v.begin ());
341
+ // End of range
342
+ iterator_type it_end (v.end ());
343
+ // Swap
344
+ v1.swap (v2);
345
+ // Beginning of reverse range
346
+ reverse_iterator_type rit_begin (v.rbegin ());
347
+ // End of reverse range
348
+ reverse_iterator_type rit_end (v.rend ());
349
+ // Assignments
350
+ v2 = v1;
351
+ v2.assign (v1);
352
+ v2 += v1;
353
+ v2.plus_assign (v1);
354
+ v2 -= v1;
355
+ v2.minus_assign (v1);
356
+ v *= t;
357
+ ignore_unused_variable_warning (it);
358
+ ignore_unused_variable_warning (it_begin);
359
+ ignore_unused_variable_warning (it_end);
360
+ ignore_unused_variable_warning (rit_begin);
361
+ ignore_unused_variable_warning (rit_end);
362
+ }
363
+ };
364
+
365
+ template<class ME>
366
+ struct MatrixExpressionConcept {
367
+ typedef ME matrix_expression_type;
368
+ typedef typename ME::type_category type_category;
369
+ typedef typename ME::size_type size_type;
370
+ typedef typename ME::value_type value_type;
371
+ typedef typename ME::const_iterator1 const_subiterator1_type;
372
+ typedef typename ME::const_iterator2 const_subiterator2_type;
373
+ typedef typename ME::const_reverse_iterator1 const_reverse_subiterator1_type;
374
+ typedef typename ME::const_reverse_iterator2 const_reverse_subiterator2_type;
375
+
376
+ void constraints () {
377
+ matrix_expression_type *mp;
378
+ const matrix_expression_type *cmp;
379
+ matrix_expression_type m = *mp;
380
+ const matrix_expression_type cm = *cmp;
381
+ size_type n (0), i (0), j (0);
382
+ value_type t;
383
+ // Find (internal?)
384
+ const_subiterator1_type cit1 (m.find1 (0, i, j));
385
+ const_subiterator2_type cit2 (m.find2 (0, i, j));
386
+ // Beginning of range
387
+ const_subiterator1_type cit1_begin (m.begin1 ());
388
+ const_subiterator2_type cit2_begin (m.begin2 ());
389
+ // End of range
390
+ const_subiterator1_type cit1_end (m.end1 ());
391
+ const_subiterator2_type cit2_end (m.end2 ());
392
+ // Size
393
+ n = m.size1 ();
394
+ n = m.size2 ();
395
+ // Beginning of reverse range
396
+ const_reverse_subiterator1_type crit1_begin (cm.rbegin1 ());
397
+ const_reverse_subiterator2_type crit2_begin (cm.rbegin2 ());
398
+ // End of reverse range
399
+ const_reverse_subiterator1_type crit1_end (cm.rend1 ());
400
+ const_reverse_subiterator2_type crit2_end (cm.rend2 ());
401
+ // Element access
402
+ t = m (i, j);
403
+ ignore_unused_variable_warning (n);
404
+ ignore_unused_variable_warning (cit1);
405
+ ignore_unused_variable_warning (cit2);
406
+ ignore_unused_variable_warning (cit1_begin);
407
+ ignore_unused_variable_warning (cit2_begin);
408
+ ignore_unused_variable_warning (cit1_end);
409
+ ignore_unused_variable_warning (cit2_end);
410
+ ignore_unused_variable_warning (crit1_begin);
411
+ ignore_unused_variable_warning (crit2_begin);
412
+ ignore_unused_variable_warning (crit1_end);
413
+ ignore_unused_variable_warning (crit2_end);
414
+ ignore_unused_variable_warning (t);
415
+ }
416
+ };
417
+
418
+ template<class ME>
419
+ struct Mutable_MatrixExpressionConcept {
420
+ typedef ME matrix_expression_type;
421
+ typedef typename ME::size_type size_type;
422
+ typedef typename ME::value_type value_type;
423
+ typedef typename ME::iterator1 subiterator1_type;
424
+ typedef typename ME::iterator2 subiterator2_type;
425
+ typedef typename ME::reverse_iterator1 reverse_subiterator1_type;
426
+ typedef typename ME::reverse_iterator2 reverse_subiterator2_type;
427
+
428
+ void constraints () {
429
+ function_requires< AssignableConcept<matrix_expression_type> >();
430
+ function_requires< MatrixExpressionConcept<matrix_expression_type> >();
431
+ matrix_expression_type *mp;
432
+ matrix_expression_type m = *mp, m1 = *mp, m2 = *mp;
433
+ size_type i (0), j (0);
434
+ value_type t = value_type ();
435
+ // Find (internal?)
436
+ subiterator1_type it1 (m.find1 (0, i, j));
437
+ subiterator2_type it2 (m.find2 (0, i, j));
438
+ // Beginning of range
439
+ subiterator1_type it1_begin (m.begin1 ());
440
+ subiterator2_type it2_begin (m.begin2 ());
441
+ // End of range
442
+ subiterator1_type it1_end (m.end1 ());
443
+ subiterator2_type it2_end (m.end2 ());
444
+ // Swap
445
+ m1.swap (m2);
446
+ // Beginning of reverse range
447
+ reverse_subiterator1_type rit1_begin (m.rbegin1 ());
448
+ reverse_subiterator2_type rit2_begin (m.rbegin2 ());
449
+ // End of reverse range
450
+ reverse_subiterator1_type rit1_end (m.rend1 ());
451
+ reverse_subiterator2_type rit2_end (m.rend2 ());
452
+ // Assignments
453
+ m2 = m1;
454
+ m2.assign (m1);
455
+ m2 += m1;
456
+ m2.plus_assign (m1);
457
+ m2 -= m1;
458
+ m2.minus_assign (m1);
459
+ m *= t;
460
+ ignore_unused_variable_warning (it1);
461
+ ignore_unused_variable_warning (it2);
462
+ ignore_unused_variable_warning (it1_begin);
463
+ ignore_unused_variable_warning (it2_begin);
464
+ ignore_unused_variable_warning (it1_end);
465
+ ignore_unused_variable_warning (it2_end);
466
+ ignore_unused_variable_warning (rit1_begin);
467
+ ignore_unused_variable_warning (rit2_begin);
468
+ ignore_unused_variable_warning (rit1_end);
469
+ ignore_unused_variable_warning (rit2_end);
470
+ }
471
+ };
472
+
473
+ template<class V>
474
+ struct VectorConcept {
475
+ typedef V vector_type;
476
+ typedef typename V::size_type size_type;
477
+ typedef typename V::value_type value_type;
478
+ typedef const value_type *const_pointer;
479
+
480
+ void constraints () {
481
+ function_requires< VectorExpressionConcept<vector_type> >();
482
+ size_type n (0);
483
+ size_type i (0);
484
+ // Sizing constructor
485
+ vector_type v (n);
486
+ // Element support
487
+ const_pointer p = v.find_element (i);
488
+
489
+ ignore_unused_variable_warning (p);
490
+ }
491
+ };
492
+
493
+ template<class V>
494
+ struct Mutable_VectorConcept {
495
+ typedef V vector_type;
496
+ typedef typename V::size_type size_type;
497
+ typedef typename V::value_type value_type;
498
+ typedef value_type *pointer;
499
+
500
+ void constraints () {
501
+ function_requires< VectorConcept<vector_type> >();
502
+ function_requires< DefaultConstructible<vector_type> >();
503
+ function_requires< Mutable_VectorExpressionConcept<vector_type> >();
504
+ size_type n (0);
505
+ value_type t = value_type ();
506
+ size_type i (0);
507
+ vector_type v;
508
+ // Element support
509
+ pointer p = v.find_element (i);
510
+ // Element assignment
511
+ value_type r = v.insert_element (i, t);
512
+ v.insert_element (i, t) = r;
513
+ // Zeroing
514
+ v.clear ();
515
+ // Resize
516
+ v.resize (n);
517
+
518
+ ignore_unused_variable_warning (p);
519
+ ignore_unused_variable_warning (r);
520
+ }
521
+ };
522
+
523
+ template<class V>
524
+ struct SparseVectorConcept {
525
+ typedef V vector_type;
526
+ typedef typename V::size_type size_type;
527
+
528
+ void constraints () {
529
+ function_requires< VectorConcept<vector_type> >();
530
+ }
531
+ };
532
+
533
+ template<class V>
534
+ struct Mutable_SparseVectorConcept {
535
+ typedef V vector_type;
536
+ typedef typename V::size_type size_type;
537
+ typedef typename V::value_type value_type;
538
+
539
+ void constraints () {
540
+ function_requires< SparseVectorConcept<vector_type> >();
541
+ function_requires< Mutable_VectorConcept<vector_type> >();
542
+ size_type i (0);
543
+ vector_type v;
544
+ // Element erasure
545
+ v.erase_element (i);
546
+ }
547
+ };
548
+
549
+ template<class M>
550
+ struct MatrixConcept {
551
+ typedef M matrix_type;
552
+ typedef typename M::size_type size_type;
553
+ typedef typename M::value_type value_type;
554
+ typedef const value_type *const_pointer;
555
+
556
+ void constraints () {
557
+ function_requires< MatrixExpressionConcept<matrix_type> >();
558
+ size_type n (0);
559
+ size_type i (0), j (0);
560
+ // Sizing constructor
561
+ matrix_type m (n, n);
562
+ // Element support
563
+ #ifndef SKIP_BAD
564
+ const_pointer p = m.find_element (i, j);
565
+ #else
566
+ const_pointer p;
567
+ ignore_unused_variable_warning (i);
568
+ ignore_unused_variable_warning (j);
569
+ #endif
570
+ ignore_unused_variable_warning (p);
571
+ }
572
+ };
573
+
574
+ template<class M>
575
+ struct Mutable_MatrixConcept {
576
+ typedef M matrix_type;
577
+ typedef typename M::size_type size_type;
578
+ typedef typename M::value_type value_type;
579
+ typedef value_type *pointer;
580
+
581
+ void constraints () {
582
+ function_requires< MatrixConcept<matrix_type> >();
583
+ function_requires< DefaultConstructible<matrix_type> >();
584
+ function_requires< Mutable_MatrixExpressionConcept<matrix_type> >();
585
+ size_type n (0);
586
+ value_type t = value_type ();
587
+ size_type i (0), j (0);
588
+ matrix_type m;
589
+ // Element support
590
+ #ifndef SKIP_BAD
591
+ pointer p = m.find_element (i, j);
592
+ ignore_unused_variable_warning (i);
593
+ ignore_unused_variable_warning (j);
594
+ #else
595
+ pointer p;
596
+ #endif
597
+ // Element assigment
598
+ value_type r = m.insert_element (i, j, t);
599
+ m.insert_element (i, j, t) = r;
600
+ // Zeroing
601
+ m.clear ();
602
+ // Resize
603
+ m.resize (n, n);
604
+ m.resize (n, n, false);
605
+
606
+ ignore_unused_variable_warning (p);
607
+ ignore_unused_variable_warning (r);
608
+ }
609
+ };
610
+
611
+ template<class M>
612
+ struct SparseMatrixConcept {
613
+ typedef M matrix_type;
614
+ typedef typename M::size_type size_type;
615
+
616
+ void constraints () {
617
+ function_requires< MatrixConcept<matrix_type> >();
618
+ }
619
+ };
620
+
621
+ template<class M>
622
+ struct Mutable_SparseMatrixConcept {
623
+ typedef M matrix_type;
624
+ typedef typename M::size_type size_type;
625
+ typedef typename M::value_type value_type;
626
+
627
+ void constraints () {
628
+ function_requires< SparseMatrixConcept<matrix_type> >();
629
+ function_requires< Mutable_MatrixConcept<matrix_type> >();
630
+ size_type i (0), j (0);
631
+ matrix_type m;
632
+ // Elemnent erasure
633
+ m.erase_element (i, j);
634
+ }
635
+ };
636
+
637
+ /** introduce anonymous namespace to make following functions
638
+ * local to the current compilation unit.
639
+ */
640
+ namespace {
641
+
642
+ // Replaced the ZeroElement and OneElement functions with the templated versions
643
+ // because the former where giving warnings with clang
644
+ template<class T>
645
+ T
646
+ ZeroElement (T) {
647
+ return static_cast<T> (0);
648
+ }
649
+
650
+ template<class T>
651
+ vector<T>
652
+ ZeroElement (vector<T>) {
653
+ return zero_vector<T> ();
654
+ }
655
+
656
+ template<class T>
657
+ matrix<T>
658
+ ZeroElement (matrix<T>) {
659
+ return zero_matrix<T> ();
660
+ }
661
+
662
+ template<class T>
663
+ T
664
+ OneElement (T) {
665
+ return static_cast<T> (1);
666
+ }
667
+
668
+ template<class T>
669
+ matrix<T>
670
+ OneElement (matrix<T>) {
671
+ return identity_matrix<T> ();
672
+ }
673
+
674
+
675
+ template<class E1, class E2>
676
+ bool
677
+ operator == (const vector_expression<E1> &e1, const vector_expression<E2> &e2) {
678
+ typedef typename promote_traits<typename E1::value_type,
679
+ typename E2::value_type>::promote_type value_type;
680
+ typedef typename type_traits<value_type>::real_type real_type;
681
+ return norm_inf (e1 - e2) == real_type/*zero*/();
682
+ }
683
+ template<class E1, class E2>
684
+ bool
685
+ operator == (const matrix_expression<E1> &e1, const matrix_expression<E2> &e2) {
686
+ typedef typename promote_traits<typename E1::value_type,
687
+ typename E2::value_type>::promote_type value_type;
688
+ typedef typename type_traits<value_type>::real_type real_type;
689
+ return norm_inf (e1 - e2) == real_type/*zero*/();
690
+ }
691
+
692
+ template<class T>
693
+ struct AdditiveAbelianGroupConcept {
694
+ typedef T value_type;
695
+
696
+ void constraints () {
697
+ bool r;
698
+ value_type a = value_type (), b = value_type (), c = value_type ();
699
+ r = (a + b) + c == a + (b + c);
700
+ r = ZeroElement (value_type ()) + a == a;
701
+ r = a + ZeroElement (value_type ()) == a;
702
+ r = a + (- a) == ZeroElement (value_type ());
703
+ r = (- a) + a == ZeroElement (value_type ());
704
+ r = a + b == b + a;
705
+ ignore_unused_variable_warning (r);
706
+ }
707
+ };
708
+
709
+ template<class T>
710
+ struct MultiplicativeAbelianGroupConcept {
711
+ typedef T value_type;
712
+
713
+ void constraints () {
714
+ bool r;
715
+ value_type a = value_type (), b = value_type (), c = value_type ();
716
+ r = (a * b) * c == a * (b * c);
717
+ r = OneElement (value_type ()) * a == a;
718
+ r = a * OneElement (value_type ()) == a;
719
+ r = a * (OneElement (value_type ()) / a) == a;
720
+ r = (OneElement (value_type ()) / a) * a == a;
721
+ r = a * b == b * a;
722
+ ignore_unused_variable_warning (r);
723
+ }
724
+ };
725
+
726
+ template<class T>
727
+ struct RingWithIdentityConcept {
728
+ typedef T value_type;
729
+
730
+ void constraints () {
731
+ function_requires< AdditiveAbelianGroupConcept<value_type> >();
732
+ bool r;
733
+ value_type a = value_type (), b = value_type (), c = value_type ();
734
+ r = (a * b) * c == a * (b * c);
735
+ r = (a + b) * c == a * c + b * c;
736
+ r = OneElement (value_type ()) * a == a;
737
+ r = a * OneElement (value_type ()) == a;
738
+ ignore_unused_variable_warning (r);
739
+ }
740
+ };
741
+
742
+ template<class T>
743
+ struct Prod_RingWithIdentityConcept {
744
+ typedef T value_type;
745
+
746
+ void constraints () {
747
+ function_requires< AdditiveAbelianGroupConcept<value_type> >();
748
+ bool r;
749
+ value_type a = value_type (), b = value_type (), c = value_type ();
750
+ r = prod (T (prod (a, b)), c) == prod (a, T (prod (b, c)));
751
+ r = prod (a + b, c) == prod (a, c) + prod (b, c);
752
+ r = prod (OneElement (value_type ()), a) == a;
753
+ r = prod (a, OneElement (value_type ())) == a;
754
+ ignore_unused_variable_warning (r);
755
+ }
756
+ };
757
+
758
+ template<class T>
759
+ struct CommutativeRingWithIdentityConcept {
760
+ typedef T value_type;
761
+
762
+ void constraints () {
763
+ function_requires< RingWithIdentityConcept<value_type> >();
764
+ bool r;
765
+ value_type a = value_type (), b = value_type ();
766
+ r = a * b == b * a;
767
+ ignore_unused_variable_warning (r);
768
+ }
769
+ };
770
+
771
+ template<class T>
772
+ struct FieldConcept {
773
+ typedef T value_type;
774
+
775
+ void constraints () {
776
+ function_requires< CommutativeRingWithIdentityConcept<value_type> >();
777
+ bool r;
778
+ value_type a = value_type ();
779
+ r = a == ZeroElement (value_type ()) || a * (OneElement (value_type ()) / a) == a;
780
+ r = a == ZeroElement (value_type ()) || (OneElement (value_type ()) / a) * a == a;
781
+ ignore_unused_variable_warning (r);
782
+ }
783
+ };
784
+
785
+ template<class T, class V>
786
+ struct VectorSpaceConcept {
787
+ typedef T value_type;
788
+ typedef V vector_type;
789
+
790
+ void constraints () {
791
+ function_requires< FieldConcept<value_type> >();
792
+ function_requires< AdditiveAbelianGroupConcept<vector_type> >();
793
+ bool r;
794
+ value_type alpha = value_type (), beta = value_type ();
795
+ vector_type a = vector_type (), b = vector_type ();
796
+ r = alpha * (a + b) == alpha * a + alpha * b;
797
+ r = (alpha + beta) * a == alpha * a + beta * a;
798
+ r = (alpha * beta) * a == alpha * (beta * a);
799
+ r = OneElement (value_type ()) * a == a;
800
+ ignore_unused_variable_warning (r);
801
+ }
802
+ };
803
+
804
+ template<class T, class V, class M>
805
+ struct LinearOperatorConcept {
806
+ typedef T value_type;
807
+ typedef V vector_type;
808
+ typedef M matrix_type;
809
+
810
+ void constraints () {
811
+ function_requires< VectorSpaceConcept<value_type, vector_type> >();
812
+ bool r;
813
+ value_type alpha = value_type (), beta = value_type ();
814
+ vector_type a = vector_type (), b = vector_type ();
815
+ matrix_type A = matrix_type ();
816
+ r = prod (A, alpha * a + beta * b) == alpha * prod (A, a) + beta * prod (A, b);
817
+ ignore_unused_variable_warning (r);
818
+ }
819
+ };
820
+
821
+ inline void concept_checks () {
822
+
823
+ // Allow tests to be group to keep down compiler storage requirement
824
+ #ifdef INTERAL
825
+ #define INTERNAL_STORAGE
826
+ #define INTERNAL_VECTOR
827
+ #define INTERNAL_MATRIX
828
+ #define INTERNAL_SPECIAL
829
+ #define INTERNAL_SPARSE
830
+ #define INTERNAL_EXPRESSION
831
+ #endif
832
+
833
+ // TODO enable this for development
834
+ // #define VIEW_CONCEPTS
835
+
836
+ // Element value type for tests
837
+ typedef float T;
838
+
839
+ // Storage Array
840
+ #if defined (INTERNAL_STORAGE) || defined (INTERNAL_STORAGE_DENSE)
841
+ {
842
+ typedef std::vector<T> container_model;
843
+ function_requires< Mutable_StorageArrayConcept<container_model> >();
844
+ function_requires< RandomAccessIteratorConcept<container_model::const_iterator> >();
845
+ function_requires< Mutable_RandomAccessIteratorConcept<container_model::iterator> >();
846
+ }
847
+
848
+ {
849
+ typedef bounded_array<T, 1> container_model;
850
+ function_requires< Mutable_StorageArrayConcept<container_model> >();
851
+ function_requires< RandomAccessIteratorConcept<container_model::const_iterator> >();
852
+ function_requires< Mutable_RandomAccessIteratorConcept<container_model::iterator> >();
853
+ }
854
+
855
+ {
856
+ typedef unbounded_array<T> container_model;
857
+ function_requires< Mutable_StorageArrayConcept<container_model> >();
858
+ function_requires< RandomAccessIteratorConcept<container_model::const_iterator> >();
859
+ function_requires< Mutable_RandomAccessIteratorConcept<container_model::iterator> >();
860
+ }
861
+
862
+ /* FIXME array_adaptors are in progress
863
+ {
864
+ typedef array_adaptor<T> container_model;
865
+ function_requires< Mutable_StorageArrayConcept<container_model> >();
866
+ function_requires< RandomAccessIteratorConcept<container_model::const_iterator> >();
867
+ function_requires< Mutable_RandomAccessIteratorConcept<container_model::iterator> >();
868
+ }
869
+ */
870
+
871
+ {
872
+ typedef range container_model;
873
+ function_requires< IndexSetConcept<range> >();
874
+ function_requires< RandomAccessIteratorConcept<range::const_iterator> >();
875
+ }
876
+
877
+ {
878
+ typedef slice container_model;
879
+ function_requires< IndexSetConcept<range> >();
880
+ function_requires< RandomAccessIteratorConcept<range::const_iterator> >();
881
+ }
882
+
883
+ {
884
+ typedef indirect_array<> container_model;
885
+ function_requires< IndexSetConcept<range> >();
886
+ function_requires< RandomAccessIteratorConcept<range::const_iterator> >();
887
+ }
888
+ #endif
889
+
890
+ // Storage Sparse
891
+ #if defined (INTERNAL_STORAGE) || defined (INTERNAL_STORAGE_SPARSE)
892
+ {
893
+ typedef map_array<std::size_t, T> container_model;
894
+ function_requires< Mutable_StorageSparseConcept<container_model> >();
895
+ function_requires< RandomAccessIteratorConcept<container_model::const_iterator> >();
896
+ function_requires< RandomAccessIteratorConcept<container_model::iterator> >();
897
+ }
898
+
899
+ {
900
+ typedef std::map<std::size_t, T> container_model;
901
+ function_requires< Mutable_StorageSparseConcept<container_model > >();
902
+ function_requires< BidirectionalIteratorConcept<container_model::const_iterator> >();
903
+ function_requires< BidirectionalIteratorConcept<container_model::iterator> >();
904
+ }
905
+ #endif
906
+
907
+ #ifdef VIEW_CONCEPTS
908
+ // read only vectors
909
+ {
910
+ typedef vector_view<T> container_model;
911
+ function_requires< RandomAccessContainerConcept<container_model> >();
912
+ function_requires< VectorConcept<container_model> >();
913
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_iterator> >();
914
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_reverse_iterator> >();
915
+ }
916
+ #endif
917
+
918
+ // Vector
919
+ #if defined (INTERNAL_VECTOR) || defined (INTERNAL_VECTOR_DENSE)
920
+ {
921
+ typedef vector<T> container_model;
922
+ function_requires< RandomAccessContainerConcept<container_model> >();
923
+ function_requires< Mutable_VectorConcept<container_model> >();
924
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_iterator> >();
925
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::iterator> >();
926
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_reverse_iterator> >();
927
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::reverse_iterator> >();
928
+ }
929
+
930
+ {
931
+ typedef zero_vector<T> container_model;
932
+ function_requires< VectorConcept<container_model> >();
933
+ function_requires< IndexedBidirectional1DIteratorConcept<container_model::const_iterator> >();
934
+ function_requires< IndexedBidirectional1DIteratorConcept<container_model::const_reverse_iterator> >();
935
+ }
936
+
937
+ {
938
+ typedef unit_vector<T> container_model;
939
+ function_requires< VectorConcept<container_model> >();
940
+ function_requires< IndexedBidirectional1DIteratorConcept<container_model::const_iterator> >();
941
+ function_requires< IndexedBidirectional1DIteratorConcept<container_model::const_reverse_iterator> >();
942
+ }
943
+
944
+ {
945
+ typedef scalar_vector<T> container_model;
946
+ function_requires< VectorConcept<container_model> >();
947
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_iterator> >();
948
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_reverse_iterator> >();
949
+ }
950
+
951
+ {
952
+ typedef c_vector<T, 1> container_model;
953
+ function_requires< Mutable_VectorConcept<container_model> >();
954
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_iterator> >();
955
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::iterator> >();
956
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_reverse_iterator> >();
957
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::reverse_iterator> >();
958
+ }
959
+ #endif
960
+
961
+ // Vector Proxies
962
+ #if defined (INTERNAL_VECTOR) || defined (INTERNAL_VECTOR_PROXY)
963
+ {
964
+ typedef vector_range<vector<T> > container_model;
965
+ function_requires< Mutable_VectorExpressionConcept<container_model> >();
966
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_iterator> >();
967
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::iterator> >();
968
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_reverse_iterator> >();
969
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::reverse_iterator> >();
970
+ }
971
+
972
+ {
973
+ typedef vector_slice<vector<T> > container_model;
974
+ function_requires< Mutable_VectorExpressionConcept<container_model> >();
975
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_iterator> >();
976
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::iterator> >();
977
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_reverse_iterator> >();
978
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::reverse_iterator> >();
979
+ }
980
+
981
+ {
982
+ typedef vector_indirect<vector<T> > container_model;
983
+ function_requires< Mutable_VectorExpressionConcept<container_model> >();
984
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_iterator> >();
985
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::iterator> >();
986
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_reverse_iterator> >();
987
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::reverse_iterator> >();
988
+ }
989
+ #endif
990
+
991
+ // Sparse Vector
992
+ #if defined (INTERNAL_SPARSE) || defined (INTERNAL_VECTOR_SPARSE)
993
+ {
994
+ typedef mapped_vector<T> container_model;
995
+ function_requires< Mutable_SparseVectorConcept<container_model> >();
996
+ function_requires< IndexedBidirectional1DIteratorConcept<container_model::const_iterator> >();
997
+ function_requires< Mutable_IndexedBidirectional1DIteratorConcept<container_model::iterator> >();
998
+ function_requires< IndexedBidirectional1DIteratorConcept<container_model::const_reverse_iterator> >();
999
+ function_requires< Mutable_IndexedBidirectional1DIteratorConcept<container_model::reverse_iterator> >();
1000
+ }
1001
+
1002
+ {
1003
+ typedef compressed_vector<T> container_model;
1004
+ function_requires< Mutable_SparseVectorConcept<container_model> >();
1005
+ function_requires< IndexedBidirectional1DIteratorConcept<container_model::const_iterator> >();
1006
+ function_requires< Mutable_IndexedBidirectional1DIteratorConcept<container_model::iterator> >();
1007
+ function_requires< IndexedBidirectional1DIteratorConcept<container_model::const_reverse_iterator> >();
1008
+ function_requires< Mutable_IndexedBidirectional1DIteratorConcept<container_model::reverse_iterator> >();
1009
+ }
1010
+
1011
+ {
1012
+ typedef coordinate_vector<T> container_model;
1013
+ function_requires< Mutable_SparseVectorConcept<container_model> >();
1014
+ function_requires< IndexedBidirectional1DIteratorConcept<container_model::const_iterator> >();
1015
+ function_requires< Mutable_IndexedBidirectional1DIteratorConcept<container_model::iterator> >();
1016
+ function_requires< IndexedBidirectional1DIteratorConcept<container_model::const_reverse_iterator> >();
1017
+ function_requires< Mutable_IndexedBidirectional1DIteratorConcept<container_model::reverse_iterator> >();
1018
+ }
1019
+ #endif
1020
+
1021
+ // Matrix
1022
+ #if defined (INTERNAL_MATRIX) || defined (INTERNAL_MATRIX_DENSE)
1023
+ {
1024
+ typedef matrix<T> container_model;
1025
+ function_requires< Mutable_MatrixConcept<matrix<T> > >();
1026
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
1027
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
1028
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
1029
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
1030
+ }
1031
+
1032
+ {
1033
+ typedef vector_of_vector<T> container_model;
1034
+ function_requires< Mutable_MatrixConcept<matrix<T> > >();
1035
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
1036
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
1037
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
1038
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
1039
+ }
1040
+
1041
+ {
1042
+ typedef zero_matrix<T> container_model;
1043
+ function_requires< Mutable_MatrixConcept<matrix<T> > >();
1044
+ function_requires< IndexedBidirectional2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
1045
+ function_requires< IndexedBidirectional2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
1046
+ }
1047
+
1048
+ {
1049
+ typedef identity_matrix<T> container_model;
1050
+ function_requires< Mutable_MatrixConcept<matrix<T> > >();
1051
+ function_requires< IndexedBidirectional2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
1052
+ function_requires< IndexedBidirectional2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
1053
+ }
1054
+
1055
+ {
1056
+ typedef scalar_matrix<T> container_model;
1057
+ function_requires< Mutable_MatrixConcept<matrix<T> > >();
1058
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
1059
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
1060
+ }
1061
+
1062
+ {
1063
+ typedef c_matrix<T, 1, 1> container_model;
1064
+ function_requires< Mutable_MatrixConcept<matrix<T> > >();
1065
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
1066
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
1067
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
1068
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
1069
+ }
1070
+ #endif
1071
+
1072
+ // Matrix Proxies
1073
+ #if defined (INTERNAL_MATRIX) || defined (INTERNAL_MATRIX_PROXY)
1074
+ {
1075
+ typedef matrix_row<matrix<T> > container_model;
1076
+ function_requires< Mutable_VectorExpressionConcept<container_model> >();
1077
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_iterator> >();
1078
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::iterator> >();
1079
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_reverse_iterator> >();
1080
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::reverse_iterator> >();
1081
+ }
1082
+
1083
+ {
1084
+ typedef matrix_column<matrix<T> > container_model;
1085
+ function_requires< Mutable_VectorExpressionConcept<container_model> >();
1086
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_iterator> >();
1087
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::iterator> >();
1088
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_reverse_iterator> >();
1089
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::reverse_iterator> >();
1090
+ }
1091
+
1092
+ {
1093
+ typedef matrix_vector_range<matrix<T> > container_model;
1094
+ function_requires< Mutable_VectorExpressionConcept<container_model> >();
1095
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_iterator> >();
1096
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::iterator> >();
1097
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_reverse_iterator> >();
1098
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::reverse_iterator> >();
1099
+ }
1100
+
1101
+ {
1102
+ typedef matrix_vector_slice<matrix<T> > container_model;
1103
+ function_requires< Mutable_VectorExpressionConcept<container_model> >();
1104
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_iterator> >();
1105
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::iterator> >();
1106
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_reverse_iterator> >();
1107
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::reverse_iterator> >();
1108
+ }
1109
+
1110
+ {
1111
+ typedef matrix_vector_indirect<matrix<T> > container_model;
1112
+ function_requires< Mutable_VectorExpressionConcept<container_model> >();
1113
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_iterator> >();
1114
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::iterator> >();
1115
+ function_requires< IndexedRandomAccess1DIteratorConcept<container_model::const_reverse_iterator> >();
1116
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<container_model::reverse_iterator> >();
1117
+ }
1118
+
1119
+ {
1120
+ typedef matrix_range<matrix<T> > container_model;
1121
+ function_requires< Mutable_MatrixExpressionConcept<container_model> >();
1122
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
1123
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
1124
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
1125
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
1126
+ }
1127
+
1128
+ {
1129
+ typedef matrix_slice<matrix<T> > container_model;
1130
+ function_requires< Mutable_MatrixExpressionConcept<container_model> >();
1131
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
1132
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
1133
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
1134
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
1135
+ }
1136
+
1137
+ {
1138
+ typedef matrix_indirect<matrix<T> > container_model;
1139
+ function_requires< Mutable_MatrixExpressionConcept<container_model> >();
1140
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
1141
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
1142
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
1143
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
1144
+ }
1145
+ #endif
1146
+
1147
+ // Banded Matrix
1148
+ #if defined (INTERNAL_SPECIAL) || defined (INTERNAL_BANDED)
1149
+ {
1150
+ typedef banded_matrix<T> container_model;
1151
+ function_requires< Mutable_MatrixConcept<container_model> >();
1152
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
1153
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
1154
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
1155
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
1156
+ }
1157
+
1158
+ {
1159
+ typedef banded_adaptor<matrix<T> > container_model;
1160
+ function_requires< Mutable_MatrixExpressionConcept<container_model> >();
1161
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
1162
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
1163
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
1164
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
1165
+ }
1166
+ #endif
1167
+
1168
+ // Triangular Matrix
1169
+ #if defined (INTERNAL_SPECIAL) || defined (INTERNAL_TRIANGULAR)
1170
+ {
1171
+ typedef triangular_matrix<T> container_model;
1172
+ function_requires< Mutable_MatrixConcept<container_model> >();
1173
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
1174
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
1175
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
1176
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
1177
+ }
1178
+
1179
+ {
1180
+ typedef triangular_adaptor<matrix<T> > container_model;
1181
+ function_requires< Mutable_MatrixExpressionConcept<container_model> >();
1182
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
1183
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
1184
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
1185
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
1186
+ }
1187
+ #endif
1188
+
1189
+ // Symmetric Matrix
1190
+ #if defined (INTERNA_SPECIAL) || defined (INTERNAL_SYMMETRIC)
1191
+ {
1192
+ typedef symmetric_matrix<T> container_model;
1193
+ function_requires< Mutable_MatrixConcept<container_model> >();
1194
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
1195
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
1196
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
1197
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
1198
+ }
1199
+
1200
+ {
1201
+ typedef banded_adaptor<matrix<T> > container_model;
1202
+ #ifndef SKIP_BAD
1203
+ // const_iterator (iterator) constructor is bad
1204
+ function_requires< Mutable_MatrixExpressionConcept<container_model> >();
1205
+ #endif
1206
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
1207
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
1208
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
1209
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
1210
+ }
1211
+ #endif
1212
+
1213
+ // Hermitian Matrix
1214
+ #if defined (INTERNAL_SPECIAL) || defined (INTERNAL_HERMITIAN)
1215
+ {
1216
+ typedef hermitian_matrix<T> container_model;
1217
+ function_requires< Mutable_MatrixConcept<container_model> >();
1218
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
1219
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
1220
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
1221
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
1222
+ }
1223
+
1224
+ {
1225
+ typedef hermitian_adaptor<matrix<T> > container_model;
1226
+ #ifndef SKIP_BAD
1227
+ // const_iterator (iterator) constructor is bad
1228
+ function_requires< Mutable_MatrixExpressionConcept<container_model> >();
1229
+ #endif
1230
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
1231
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
1232
+ function_requires< IndexedRandomAccess2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
1233
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
1234
+ }
1235
+ #endif
1236
+
1237
+ // Sparse Matrix
1238
+ #if defined (INTERNAL_SPARSE) || defined (INTERNAL_MATRIX_SPARSE)
1239
+ {
1240
+ typedef mapped_matrix<T> container_model;
1241
+ function_requires< Mutable_SparseMatrixConcept<container_model> >();
1242
+ function_requires< IndexedBidirectional2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
1243
+ function_requires< Mutable_IndexedBidirectional2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
1244
+ function_requires< IndexedBidirectional2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
1245
+ function_requires< Mutable_IndexedBidirectional2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
1246
+ }
1247
+ {
1248
+ typedef mapped_vector_of_mapped_vector<T> container_model;
1249
+ function_requires< Mutable_SparseMatrixConcept<container_model> >();
1250
+ function_requires< IndexedBidirectional2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
1251
+ function_requires< Mutable_IndexedBidirectional2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
1252
+ function_requires< IndexedBidirectional2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
1253
+ function_requires< Mutable_IndexedBidirectional2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
1254
+ }
1255
+ {
1256
+ typedef compressed_matrix<T> container_model;
1257
+ function_requires< Mutable_SparseMatrixConcept<container_model> >();
1258
+ function_requires< IndexedBidirectional2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
1259
+ function_requires< Mutable_IndexedBidirectional2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
1260
+ function_requires< IndexedBidirectional2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
1261
+ function_requires< Mutable_IndexedBidirectional2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
1262
+ }
1263
+ {
1264
+ typedef coordinate_matrix<T> container_model;
1265
+ function_requires< Mutable_SparseMatrixConcept<container_model> >();
1266
+ function_requires< IndexedBidirectional2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
1267
+ function_requires< Mutable_IndexedBidirectional2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
1268
+ function_requires< IndexedBidirectional2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
1269
+ function_requires< Mutable_IndexedBidirectional2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
1270
+ }
1271
+ {
1272
+ typedef generalized_vector_of_vector<T, row_major, vector< coordinate_vector<T> > > container_model;
1273
+ function_requires< Mutable_SparseMatrixConcept<container_model> >();
1274
+ function_requires< IndexedBidirectional2DIteratorConcept<container_model::const_iterator1, container_model::const_iterator2> >();
1275
+ function_requires< Mutable_IndexedBidirectional2DIteratorConcept<container_model::iterator1, container_model::iterator2> >();
1276
+ function_requires< IndexedBidirectional2DIteratorConcept<container_model::const_reverse_iterator1, container_model::const_reverse_iterator2> >();
1277
+ function_requires< Mutable_IndexedBidirectional2DIteratorConcept<container_model::reverse_iterator1, container_model::reverse_iterator2> >();
1278
+ }
1279
+
1280
+ #endif
1281
+
1282
+ // Scalar Expressions
1283
+ #if defined (INTERNAL_EXPRESSION) || defined (INTERNAL_VECTOR_EXPRESSION)
1284
+ function_requires< ScalarExpressionConcept<scalar_value<T> > >();
1285
+ function_requires< ScalarExpressionConcept<scalar_reference<T> > >();
1286
+
1287
+ // Vector Expressions
1288
+ {
1289
+ typedef vector_reference<vector<T> > expression_model;
1290
+ function_requires< VectorExpressionConcept<expression_model> >();
1291
+ function_requires< Mutable_VectorExpressionConcept<expression_model> >();
1292
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_iterator> >();
1293
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<expression_model::iterator> >();
1294
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_reverse_iterator> >();
1295
+ function_requires< Mutable_IndexedRandomAccess1DIteratorConcept<expression_model::reverse_iterator> >();
1296
+ }
1297
+
1298
+ {
1299
+ typedef vector_unary<vector<T>, scalar_identity<T> > expression_model;
1300
+ function_requires< VectorExpressionConcept<expression_model> >();
1301
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_iterator> >();
1302
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_reverse_iterator> >();
1303
+ }
1304
+
1305
+ {
1306
+ typedef vector_binary<vector<T>, vector<T>, scalar_plus<T, T> > expression_model;
1307
+ function_requires< VectorExpressionConcept<expression_model> >();
1308
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_iterator> >();
1309
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_reverse_iterator> >();
1310
+ }
1311
+
1312
+ {
1313
+ typedef vector_binary_scalar1<T, vector<T>, scalar_multiplies<T, T> > expression_model;
1314
+ function_requires< VectorExpressionConcept<expression_model> >();
1315
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_iterator> >();
1316
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_reverse_iterator> >();
1317
+ }
1318
+
1319
+ {
1320
+ typedef vector_binary_scalar2<vector<T>, scalar_value<T>, scalar_multiplies<T, T> > expression_model;
1321
+ function_requires< VectorExpressionConcept<expression_model> >();
1322
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_iterator> >();
1323
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_reverse_iterator> >();
1324
+ }
1325
+
1326
+ {
1327
+ typedef vector_binary_scalar1<scalar_value<T>, vector<T>, scalar_multiplies<T, T> > expression_model;
1328
+ function_requires< VectorExpressionConcept<expression_model> >();
1329
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_iterator> >();
1330
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_reverse_iterator> >();
1331
+ }
1332
+
1333
+ {
1334
+ typedef vector_binary_scalar2<vector<T>, scalar_value<T>, scalar_multiplies<T, T> > expression_model;
1335
+ function_requires< VectorExpressionConcept<expression_model> >();
1336
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_iterator> >();
1337
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_reverse_iterator> >();
1338
+ }
1339
+
1340
+ function_requires< ScalarExpressionConcept<vector_scalar_unary<vector<T>, vector_sum<vector<T> > > > >();
1341
+ function_requires< ScalarExpressionConcept<vector_scalar_unary<vector<T>, vector_norm_1<vector<T> > > > >();
1342
+ function_requires< ScalarExpressionConcept<vector_scalar_unary<vector<T>, vector_norm_2<vector<T> > > > >();
1343
+ function_requires< ScalarExpressionConcept<vector_scalar_unary<vector<T>, vector_norm_inf<vector<T> > > > >();
1344
+
1345
+ function_requires< ScalarExpressionConcept<vector_scalar_binary<vector<T>, vector<T>, vector_inner_prod<vector<T>, vector<T>, T> > > >();
1346
+ #endif
1347
+
1348
+ // Matrix Expressions
1349
+ #if defined (INTERNAL_EXPRESSION) || defined (INTERNAL_MATRIX_EXPRESSION)
1350
+ {
1351
+ typedef matrix_reference<matrix<T> > expression_model;
1352
+ function_requires< MatrixExpressionConcept<expression_model> >();
1353
+ function_requires< Mutable_MatrixExpressionConcept<expression_model> >();
1354
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_iterator1, expression_model::const_iterator2> >();
1355
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<expression_model::iterator1, expression_model::iterator2> >();
1356
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_reverse_iterator1, expression_model::const_reverse_iterator2> >();
1357
+ function_requires< Mutable_IndexedRandomAccess2DIteratorConcept<expression_model::reverse_iterator1, expression_model::reverse_iterator2> >();
1358
+ }
1359
+
1360
+ {
1361
+ typedef vector_matrix_binary<vector<T>, vector<T>, scalar_multiplies<T, T> > expression_model;
1362
+ function_requires< MatrixExpressionConcept<expression_model> >();
1363
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_iterator1, expression_model::const_iterator2> >();
1364
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_reverse_iterator1, expression_model::const_reverse_iterator2> >();
1365
+ }
1366
+
1367
+ {
1368
+ typedef matrix_unary1<matrix<T>, scalar_identity<T> > expression_model;
1369
+ function_requires< MatrixExpressionConcept<expression_model> >();
1370
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_iterator1, expression_model::const_iterator2> >();
1371
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_reverse_iterator1, expression_model::const_reverse_iterator2> >();
1372
+ }
1373
+
1374
+ {
1375
+ typedef matrix_unary2<matrix<T>, scalar_identity<T> > expression_model;
1376
+ function_requires< MatrixExpressionConcept<expression_model> >();
1377
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_iterator1, expression_model::const_iterator2> >();
1378
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_reverse_iterator1, expression_model::const_reverse_iterator2> >();
1379
+ }
1380
+
1381
+ {
1382
+ typedef matrix_binary<matrix<T>, matrix<T>, scalar_plus<T, T> > expression_model;
1383
+ function_requires< MatrixExpressionConcept<expression_model> >();
1384
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_iterator1, expression_model::const_iterator2> >();
1385
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_reverse_iterator1, expression_model::const_reverse_iterator2> >();
1386
+ }
1387
+
1388
+ {
1389
+ typedef matrix_binary_scalar1<T, matrix<T>, scalar_multiplies<T, T> > expression_model;
1390
+ function_requires< MatrixExpressionConcept<expression_model> >();
1391
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_iterator1, expression_model::const_iterator2> >();
1392
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_reverse_iterator1, expression_model::const_reverse_iterator2> >();
1393
+ }
1394
+
1395
+ {
1396
+ typedef matrix_binary_scalar2<matrix<T>, T, scalar_multiplies<T, T> > expression_model;
1397
+ function_requires< MatrixExpressionConcept<expression_model> >();
1398
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_iterator1, expression_model::const_iterator2> >();
1399
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_reverse_iterator1, expression_model::const_reverse_iterator2> >();
1400
+ }
1401
+
1402
+ {
1403
+ typedef matrix_binary_scalar1<scalar_value<T>, matrix<T>, scalar_multiplies<T, T> > expression_model;
1404
+ function_requires< MatrixExpressionConcept<expression_model> >();
1405
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_iterator1, expression_model::const_iterator2> >();
1406
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_reverse_iterator1, expression_model::const_reverse_iterator2> >();
1407
+ }
1408
+
1409
+ {
1410
+ typedef matrix_binary_scalar2<matrix<T>, scalar_value<T>, scalar_multiplies<T, T> > expression_model;
1411
+ function_requires< MatrixExpressionConcept<expression_model> >();
1412
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_iterator1, expression_model::const_iterator2> >();
1413
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_reverse_iterator1, expression_model::const_reverse_iterator2> >();
1414
+ }
1415
+
1416
+ {
1417
+ typedef matrix_vector_binary1<matrix<T>, vector<T>, matrix_vector_prod1<matrix<T>, vector<T>, T> > expression_model;
1418
+ function_requires< VectorExpressionConcept<expression_model> >();
1419
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_iterator> >();
1420
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_reverse_iterator> >();
1421
+ }
1422
+
1423
+ {
1424
+ typedef matrix_vector_binary2<vector<T>, matrix<T>, matrix_vector_prod2<matrix<T>, vector<T>, T > > expression_model;
1425
+ function_requires< VectorExpressionConcept<expression_model> >();
1426
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_iterator> >();
1427
+ function_requires< IndexedRandomAccess1DIteratorConcept<expression_model::const_reverse_iterator> >();
1428
+ }
1429
+
1430
+ {
1431
+ typedef matrix_matrix_binary<matrix<T>, matrix<T>, matrix_matrix_prod<matrix<T>, matrix<T>, T > > expression_model;
1432
+ function_requires< MatrixExpressionConcept<expression_model> >();
1433
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_iterator1, expression_model::const_iterator2> >();
1434
+ function_requires< IndexedRandomAccess2DIteratorConcept<expression_model::const_reverse_iterator1, expression_model::const_reverse_iterator2> >();
1435
+ }
1436
+
1437
+ function_requires< ScalarExpressionConcept<matrix_scalar_unary<matrix<T>, matrix_norm_1<vector<T> > > > >();
1438
+ function_requires< ScalarExpressionConcept<matrix_scalar_unary<matrix<T>, matrix_norm_frobenius<vector<T> > > > >();
1439
+ function_requires< ScalarExpressionConcept<matrix_scalar_unary<matrix<T>, matrix_norm_inf<vector<T> > > > >();
1440
+ #endif
1441
+
1442
+ #ifdef EXTERNAL
1443
+ function_requires< AdditiveAbelianGroupConcept<T> >();
1444
+ function_requires< CommutativeRingWithIdentityConcept<T> >();
1445
+ function_requires< FieldConcept<T> >();
1446
+ function_requires< VectorSpaceConcept<T, vector<T> > >();
1447
+ function_requires< Prod_RingWithIdentityConcept<matrix<T> > >();
1448
+ function_requires< VectorSpaceConcept<T, matrix<T> > >();
1449
+ function_requires< LinearOperatorConcept<T, vector<T>, matrix<T> > >();
1450
+
1451
+ function_requires< AdditiveAbelianGroupConcept<std::complex<T> > >();
1452
+ function_requires< CommutativeRingWithIdentityConcept<std::complex<T> > >();
1453
+ function_requires< FieldConcept<std::complex<T> > >();
1454
+ function_requires< VectorSpaceConcept<std::complex<T>, vector<std::complex<T> > > >();
1455
+ function_requires< Prod_RingWithIdentityConcept<matrix<std::complex<T> > > >();
1456
+ function_requires< VectorSpaceConcept<std::complex<T>, matrix<std::complex<T> > > >();
1457
+ function_requires< LinearOperatorConcept<std::complex<T>, vector<std::complex<T> >, matrix<std::complex<T> > > >();
1458
+ #endif
1459
+ }
1460
+
1461
+ } // end of anonymous namespace
1462
+
1463
+ }}}
1464
+
1465
+ #endif