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.
- package/README.md +29 -2
- package/boost/cast.hpp +20 -0
- package/boost/numeric/conversion/bounds.hpp +24 -0
- package/boost/numeric/conversion/cast.hpp +61 -0
- package/boost/numeric/conversion/conversion_traits.hpp +32 -0
- package/boost/numeric/conversion/converter.hpp +68 -0
- package/boost/numeric/conversion/converter_policies.hpp +194 -0
- package/boost/numeric/conversion/detail/bounds.hpp +58 -0
- package/boost/numeric/conversion/detail/conversion_traits.hpp +97 -0
- package/boost/numeric/conversion/detail/converter.hpp +593 -0
- package/boost/numeric/conversion/detail/int_float_mixture.hpp +72 -0
- package/boost/numeric/conversion/detail/is_subranged.hpp +234 -0
- package/boost/numeric/conversion/detail/meta.hpp +120 -0
- package/boost/numeric/conversion/detail/numeric_cast_traits.hpp +138 -0
- package/boost/numeric/conversion/detail/old_numeric_cast.hpp +308 -0
- package/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp +1741 -0
- package/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp +347 -0
- package/boost/numeric/conversion/detail/sign_mixture.hpp +72 -0
- package/boost/numeric/conversion/detail/udt_builtin_mixture.hpp +69 -0
- package/boost/numeric/conversion/int_float_mixture.hpp +30 -0
- package/boost/numeric/conversion/int_float_mixture_enum.hpp +29 -0
- package/boost/numeric/conversion/is_subranged.hpp +27 -0
- package/boost/numeric/conversion/numeric_cast_traits.hpp +31 -0
- package/boost/numeric/conversion/sign_mixture.hpp +30 -0
- package/boost/numeric/conversion/sign_mixture_enum.hpp +29 -0
- package/boost/numeric/conversion/udt_builtin_mixture.hpp +28 -0
- package/boost/numeric/conversion/udt_builtin_mixture_enum.hpp +26 -0
- package/boost/numeric/interval/arith.hpp +305 -0
- package/boost/numeric/interval/arith2.hpp +304 -0
- package/boost/numeric/interval/arith3.hpp +69 -0
- package/boost/numeric/interval/checking.hpp +130 -0
- package/boost/numeric/interval/compare/certain.hpp +113 -0
- package/boost/numeric/interval/compare/explicit.hpp +248 -0
- package/boost/numeric/interval/compare/lexicographic.hpp +122 -0
- package/boost/numeric/interval/compare/possible.hpp +113 -0
- package/boost/numeric/interval/compare/set.hpp +101 -0
- package/boost/numeric/interval/compare/tribool.hpp +138 -0
- package/boost/numeric/interval/compare.hpp +19 -0
- package/boost/numeric/interval/constants.hpp +85 -0
- package/boost/numeric/interval/detail/alpha_rounding_control.hpp +113 -0
- package/boost/numeric/interval/detail/bcc_rounding_control.hpp +57 -0
- package/boost/numeric/interval/detail/bugs.hpp +48 -0
- package/boost/numeric/interval/detail/c99_rounding_control.hpp +50 -0
- package/boost/numeric/interval/detail/c99sub_rounding_control.hpp +43 -0
- package/boost/numeric/interval/detail/division.hpp +194 -0
- package/boost/numeric/interval/detail/ia64_rounding_control.hpp +83 -0
- package/boost/numeric/interval/detail/interval_prototype.hpp +41 -0
- package/boost/numeric/interval/detail/msvc_rounding_control.hpp +113 -0
- package/boost/numeric/interval/detail/ppc_rounding_control.hpp +99 -0
- package/boost/numeric/interval/detail/sparc_rounding_control.hpp +112 -0
- package/boost/numeric/interval/detail/test_input.hpp +76 -0
- package/boost/numeric/interval/detail/x86_rounding_control.hpp +108 -0
- package/boost/numeric/interval/detail/x86gcc_rounding_control.hpp +51 -0
- package/boost/numeric/interval/ext/integer.hpp +70 -0
- package/boost/numeric/interval/ext/x86_fast_rounding_control.hpp +70 -0
- package/boost/numeric/interval/hw_rounding.hpp +73 -0
- package/boost/numeric/interval/interval.hpp +450 -0
- package/boost/numeric/interval/io.hpp +41 -0
- package/boost/numeric/interval/limits.hpp +49 -0
- package/boost/numeric/interval/policies.hpp +75 -0
- package/boost/numeric/interval/rounded_arith.hpp +120 -0
- package/boost/numeric/interval/rounded_transc.hpp +140 -0
- package/boost/numeric/interval/rounding.hpp +101 -0
- package/boost/numeric/interval/transc.hpp +232 -0
- package/boost/numeric/interval/utility.hpp +335 -0
- package/boost/numeric/interval/utility_fwd.hpp +172 -0
- package/boost/numeric/interval.hpp +32 -0
- package/boost/numeric/odeint/algebra/algebra_dispatcher.hpp +86 -0
- package/boost/numeric/odeint/algebra/array_algebra.hpp +293 -0
- package/boost/numeric/odeint/algebra/default_operations.hpp +599 -0
- package/boost/numeric/odeint/algebra/detail/extract_value_type.hpp +51 -0
- package/boost/numeric/odeint/algebra/detail/for_each.hpp +165 -0
- package/boost/numeric/odeint/algebra/detail/macros.hpp +35 -0
- package/boost/numeric/odeint/algebra/detail/norm_inf.hpp +46 -0
- package/boost/numeric/odeint/algebra/fusion_algebra.hpp +216 -0
- package/boost/numeric/odeint/algebra/fusion_algebra_dispatcher.hpp +48 -0
- package/boost/numeric/odeint/algebra/multi_array_algebra.hpp +146 -0
- package/boost/numeric/odeint/algebra/norm_result_type.hpp +33 -0
- package/boost/numeric/odeint/algebra/operations_dispatcher.hpp +41 -0
- package/boost/numeric/odeint/algebra/range_algebra.hpp +142 -0
- package/boost/numeric/odeint/algebra/vector_space_algebra.hpp +175 -0
- package/boost/numeric/odeint/config.hpp +53 -0
- package/boost/numeric/odeint/external/blaze/blaze_algebra_dispatcher.hpp +55 -0
- package/boost/numeric/odeint/external/blaze/blaze_resize.hpp +64 -0
- package/boost/numeric/odeint/external/compute/compute.hpp +27 -0
- package/boost/numeric/odeint/external/compute/compute_algebra.hpp +65 -0
- package/boost/numeric/odeint/external/compute/compute_algebra_dispatcher.hpp +41 -0
- package/boost/numeric/odeint/external/compute/compute_operations.hpp +198 -0
- package/boost/numeric/odeint/external/compute/compute_operations_dispatcher.hpp +44 -0
- package/boost/numeric/odeint/external/compute/compute_resize.hpp +92 -0
- package/boost/numeric/odeint/external/eigen/eigen.hpp +27 -0
- package/boost/numeric/odeint/external/eigen/eigen_algebra.hpp +98 -0
- package/boost/numeric/odeint/external/eigen/eigen_algebra_dispatcher.hpp +49 -0
- package/boost/numeric/odeint/external/eigen/eigen_resize.hpp +103 -0
- package/boost/numeric/odeint/external/gsl/gsl_wrapper.hpp +228 -0
- package/boost/numeric/odeint/external/mkl/mkl_operations.hpp +181 -0
- package/boost/numeric/odeint/external/mpi/mpi.hpp +25 -0
- package/boost/numeric/odeint/external/mpi/mpi_nested_algebra.hpp +62 -0
- package/boost/numeric/odeint/external/mpi/mpi_state.hpp +113 -0
- package/boost/numeric/odeint/external/mpi/mpi_vector_state.hpp +95 -0
- package/boost/numeric/odeint/external/mtl4/implicit_euler_mtl4.hpp +161 -0
- package/boost/numeric/odeint/external/mtl4/mtl4.hpp +23 -0
- package/boost/numeric/odeint/external/mtl4/mtl4_algebra_dispatcher.hpp +99 -0
- package/boost/numeric/odeint/external/mtl4/mtl4_resize.hpp +134 -0
- package/boost/numeric/odeint/external/nt2/nt2_algebra_dispatcher.hpp +25 -0
- package/boost/numeric/odeint/external/nt2/nt2_copy.hpp +33 -0
- package/boost/numeric/odeint/external/nt2/nt2_norm_inf.hpp +31 -0
- package/boost/numeric/odeint/external/nt2/nt2_resize.hpp +54 -0
- package/boost/numeric/odeint/external/openmp/openmp.hpp +31 -0
- package/boost/numeric/odeint/external/openmp/openmp_nested_algebra.hpp +281 -0
- package/boost/numeric/odeint/external/openmp/openmp_range_algebra.hpp +276 -0
- package/boost/numeric/odeint/external/openmp/openmp_state.hpp +172 -0
- package/boost/numeric/odeint/external/thrust/thrust.hpp +27 -0
- package/boost/numeric/odeint/external/thrust/thrust_algebra.hpp +217 -0
- package/boost/numeric/odeint/external/thrust/thrust_algebra_dispatcher.hpp +118 -0
- package/boost/numeric/odeint/external/thrust/thrust_operations.hpp +233 -0
- package/boost/numeric/odeint/external/thrust/thrust_operations_dispatcher.hpp +118 -0
- package/boost/numeric/odeint/external/thrust/thrust_resize.hpp +197 -0
- package/boost/numeric/odeint/external/vexcl/vexcl.hpp +28 -0
- package/boost/numeric/odeint/external/vexcl/vexcl_abs.hpp +61 -0
- package/boost/numeric/odeint/external/vexcl/vexcl_algebra_dispatcher.hpp +51 -0
- package/boost/numeric/odeint/external/vexcl/vexcl_copy.hpp +55 -0
- package/boost/numeric/odeint/external/vexcl/vexcl_norm_inf.hpp +68 -0
- package/boost/numeric/odeint/external/vexcl/vexcl_resize.hpp +96 -0
- package/boost/numeric/odeint/external/vexcl/vexcl_same_instance.hpp +58 -0
- package/boost/numeric/odeint/external/viennacl/viennacl_operations.hpp +226 -0
- package/boost/numeric/odeint/external/viennacl/viennacl_resize.hpp +68 -0
- package/boost/numeric/odeint/integrate/check_adapter.hpp +222 -0
- package/boost/numeric/odeint/integrate/detail/functors.hpp +70 -0
- package/boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp +161 -0
- package/boost/numeric/odeint/integrate/detail/integrate_const.hpp +167 -0
- package/boost/numeric/odeint/integrate/detail/integrate_n_steps.hpp +161 -0
- package/boost/numeric/odeint/integrate/detail/integrate_times.hpp +179 -0
- package/boost/numeric/odeint/integrate/integrate.hpp +133 -0
- package/boost/numeric/odeint/integrate/integrate_adaptive.hpp +127 -0
- package/boost/numeric/odeint/integrate/integrate_const.hpp +195 -0
- package/boost/numeric/odeint/integrate/integrate_n_steps.hpp +178 -0
- package/boost/numeric/odeint/integrate/integrate_times.hpp +220 -0
- package/boost/numeric/odeint/integrate/max_step_checker.hpp +114 -0
- package/boost/numeric/odeint/integrate/null_observer.hpp +38 -0
- package/boost/numeric/odeint/integrate/observer_collection.hpp +55 -0
- package/boost/numeric/odeint/iterator/adaptive_iterator.hpp +183 -0
- package/boost/numeric/odeint/iterator/adaptive_time_iterator.hpp +175 -0
- package/boost/numeric/odeint/iterator/const_step_iterator.hpp +180 -0
- package/boost/numeric/odeint/iterator/const_step_time_iterator.hpp +173 -0
- package/boost/numeric/odeint/iterator/detail/ode_iterator_base.hpp +199 -0
- package/boost/numeric/odeint/iterator/impl/adaptive_iterator_impl.hpp +251 -0
- package/boost/numeric/odeint/iterator/impl/const_step_iterator_impl.hpp +228 -0
- package/boost/numeric/odeint/iterator/impl/n_step_iterator_impl.hpp +239 -0
- package/boost/numeric/odeint/iterator/impl/times_iterator_impl.hpp +369 -0
- package/boost/numeric/odeint/iterator/integrate/detail/functors.hpp +70 -0
- package/boost/numeric/odeint/iterator/integrate/detail/integrate_adaptive.hpp +121 -0
- package/boost/numeric/odeint/iterator/integrate/detail/integrate_const.hpp +111 -0
- package/boost/numeric/odeint/iterator/integrate/detail/integrate_n_steps.hpp +107 -0
- package/boost/numeric/odeint/iterator/integrate/detail/integrate_times.hpp +67 -0
- package/boost/numeric/odeint/iterator/integrate/integrate.hpp +111 -0
- package/boost/numeric/odeint/iterator/integrate/integrate_adaptive.hpp +127 -0
- package/boost/numeric/odeint/iterator/integrate/integrate_const.hpp +158 -0
- package/boost/numeric/odeint/iterator/integrate/integrate_n_steps.hpp +123 -0
- package/boost/numeric/odeint/iterator/integrate/integrate_times.hpp +131 -0
- package/boost/numeric/odeint/iterator/integrate/null_observer.hpp +38 -0
- package/boost/numeric/odeint/iterator/integrate/observer_collection.hpp +55 -0
- package/boost/numeric/odeint/iterator/n_step_iterator.hpp +168 -0
- package/boost/numeric/odeint/iterator/n_step_time_iterator.hpp +169 -0
- package/boost/numeric/odeint/iterator/times_iterator.hpp +189 -0
- package/boost/numeric/odeint/iterator/times_time_iterator.hpp +193 -0
- package/boost/numeric/odeint/stepper/adams_bashforth.hpp +418 -0
- package/boost/numeric/odeint/stepper/adams_bashforth_moulton.hpp +313 -0
- package/boost/numeric/odeint/stepper/adams_moulton.hpp +201 -0
- package/boost/numeric/odeint/stepper/adaptive_adams_bashforth_moulton.hpp +237 -0
- package/boost/numeric/odeint/stepper/base/algebra_stepper_base.hpp +91 -0
- package/boost/numeric/odeint/stepper/base/explicit_error_stepper_base.hpp +588 -0
- package/boost/numeric/odeint/stepper/base/explicit_error_stepper_fsal_base.hpp +677 -0
- package/boost/numeric/odeint/stepper/base/explicit_stepper_base.hpp +415 -0
- package/boost/numeric/odeint/stepper/base/symplectic_rkn_stepper_base.hpp +431 -0
- package/boost/numeric/odeint/stepper/bulirsch_stoer.hpp +642 -0
- package/boost/numeric/odeint/stepper/bulirsch_stoer_dense_out.hpp +838 -0
- package/boost/numeric/odeint/stepper/controlled_adams_bashforth_moulton.hpp +322 -0
- package/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp +1018 -0
- package/boost/numeric/odeint/stepper/controlled_step_result.hpp +42 -0
- package/boost/numeric/odeint/stepper/dense_output_runge_kutta.hpp +476 -0
- package/boost/numeric/odeint/stepper/detail/adams_bashforth_call_algebra.hpp +148 -0
- package/boost/numeric/odeint/stepper/detail/adams_bashforth_coefficients.hpp +168 -0
- package/boost/numeric/odeint/stepper/detail/adams_moulton_call_algebra.hpp +148 -0
- package/boost/numeric/odeint/stepper/detail/adams_moulton_coefficients.hpp +168 -0
- package/boost/numeric/odeint/stepper/detail/adaptive_adams_coefficients.hpp +207 -0
- package/boost/numeric/odeint/stepper/detail/generic_rk_algorithm.hpp +247 -0
- package/boost/numeric/odeint/stepper/detail/generic_rk_call_algebra.hpp +263 -0
- package/boost/numeric/odeint/stepper/detail/generic_rk_operations.hpp +252 -0
- package/boost/numeric/odeint/stepper/detail/pid_step_adjuster.hpp +199 -0
- package/boost/numeric/odeint/stepper/detail/pid_step_adjuster_coefficients.hpp +180 -0
- package/boost/numeric/odeint/stepper/detail/rotating_buffer.hpp +84 -0
- package/boost/numeric/odeint/stepper/euler.hpp +166 -0
- package/boost/numeric/odeint/stepper/explicit_error_generic_rk.hpp +255 -0
- package/boost/numeric/odeint/stepper/explicit_generic_rk.hpp +246 -0
- package/boost/numeric/odeint/stepper/extrapolation_stepper.hpp +288 -0
- package/boost/numeric/odeint/stepper/generation/generation_controlled_adams_bashforth_moulton.hpp +59 -0
- package/boost/numeric/odeint/stepper/generation/generation_controlled_runge_kutta.hpp +61 -0
- package/boost/numeric/odeint/stepper/generation/generation_dense_output_runge_kutta.hpp +65 -0
- package/boost/numeric/odeint/stepper/generation/generation_rosenbrock4.hpp +79 -0
- package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54.hpp +47 -0
- package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54_classic.hpp +48 -0
- package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_dopri5.hpp +56 -0
- package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_fehlberg78.hpp +46 -0
- package/boost/numeric/odeint/stepper/generation/make_controlled.hpp +103 -0
- package/boost/numeric/odeint/stepper/generation/make_dense_output.hpp +100 -0
- package/boost/numeric/odeint/stepper/generation.hpp +37 -0
- package/boost/numeric/odeint/stepper/implicit_euler.hpp +170 -0
- package/boost/numeric/odeint/stepper/modified_midpoint.hpp +315 -0
- package/boost/numeric/odeint/stepper/rosenbrock4.hpp +346 -0
- package/boost/numeric/odeint/stepper/rosenbrock4_controller.hpp +240 -0
- package/boost/numeric/odeint/stepper/rosenbrock4_dense_output.hpp +204 -0
- package/boost/numeric/odeint/stepper/runge_kutta4.hpp +181 -0
- package/boost/numeric/odeint/stepper/runge_kutta4_classic.hpp +232 -0
- package/boost/numeric/odeint/stepper/runge_kutta_cash_karp54.hpp +231 -0
- package/boost/numeric/odeint/stepper/runge_kutta_cash_karp54_classic.hpp +289 -0
- package/boost/numeric/odeint/stepper/runge_kutta_dopri5.hpp +403 -0
- package/boost/numeric/odeint/stepper/runge_kutta_fehlberg78.hpp +374 -0
- package/boost/numeric/odeint/stepper/stepper_categories.hpp +66 -0
- package/boost/numeric/odeint/stepper/symplectic_euler.hpp +136 -0
- package/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_m4_mclachlan.hpp +160 -0
- package/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_mclachlan.hpp +162 -0
- package/boost/numeric/odeint/stepper/velocity_verlet.hpp +375 -0
- package/boost/numeric/odeint/tools/assert.hpp +30 -0
- package/boost/numeric/odeint/tools/is_standalone.hpp +21 -0
- package/boost/numeric/odeint/tools/traits.hpp +39 -0
- package/boost/numeric/odeint/util/bind.hpp +35 -0
- package/boost/numeric/odeint/util/copy.hpp +88 -0
- package/boost/numeric/odeint/util/detail/is_range.hpp +127 -0
- package/boost/numeric/odeint/util/detail/less_with_sign.hpp +78 -0
- package/boost/numeric/odeint/util/is_pair.hpp +42 -0
- package/boost/numeric/odeint/util/is_resizeable.hpp +84 -0
- package/boost/numeric/odeint/util/multi_array_adaption.hpp +131 -0
- package/boost/numeric/odeint/util/n_ary_helper.hpp +96 -0
- package/boost/numeric/odeint/util/odeint_error.hpp +77 -0
- package/boost/numeric/odeint/util/resize.hpp +120 -0
- package/boost/numeric/odeint/util/resizer.hpp +94 -0
- package/boost/numeric/odeint/util/same_instance.hpp +56 -0
- package/boost/numeric/odeint/util/same_size.hpp +117 -0
- package/boost/numeric/odeint/util/split.hpp +64 -0
- package/boost/numeric/odeint/util/split_adaptor.hpp +103 -0
- package/boost/numeric/odeint/util/state_wrapper.hpp +50 -0
- package/boost/numeric/odeint/util/stepper_traits.hpp +63 -0
- package/boost/numeric/odeint/util/ublas_matrix_expression.patch +6 -0
- package/boost/numeric/odeint/util/ublas_wrapper.hpp +297 -0
- package/boost/numeric/odeint/util/unit_helper.hpp +151 -0
- package/boost/numeric/odeint/util/unwrap_reference.hpp +141 -0
- package/boost/numeric/odeint/version.hpp +55 -0
- package/boost/numeric/odeint.hpp +87 -0
- package/boost/numeric/ublas/assignment.hpp +1288 -0
- package/boost/numeric/ublas/banded.hpp +2372 -0
- package/boost/numeric/ublas/blas.hpp +499 -0
- package/boost/numeric/ublas/detail/concepts.hpp +1465 -0
- package/boost/numeric/ublas/detail/config.hpp +304 -0
- package/boost/numeric/ublas/detail/definitions.hpp +212 -0
- package/boost/numeric/ublas/detail/documentation.hpp +33 -0
- package/boost/numeric/ublas/detail/duff.hpp +56 -0
- package/boost/numeric/ublas/detail/iterator.hpp +1448 -0
- package/boost/numeric/ublas/detail/matrix_assign.hpp +1785 -0
- package/boost/numeric/ublas/detail/raw.hpp +878 -0
- package/boost/numeric/ublas/detail/returntype_deduction.hpp +174 -0
- package/boost/numeric/ublas/detail/temporary.hpp +33 -0
- package/boost/numeric/ublas/detail/vector_assign.hpp +609 -0
- package/boost/numeric/ublas/doxydoc.hpp +58 -0
- package/boost/numeric/ublas/exception.hpp +297 -0
- package/boost/numeric/ublas/experimental/sparse_view.hpp +317 -0
- package/boost/numeric/ublas/expression_types.hpp +506 -0
- package/boost/numeric/ublas/functional.hpp +2112 -0
- package/boost/numeric/ublas/fwd.hpp +229 -0
- package/boost/numeric/ublas/hermitian.hpp +2633 -0
- package/boost/numeric/ublas/io.hpp +355 -0
- package/boost/numeric/ublas/lu.hpp +350 -0
- package/boost/numeric/ublas/matrix.hpp +6013 -0
- package/boost/numeric/ublas/matrix_expression.hpp +5693 -0
- package/boost/numeric/ublas/matrix_proxy.hpp +5457 -0
- package/boost/numeric/ublas/matrix_sparse.hpp +5773 -0
- package/boost/numeric/ublas/matrix_vector.hpp +406 -0
- package/boost/numeric/ublas/opencl/elementwise.hpp +508 -0
- package/boost/numeric/ublas/opencl/library.hpp +38 -0
- package/boost/numeric/ublas/opencl/matrix.hpp +123 -0
- package/boost/numeric/ublas/opencl/misc.hpp +182 -0
- package/boost/numeric/ublas/opencl/operations.hpp +18 -0
- package/boost/numeric/ublas/opencl/prod.hpp +364 -0
- package/boost/numeric/ublas/opencl/transpose.hpp +142 -0
- package/boost/numeric/ublas/opencl/vector.hpp +90 -0
- package/boost/numeric/ublas/opencl.hpp +16 -0
- package/boost/numeric/ublas/operation/begin.hpp +318 -0
- package/boost/numeric/ublas/operation/c_array.hpp +41 -0
- package/boost/numeric/ublas/operation/end.hpp +318 -0
- package/boost/numeric/ublas/operation/num_columns.hpp +45 -0
- package/boost/numeric/ublas/operation/num_rows.hpp +44 -0
- package/boost/numeric/ublas/operation/size.hpp +350 -0
- package/boost/numeric/ublas/operation.hpp +830 -0
- package/boost/numeric/ublas/operation_blocked.hpp +266 -0
- package/boost/numeric/ublas/operation_sparse.hpp +198 -0
- package/boost/numeric/ublas/operations.hpp +26 -0
- package/boost/numeric/ublas/storage.hpp +2131 -0
- package/boost/numeric/ublas/storage_sparse.hpp +578 -0
- package/boost/numeric/ublas/symmetric.hpp +2309 -0
- package/boost/numeric/ublas/tags.hpp +37 -0
- package/boost/numeric/ublas/tensor/algorithms.hpp +345 -0
- package/boost/numeric/ublas/tensor/expression.hpp +181 -0
- package/boost/numeric/ublas/tensor/expression_evaluation.hpp +288 -0
- package/boost/numeric/ublas/tensor/extents.hpp +335 -0
- package/boost/numeric/ublas/tensor/functions.hpp +558 -0
- package/boost/numeric/ublas/tensor/index.hpp +89 -0
- package/boost/numeric/ublas/tensor/multi_index.hpp +110 -0
- package/boost/numeric/ublas/tensor/multi_index_utility.hpp +364 -0
- package/boost/numeric/ublas/tensor/multiplication.hpp +945 -0
- package/boost/numeric/ublas/tensor/operators_arithmetic.hpp +244 -0
- package/boost/numeric/ublas/tensor/operators_comparison.hpp +175 -0
- package/boost/numeric/ublas/tensor/ostream.hpp +122 -0
- package/boost/numeric/ublas/tensor/storage_traits.hpp +84 -0
- package/boost/numeric/ublas/tensor/strides.hpp +251 -0
- package/boost/numeric/ublas/tensor/tensor.hpp +734 -0
- package/boost/numeric/ublas/tensor.hpp +26 -0
- package/boost/numeric/ublas/traits/c_array.hpp +110 -0
- package/boost/numeric/ublas/traits/const_iterator_type.hpp +127 -0
- package/boost/numeric/ublas/traits/iterator_type.hpp +126 -0
- package/boost/numeric/ublas/traits.hpp +753 -0
- package/boost/numeric/ublas/triangular.hpp +2775 -0
- package/boost/numeric/ublas/vector.hpp +2947 -0
- package/boost/numeric/ublas/vector_expression.hpp +1762 -0
- package/boost/numeric/ublas/vector_of_vector.hpp +1347 -0
- package/boost/numeric/ublas/vector_proxy.hpp +1697 -0
- package/boost/numeric/ublas/vector_sparse.hpp +2246 -0
- package/package.json +3 -7
|
@@ -0,0 +1,609 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright (c) 2000-2002
|
|
3
|
+
// Joerg Walter, Mathias Koch
|
|
4
|
+
//
|
|
5
|
+
// Distributed under the Boost Software License, Version 1.0. (See
|
|
6
|
+
// accompanying file LICENSE_1_0.txt or copy at
|
|
7
|
+
// http://www.boost.org/LICENSE_1_0.txt)
|
|
8
|
+
//
|
|
9
|
+
// The authors gratefully acknowledge the support of
|
|
10
|
+
// GeNeSys mbH & Co. KG in producing this work.
|
|
11
|
+
//
|
|
12
|
+
|
|
13
|
+
#ifndef _BOOST_UBLAS_VECTOR_ASSIGN_
|
|
14
|
+
#define _BOOST_UBLAS_VECTOR_ASSIGN_
|
|
15
|
+
|
|
16
|
+
#include <boost/numeric/ublas/functional.hpp> // scalar_assign
|
|
17
|
+
// Required for make_conformant storage
|
|
18
|
+
#include <vector>
|
|
19
|
+
|
|
20
|
+
// Iterators based on ideas of Jeremy Siek
|
|
21
|
+
|
|
22
|
+
namespace boost { namespace numeric { namespace ublas {
|
|
23
|
+
namespace detail {
|
|
24
|
+
|
|
25
|
+
// Weak equality check - useful to compare equality two arbitary vector expression results.
|
|
26
|
+
// Since the actual expressions are unknown, we check for and arbitary error bound
|
|
27
|
+
// on the relative error.
|
|
28
|
+
// For a linear expression the infinity norm makes sense as we do not know how the elements will be
|
|
29
|
+
// combined in the expression. False positive results are inevitable for arbirary expressions!
|
|
30
|
+
template<class E1, class E2, class S>
|
|
31
|
+
BOOST_UBLAS_INLINE
|
|
32
|
+
bool equals (const vector_expression<E1> &e1, const vector_expression<E2> &e2, S epsilon, S min_norm) {
|
|
33
|
+
return norm_inf (e1 - e2) <= epsilon *
|
|
34
|
+
std::max<S> (std::max<S> (norm_inf (e1), norm_inf (e2)), min_norm);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
template<class E1, class E2>
|
|
38
|
+
BOOST_UBLAS_INLINE
|
|
39
|
+
bool expression_type_check (const vector_expression<E1> &e1, const vector_expression<E2> &e2) {
|
|
40
|
+
typedef typename type_traits<typename promote_traits<typename E1::value_type,
|
|
41
|
+
typename E2::value_type>::promote_type>::real_type real_type;
|
|
42
|
+
return equals (e1, e2, BOOST_UBLAS_TYPE_CHECK_EPSILON, BOOST_UBLAS_TYPE_CHECK_MIN);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
// Make sparse proxies conformant
|
|
47
|
+
template<class V, class E>
|
|
48
|
+
// BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
|
|
49
|
+
void make_conformant (V &v, const vector_expression<E> &e) {
|
|
50
|
+
BOOST_UBLAS_CHECK (v.size () == e ().size (), bad_size ());
|
|
51
|
+
typedef typename V::size_type size_type;
|
|
52
|
+
typedef typename V::difference_type difference_type;
|
|
53
|
+
typedef typename V::value_type value_type;
|
|
54
|
+
// FIXME unbounded_array with push_back maybe better
|
|
55
|
+
std::vector<size_type> index;
|
|
56
|
+
typename V::iterator it (v.begin ());
|
|
57
|
+
typename V::iterator it_end (v.end ());
|
|
58
|
+
typename E::const_iterator ite (e ().begin ());
|
|
59
|
+
typename E::const_iterator ite_end (e ().end ());
|
|
60
|
+
if (it != it_end && ite != ite_end) {
|
|
61
|
+
size_type it_index = it.index (), ite_index = ite.index ();
|
|
62
|
+
for (;;) {
|
|
63
|
+
difference_type compare = it_index - ite_index;
|
|
64
|
+
if (compare == 0) {
|
|
65
|
+
++ it, ++ ite;
|
|
66
|
+
if (it != it_end && ite != ite_end) {
|
|
67
|
+
it_index = it.index ();
|
|
68
|
+
ite_index = ite.index ();
|
|
69
|
+
} else
|
|
70
|
+
break;
|
|
71
|
+
} else if (compare < 0) {
|
|
72
|
+
increment (it, it_end, - compare);
|
|
73
|
+
if (it != it_end)
|
|
74
|
+
it_index = it.index ();
|
|
75
|
+
else
|
|
76
|
+
break;
|
|
77
|
+
} else if (compare > 0) {
|
|
78
|
+
if (*ite != value_type/*zero*/())
|
|
79
|
+
index.push_back (ite.index ());
|
|
80
|
+
++ ite;
|
|
81
|
+
if (ite != ite_end)
|
|
82
|
+
ite_index = ite.index ();
|
|
83
|
+
else
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
while (ite != ite_end) {
|
|
90
|
+
if (*ite != value_type/*zero*/())
|
|
91
|
+
index.push_back (ite.index ());
|
|
92
|
+
++ ite;
|
|
93
|
+
}
|
|
94
|
+
for (size_type k = 0; k < index.size (); ++ k)
|
|
95
|
+
v (index [k]) = value_type/*zero*/();
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
}//namespace detail
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
// Explicitly iterating
|
|
102
|
+
template<template <class T1, class T2> class F, class V, class T>
|
|
103
|
+
// BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
|
|
104
|
+
void iterating_vector_assign_scalar (V &v, const T &t) {
|
|
105
|
+
typedef F<typename V::iterator::reference, T> functor_type;
|
|
106
|
+
typedef typename V::difference_type difference_type;
|
|
107
|
+
difference_type size (v.size ());
|
|
108
|
+
typename V::iterator it (v.begin ());
|
|
109
|
+
BOOST_UBLAS_CHECK (v.end () - it == size, bad_size ());
|
|
110
|
+
#ifndef BOOST_UBLAS_USE_DUFF_DEVICE
|
|
111
|
+
while (-- size >= 0)
|
|
112
|
+
functor_type::apply (*it, t), ++ it;
|
|
113
|
+
#else
|
|
114
|
+
DD (size, 4, r, (functor_type::apply (*it, t), ++ it));
|
|
115
|
+
#endif
|
|
116
|
+
}
|
|
117
|
+
// Explicitly case
|
|
118
|
+
template<template <class T1, class T2> class F, class V, class T>
|
|
119
|
+
// BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
|
|
120
|
+
void indexing_vector_assign_scalar (V &v, const T &t) {
|
|
121
|
+
typedef F<typename V::reference, T> functor_type;
|
|
122
|
+
typedef typename V::size_type size_type;
|
|
123
|
+
size_type size (v.size ());
|
|
124
|
+
#ifndef BOOST_UBLAS_USE_DUFF_DEVICE
|
|
125
|
+
for (size_type i = 0; i < size; ++ i)
|
|
126
|
+
functor_type::apply (v (i), t);
|
|
127
|
+
#else
|
|
128
|
+
size_type i (0);
|
|
129
|
+
DD (size, 4, r, (functor_type::apply (v (i), t), ++ i));
|
|
130
|
+
#endif
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// Dense (proxy) case
|
|
134
|
+
template<template <class T1, class T2> class F, class V, class T>
|
|
135
|
+
// BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
|
|
136
|
+
void vector_assign_scalar (V &v, const T &t, dense_proxy_tag) {
|
|
137
|
+
#ifdef BOOST_UBLAS_USE_INDEXING
|
|
138
|
+
indexing_vector_assign_scalar<F> (v, t);
|
|
139
|
+
#elif BOOST_UBLAS_USE_ITERATING
|
|
140
|
+
iterating_vector_assign_scalar<F> (v, t);
|
|
141
|
+
#else
|
|
142
|
+
typedef typename V::size_type size_type;
|
|
143
|
+
size_type size (v.size ());
|
|
144
|
+
if (size >= BOOST_UBLAS_ITERATOR_THRESHOLD)
|
|
145
|
+
iterating_vector_assign_scalar<F> (v, t);
|
|
146
|
+
else
|
|
147
|
+
indexing_vector_assign_scalar<F> (v, t);
|
|
148
|
+
#endif
|
|
149
|
+
}
|
|
150
|
+
// Packed (proxy) case
|
|
151
|
+
template<template <class T1, class T2> class F, class V, class T>
|
|
152
|
+
// BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
|
|
153
|
+
void vector_assign_scalar (V &v, const T &t, packed_proxy_tag) {
|
|
154
|
+
typedef F<typename V::iterator::reference, T> functor_type;
|
|
155
|
+
typedef typename V::difference_type difference_type;
|
|
156
|
+
typename V::iterator it (v.begin ());
|
|
157
|
+
difference_type size (v.end () - it);
|
|
158
|
+
while (-- size >= 0)
|
|
159
|
+
functor_type::apply (*it, t), ++ it;
|
|
160
|
+
}
|
|
161
|
+
// Sparse (proxy) case
|
|
162
|
+
template<template <class T1, class T2> class F, class V, class T>
|
|
163
|
+
// BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
|
|
164
|
+
void vector_assign_scalar (V &v, const T &t, sparse_proxy_tag) {
|
|
165
|
+
typedef F<typename V::iterator::reference, T> functor_type;
|
|
166
|
+
typename V::iterator it (v.begin ());
|
|
167
|
+
typename V::iterator it_end (v.end ());
|
|
168
|
+
while (it != it_end)
|
|
169
|
+
functor_type::apply (*it, t), ++ it;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Dispatcher
|
|
173
|
+
template<template <class T1, class T2> class F, class V, class T>
|
|
174
|
+
BOOST_UBLAS_INLINE
|
|
175
|
+
void vector_assign_scalar (V &v, const T &t) {
|
|
176
|
+
typedef typename V::storage_category storage_category;
|
|
177
|
+
vector_assign_scalar<F> (v, t, storage_category ());
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
template<class SC, bool COMPUTED, class RI>
|
|
181
|
+
struct vector_assign_traits {
|
|
182
|
+
typedef SC storage_category;
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
template<bool COMPUTED>
|
|
186
|
+
struct vector_assign_traits<dense_tag, COMPUTED, packed_random_access_iterator_tag> {
|
|
187
|
+
typedef packed_tag storage_category;
|
|
188
|
+
};
|
|
189
|
+
template<>
|
|
190
|
+
struct vector_assign_traits<dense_tag, false, sparse_bidirectional_iterator_tag> {
|
|
191
|
+
typedef sparse_tag storage_category;
|
|
192
|
+
};
|
|
193
|
+
template<>
|
|
194
|
+
struct vector_assign_traits<dense_tag, true, sparse_bidirectional_iterator_tag> {
|
|
195
|
+
typedef sparse_proxy_tag storage_category;
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
template<bool COMPUTED>
|
|
199
|
+
struct vector_assign_traits<dense_proxy_tag, COMPUTED, packed_random_access_iterator_tag> {
|
|
200
|
+
typedef packed_proxy_tag storage_category;
|
|
201
|
+
};
|
|
202
|
+
template<>
|
|
203
|
+
struct vector_assign_traits<dense_proxy_tag, false, sparse_bidirectional_iterator_tag> {
|
|
204
|
+
typedef sparse_proxy_tag storage_category;
|
|
205
|
+
};
|
|
206
|
+
template<>
|
|
207
|
+
struct vector_assign_traits<dense_proxy_tag, true, sparse_bidirectional_iterator_tag> {
|
|
208
|
+
typedef sparse_proxy_tag storage_category;
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
template<>
|
|
212
|
+
struct vector_assign_traits<packed_tag, false, sparse_bidirectional_iterator_tag> {
|
|
213
|
+
typedef sparse_tag storage_category;
|
|
214
|
+
};
|
|
215
|
+
template<>
|
|
216
|
+
struct vector_assign_traits<packed_tag, true, sparse_bidirectional_iterator_tag> {
|
|
217
|
+
typedef sparse_proxy_tag storage_category;
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
template<bool COMPUTED>
|
|
221
|
+
struct vector_assign_traits<packed_proxy_tag, COMPUTED, sparse_bidirectional_iterator_tag> {
|
|
222
|
+
typedef sparse_proxy_tag storage_category;
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
template<>
|
|
226
|
+
struct vector_assign_traits<sparse_tag, true, dense_random_access_iterator_tag> {
|
|
227
|
+
typedef sparse_proxy_tag storage_category;
|
|
228
|
+
};
|
|
229
|
+
template<>
|
|
230
|
+
struct vector_assign_traits<sparse_tag, true, packed_random_access_iterator_tag> {
|
|
231
|
+
typedef sparse_proxy_tag storage_category;
|
|
232
|
+
};
|
|
233
|
+
template<>
|
|
234
|
+
struct vector_assign_traits<sparse_tag, true, sparse_bidirectional_iterator_tag> {
|
|
235
|
+
typedef sparse_proxy_tag storage_category;
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
// Explicitly iterating
|
|
239
|
+
template<template <class T1, class T2> class F, class V, class E>
|
|
240
|
+
// BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
|
|
241
|
+
void iterating_vector_assign (V &v, const vector_expression<E> &e) {
|
|
242
|
+
typedef F<typename V::iterator::reference, typename E::value_type> functor_type;
|
|
243
|
+
typedef typename V::difference_type difference_type;
|
|
244
|
+
difference_type size (BOOST_UBLAS_SAME (v.size (), e ().size ()));
|
|
245
|
+
typename V::iterator it (v.begin ());
|
|
246
|
+
BOOST_UBLAS_CHECK (v.end () - it == size, bad_size ());
|
|
247
|
+
typename E::const_iterator ite (e ().begin ());
|
|
248
|
+
BOOST_UBLAS_CHECK (e ().end () - ite == size, bad_size ());
|
|
249
|
+
#ifndef BOOST_UBLAS_USE_DUFF_DEVICE
|
|
250
|
+
while (-- size >= 0)
|
|
251
|
+
functor_type::apply (*it, *ite), ++ it, ++ ite;
|
|
252
|
+
#else
|
|
253
|
+
DD (size, 2, r, (functor_type::apply (*it, *ite), ++ it, ++ ite));
|
|
254
|
+
#endif
|
|
255
|
+
}
|
|
256
|
+
// Explicitly indexing
|
|
257
|
+
template<template <class T1, class T2> class F, class V, class E>
|
|
258
|
+
// BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
|
|
259
|
+
void indexing_vector_assign (V &v, const vector_expression<E> &e) {
|
|
260
|
+
typedef F<typename V::reference, typename E::value_type> functor_type;
|
|
261
|
+
typedef typename V::size_type size_type;
|
|
262
|
+
size_type size (BOOST_UBLAS_SAME (v.size (), e ().size ()));
|
|
263
|
+
#ifndef BOOST_UBLAS_USE_DUFF_DEVICE
|
|
264
|
+
for (size_type i = 0; i < size; ++ i)
|
|
265
|
+
functor_type::apply (v (i), e () (i));
|
|
266
|
+
#else
|
|
267
|
+
size_type i (0);
|
|
268
|
+
DD (size, 2, r, (functor_type::apply (v (i), e () (i)), ++ i));
|
|
269
|
+
#endif
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// Dense (proxy) case
|
|
273
|
+
template<template <class T1, class T2> class F, class V, class E>
|
|
274
|
+
// BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
|
|
275
|
+
void vector_assign (V &v, const vector_expression<E> &e, dense_proxy_tag) {
|
|
276
|
+
#ifdef BOOST_UBLAS_USE_INDEXING
|
|
277
|
+
indexing_vector_assign<F> (v, e);
|
|
278
|
+
#elif BOOST_UBLAS_USE_ITERATING
|
|
279
|
+
iterating_vector_assign<F> (v, e);
|
|
280
|
+
#else
|
|
281
|
+
typedef typename V::size_type size_type;
|
|
282
|
+
size_type size (BOOST_UBLAS_SAME (v.size (), e ().size ()));
|
|
283
|
+
if (size >= BOOST_UBLAS_ITERATOR_THRESHOLD)
|
|
284
|
+
iterating_vector_assign<F> (v, e);
|
|
285
|
+
else
|
|
286
|
+
indexing_vector_assign<F> (v, e);
|
|
287
|
+
#endif
|
|
288
|
+
}
|
|
289
|
+
// Packed (proxy) case
|
|
290
|
+
template<template <class T1, class T2> class F, class V, class E>
|
|
291
|
+
// BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
|
|
292
|
+
void vector_assign (V &v, const vector_expression<E> &e, packed_proxy_tag) {
|
|
293
|
+
BOOST_UBLAS_CHECK (v.size () == e ().size (), bad_size ());
|
|
294
|
+
typedef F<typename V::iterator::reference, typename E::value_type> functor_type;
|
|
295
|
+
typedef typename V::difference_type difference_type;
|
|
296
|
+
typedef typename V::value_type value_type;
|
|
297
|
+
#if BOOST_UBLAS_TYPE_CHECK
|
|
298
|
+
vector<value_type> cv (v.size ());
|
|
299
|
+
indexing_vector_assign<scalar_assign> (cv, v);
|
|
300
|
+
indexing_vector_assign<F> (cv, e);
|
|
301
|
+
#endif
|
|
302
|
+
typename V::iterator it (v.begin ());
|
|
303
|
+
typename V::iterator it_end (v.end ());
|
|
304
|
+
typename E::const_iterator ite (e ().begin ());
|
|
305
|
+
typename E::const_iterator ite_end (e ().end ());
|
|
306
|
+
difference_type it_size (it_end - it);
|
|
307
|
+
difference_type ite_size (ite_end - ite);
|
|
308
|
+
if (it_size > 0 && ite_size > 0) {
|
|
309
|
+
difference_type size ((std::min) (difference_type (it.index () - ite.index ()), ite_size));
|
|
310
|
+
if (size > 0) {
|
|
311
|
+
ite += size;
|
|
312
|
+
ite_size -= size;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
if (it_size > 0 && ite_size > 0) {
|
|
316
|
+
difference_type size ((std::min) (difference_type (ite.index () - it.index ()), it_size));
|
|
317
|
+
if (size > 0) {
|
|
318
|
+
it_size -= size;
|
|
319
|
+
//Disabled warning C4127 because the conditional expression is constant
|
|
320
|
+
#ifdef _MSC_VER
|
|
321
|
+
#pragma warning(push)
|
|
322
|
+
#pragma warning(disable: 4127)
|
|
323
|
+
#endif
|
|
324
|
+
if (!functor_type::computed) {
|
|
325
|
+
#ifdef _MSC_VER
|
|
326
|
+
#pragma warning(pop)
|
|
327
|
+
#endif
|
|
328
|
+
while (-- size >= 0) // zeroing
|
|
329
|
+
functor_type::apply (*it, value_type/*zero*/()), ++ it;
|
|
330
|
+
} else {
|
|
331
|
+
it += size;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
difference_type size ((std::min) (it_size, ite_size));
|
|
336
|
+
it_size -= size;
|
|
337
|
+
ite_size -= size;
|
|
338
|
+
while (-- size >= 0)
|
|
339
|
+
functor_type::apply (*it, *ite), ++ it, ++ ite;
|
|
340
|
+
size = it_size;
|
|
341
|
+
//Disabled warning C4127 because the conditional expression is constant
|
|
342
|
+
#ifdef _MSC_VER
|
|
343
|
+
#pragma warning(push)
|
|
344
|
+
#pragma warning(disable: 4127)
|
|
345
|
+
#endif
|
|
346
|
+
if (!functor_type::computed) {
|
|
347
|
+
#ifdef _MSC_VER
|
|
348
|
+
#pragma warning(pop)
|
|
349
|
+
#endif
|
|
350
|
+
while (-- size >= 0) // zeroing
|
|
351
|
+
functor_type::apply (*it, value_type/*zero*/()), ++ it;
|
|
352
|
+
} else {
|
|
353
|
+
it += size;
|
|
354
|
+
}
|
|
355
|
+
#if BOOST_UBLAS_TYPE_CHECK
|
|
356
|
+
if (! disable_type_check<bool>::value)
|
|
357
|
+
BOOST_UBLAS_CHECK (detail::expression_type_check (v, cv),
|
|
358
|
+
external_logic ("external logic or bad condition of inputs"));
|
|
359
|
+
#endif
|
|
360
|
+
}
|
|
361
|
+
// Sparse case
|
|
362
|
+
template<template <class T1, class T2> class F, class V, class E>
|
|
363
|
+
// BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
|
|
364
|
+
void vector_assign (V &v, const vector_expression<E> &e, sparse_tag) {
|
|
365
|
+
BOOST_UBLAS_CHECK (v.size () == e ().size (), bad_size ());
|
|
366
|
+
typedef F<typename V::iterator::reference, typename E::value_type> functor_type;
|
|
367
|
+
//Disabled warning C4127 because the conditional expression is constant
|
|
368
|
+
#ifdef _MSC_VER
|
|
369
|
+
#pragma warning(push)
|
|
370
|
+
#pragma warning(disable: 4127)
|
|
371
|
+
#endif
|
|
372
|
+
BOOST_STATIC_ASSERT ((!functor_type::computed));
|
|
373
|
+
#ifdef _MSC_VER
|
|
374
|
+
#pragma warning(pop)
|
|
375
|
+
#endif
|
|
376
|
+
typedef typename V::value_type value_type;
|
|
377
|
+
#if BOOST_UBLAS_TYPE_CHECK
|
|
378
|
+
vector<value_type> cv (v.size ());
|
|
379
|
+
indexing_vector_assign<scalar_assign> (cv, v);
|
|
380
|
+
indexing_vector_assign<F> (cv, e);
|
|
381
|
+
#endif
|
|
382
|
+
v.clear ();
|
|
383
|
+
typename E::const_iterator ite (e ().begin ());
|
|
384
|
+
typename E::const_iterator ite_end (e ().end ());
|
|
385
|
+
while (ite != ite_end) {
|
|
386
|
+
value_type t (*ite);
|
|
387
|
+
if (t != value_type/*zero*/())
|
|
388
|
+
v.insert_element (ite.index (), t);
|
|
389
|
+
++ ite;
|
|
390
|
+
}
|
|
391
|
+
#if BOOST_UBLAS_TYPE_CHECK
|
|
392
|
+
if (! disable_type_check<bool>::value)
|
|
393
|
+
BOOST_UBLAS_CHECK (detail::expression_type_check (v, cv),
|
|
394
|
+
external_logic ("external logic or bad condition of inputs"));
|
|
395
|
+
#endif
|
|
396
|
+
}
|
|
397
|
+
// Sparse proxy or functional case
|
|
398
|
+
template<template <class T1, class T2> class F, class V, class E>
|
|
399
|
+
// BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
|
|
400
|
+
void vector_assign (V &v, const vector_expression<E> &e, sparse_proxy_tag) {
|
|
401
|
+
BOOST_UBLAS_CHECK (v.size () == e ().size (), bad_size ());
|
|
402
|
+
typedef F<typename V::iterator::reference, typename E::value_type> functor_type;
|
|
403
|
+
typedef typename V::size_type size_type;
|
|
404
|
+
typedef typename V::difference_type difference_type;
|
|
405
|
+
typedef typename V::value_type value_type;
|
|
406
|
+
|
|
407
|
+
#if BOOST_UBLAS_TYPE_CHECK
|
|
408
|
+
vector<value_type> cv (v.size ());
|
|
409
|
+
indexing_vector_assign<scalar_assign> (cv, v);
|
|
410
|
+
indexing_vector_assign<F> (cv, e);
|
|
411
|
+
#endif
|
|
412
|
+
detail::make_conformant (v, e);
|
|
413
|
+
|
|
414
|
+
typename V::iterator it (v.begin ());
|
|
415
|
+
typename V::iterator it_end (v.end ());
|
|
416
|
+
typename E::const_iterator ite (e ().begin ());
|
|
417
|
+
typename E::const_iterator ite_end (e ().end ());
|
|
418
|
+
if (it != it_end && ite != ite_end) {
|
|
419
|
+
size_type it_index = it.index (), ite_index = ite.index ();
|
|
420
|
+
for (;;) {
|
|
421
|
+
difference_type compare = it_index - ite_index;
|
|
422
|
+
if (compare == 0) {
|
|
423
|
+
functor_type::apply (*it, *ite);
|
|
424
|
+
++ it, ++ ite;
|
|
425
|
+
if (it != it_end && ite != ite_end) {
|
|
426
|
+
it_index = it.index ();
|
|
427
|
+
ite_index = ite.index ();
|
|
428
|
+
} else
|
|
429
|
+
break;
|
|
430
|
+
} else if (compare < 0) {
|
|
431
|
+
//Disabled warning C4127 because the conditional expression is constant
|
|
432
|
+
#ifdef _MSC_VER
|
|
433
|
+
#pragma warning(push)
|
|
434
|
+
#pragma warning(disable: 4127)
|
|
435
|
+
#endif
|
|
436
|
+
if (!functor_type::computed) {
|
|
437
|
+
#ifdef _MSC_VER
|
|
438
|
+
#pragma warning(pop)
|
|
439
|
+
#endif
|
|
440
|
+
functor_type::apply (*it, value_type/*zero*/());
|
|
441
|
+
++ it;
|
|
442
|
+
} else
|
|
443
|
+
increment (it, it_end, - compare);
|
|
444
|
+
if (it != it_end)
|
|
445
|
+
it_index = it.index ();
|
|
446
|
+
else
|
|
447
|
+
break;
|
|
448
|
+
} else if (compare > 0) {
|
|
449
|
+
increment (ite, ite_end, compare);
|
|
450
|
+
if (ite != ite_end)
|
|
451
|
+
ite_index = ite.index ();
|
|
452
|
+
else
|
|
453
|
+
break;
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
//Disabled warning C4127 because the conditional expression is constant
|
|
458
|
+
#ifdef _MSC_VER
|
|
459
|
+
#pragma warning(push)
|
|
460
|
+
#pragma warning(disable: 4127)
|
|
461
|
+
#endif
|
|
462
|
+
if (!functor_type::computed) {
|
|
463
|
+
#ifdef _MSC_VER
|
|
464
|
+
#pragma warning(pop)
|
|
465
|
+
#endif
|
|
466
|
+
while (it != it_end) { // zeroing
|
|
467
|
+
functor_type::apply (*it, value_type/*zero*/());
|
|
468
|
+
++ it;
|
|
469
|
+
}
|
|
470
|
+
} else {
|
|
471
|
+
it = it_end;
|
|
472
|
+
}
|
|
473
|
+
#if BOOST_UBLAS_TYPE_CHECK
|
|
474
|
+
if (! disable_type_check<bool>::value)
|
|
475
|
+
BOOST_UBLAS_CHECK (detail::expression_type_check (v, cv),
|
|
476
|
+
external_logic ("external logic or bad condition of inputs"));
|
|
477
|
+
#endif
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
// Dispatcher
|
|
481
|
+
template<template <class T1, class T2> class F, class V, class E>
|
|
482
|
+
BOOST_UBLAS_INLINE
|
|
483
|
+
void vector_assign (V &v, const vector_expression<E> &e) {
|
|
484
|
+
typedef typename vector_assign_traits<typename V::storage_category,
|
|
485
|
+
F<typename V::reference, typename E::value_type>::computed,
|
|
486
|
+
typename E::const_iterator::iterator_category>::storage_category storage_category;
|
|
487
|
+
vector_assign<F> (v, e, storage_category ());
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
template<class SC, class RI>
|
|
491
|
+
struct vector_swap_traits {
|
|
492
|
+
typedef SC storage_category;
|
|
493
|
+
};
|
|
494
|
+
|
|
495
|
+
template<>
|
|
496
|
+
struct vector_swap_traits<dense_proxy_tag, sparse_bidirectional_iterator_tag> {
|
|
497
|
+
typedef sparse_proxy_tag storage_category;
|
|
498
|
+
};
|
|
499
|
+
|
|
500
|
+
template<>
|
|
501
|
+
struct vector_swap_traits<packed_proxy_tag, sparse_bidirectional_iterator_tag> {
|
|
502
|
+
typedef sparse_proxy_tag storage_category;
|
|
503
|
+
};
|
|
504
|
+
|
|
505
|
+
// Dense (proxy) case
|
|
506
|
+
template<template <class T1, class T2> class F, class V, class E>
|
|
507
|
+
// BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
|
|
508
|
+
void vector_swap (V &v, vector_expression<E> &e, dense_proxy_tag) {
|
|
509
|
+
typedef F<typename V::iterator::reference, typename E::iterator::reference> functor_type;
|
|
510
|
+
typedef typename V::difference_type difference_type;
|
|
511
|
+
difference_type size (BOOST_UBLAS_SAME (v.size (), e ().size ()));
|
|
512
|
+
typename V::iterator it (v.begin ());
|
|
513
|
+
typename E::iterator ite (e ().begin ());
|
|
514
|
+
while (-- size >= 0)
|
|
515
|
+
functor_type::apply (*it, *ite), ++ it, ++ ite;
|
|
516
|
+
}
|
|
517
|
+
// Packed (proxy) case
|
|
518
|
+
template<template <class T1, class T2> class F, class V, class E>
|
|
519
|
+
// BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
|
|
520
|
+
void vector_swap (V &v, vector_expression<E> &e, packed_proxy_tag) {
|
|
521
|
+
typedef F<typename V::iterator::reference, typename E::iterator::reference> functor_type;
|
|
522
|
+
typedef typename V::difference_type difference_type;
|
|
523
|
+
typename V::iterator it (v.begin ());
|
|
524
|
+
typename V::iterator it_end (v.end ());
|
|
525
|
+
typename E::iterator ite (e ().begin ());
|
|
526
|
+
typename E::iterator ite_end (e ().end ());
|
|
527
|
+
difference_type it_size (it_end - it);
|
|
528
|
+
difference_type ite_size (ite_end - ite);
|
|
529
|
+
if (it_size > 0 && ite_size > 0) {
|
|
530
|
+
difference_type size ((std::min) (difference_type (it.index () - ite.index ()), ite_size));
|
|
531
|
+
if (size > 0) {
|
|
532
|
+
ite += size;
|
|
533
|
+
ite_size -= size;
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
if (it_size > 0 && ite_size > 0) {
|
|
537
|
+
difference_type size ((std::min) (difference_type (ite.index () - it.index ()), it_size));
|
|
538
|
+
if (size > 0)
|
|
539
|
+
it_size -= size;
|
|
540
|
+
}
|
|
541
|
+
difference_type size ((std::min) (it_size, ite_size));
|
|
542
|
+
it_size -= size;
|
|
543
|
+
ite_size -= size;
|
|
544
|
+
while (-- size >= 0)
|
|
545
|
+
functor_type::apply (*it, *ite), ++ it, ++ ite;
|
|
546
|
+
}
|
|
547
|
+
// Sparse proxy case
|
|
548
|
+
template<template <class T1, class T2> class F, class V, class E>
|
|
549
|
+
// BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
|
|
550
|
+
void vector_swap (V &v, vector_expression<E> &e, sparse_proxy_tag) {
|
|
551
|
+
BOOST_UBLAS_CHECK (v.size () == e ().size (), bad_size ());
|
|
552
|
+
typedef F<typename V::iterator::reference, typename E::iterator::reference> functor_type;
|
|
553
|
+
typedef typename V::size_type size_type;
|
|
554
|
+
typedef typename V::difference_type difference_type;
|
|
555
|
+
|
|
556
|
+
detail::make_conformant (v, e);
|
|
557
|
+
// FIXME should be a seperate restriction for E
|
|
558
|
+
detail::make_conformant (e (), v);
|
|
559
|
+
|
|
560
|
+
typename V::iterator it (v.begin ());
|
|
561
|
+
typename V::iterator it_end (v.end ());
|
|
562
|
+
typename E::iterator ite (e ().begin ());
|
|
563
|
+
typename E::iterator ite_end (e ().end ());
|
|
564
|
+
if (it != it_end && ite != ite_end) {
|
|
565
|
+
size_type it_index = it.index (), ite_index = ite.index ();
|
|
566
|
+
for (;;) {
|
|
567
|
+
difference_type compare = it_index - ite_index;
|
|
568
|
+
if (compare == 0) {
|
|
569
|
+
functor_type::apply (*it, *ite);
|
|
570
|
+
++ it, ++ ite;
|
|
571
|
+
if (it != it_end && ite != ite_end) {
|
|
572
|
+
it_index = it.index ();
|
|
573
|
+
ite_index = ite.index ();
|
|
574
|
+
} else
|
|
575
|
+
break;
|
|
576
|
+
} else if (compare < 0) {
|
|
577
|
+
increment (it, it_end, - compare);
|
|
578
|
+
if (it != it_end)
|
|
579
|
+
it_index = it.index ();
|
|
580
|
+
else
|
|
581
|
+
break;
|
|
582
|
+
} else if (compare > 0) {
|
|
583
|
+
increment (ite, ite_end, compare);
|
|
584
|
+
if (ite != ite_end)
|
|
585
|
+
ite_index = ite.index ();
|
|
586
|
+
else
|
|
587
|
+
break;
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
#if BOOST_UBLAS_TYPE_CHECK
|
|
593
|
+
increment (ite, ite_end);
|
|
594
|
+
increment (it, it_end);
|
|
595
|
+
#endif
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
// Dispatcher
|
|
599
|
+
template<template <class T1, class T2> class F, class V, class E>
|
|
600
|
+
BOOST_UBLAS_INLINE
|
|
601
|
+
void vector_swap (V &v, vector_expression<E> &e) {
|
|
602
|
+
typedef typename vector_swap_traits<typename V::storage_category,
|
|
603
|
+
typename E::const_iterator::iterator_category>::storage_category storage_category;
|
|
604
|
+
vector_swap<F> (v, e, storage_category ());
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
}}}
|
|
608
|
+
|
|
609
|
+
#endif
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// Copyright (c) 2010-2011 David Bellot
|
|
2
|
+
//
|
|
3
|
+
// Distributed under the Boost Software License, Version 1.0. (See
|
|
4
|
+
// accompanying file LICENSE_1_0.txt or copy at
|
|
5
|
+
// http://www.boost.org/LICENSE_1_0.txt)
|
|
6
|
+
|
|
7
|
+
/** \mainpage BOOST uBLAS: a Linear Algebra Library
|
|
8
|
+
*
|
|
9
|
+
* This is the API Reference Documentation.
|
|
10
|
+
*
|
|
11
|
+
* \section main_classes Main classes
|
|
12
|
+
*
|
|
13
|
+
* \subsection listvector Vectors
|
|
14
|
+
* - \link #boost::numeric::ublas::vector vector \endlink
|
|
15
|
+
* - \link #boost::numeric::ublas::bounded_vector bounded_vector \endlink
|
|
16
|
+
* - \link #boost::numeric::ublas::zero_vector zero_vector \endlink
|
|
17
|
+
* - \link #boost::numeric::ublas::unit_vector unit_vector \endlink
|
|
18
|
+
* - \link #boost::numeric::ublas::scalar_vector scalar_vector \endlink
|
|
19
|
+
* - \link #boost::numeric::ublas::c_vector c_vector \endlink
|
|
20
|
+
* - \link #boost::numeric::ublas::vector_slice vector_slice \endlink
|
|
21
|
+
* - \link #boost::numeric::ublas::vector_range vector_range \endlink
|
|
22
|
+
* - \link #boost::numeric::ublas::vector_indirect vector_indirect \endlink
|
|
23
|
+
* - \link #boost::numeric::ublas::mapped_vector mapped_vector \endlink
|
|
24
|
+
* - \link #boost::numeric::ublas::compressed_vector compressed_vector \endlink
|
|
25
|
+
* - \link #boost::numeric::ublas::coordinate_vector coordinate_vector \endlink
|
|
26
|
+
* - \link #boost::numeric::ublas::matrix_row matrix_row \endlink
|
|
27
|
+
* - \link #boost::numeric::ublas::matrix_column matrix_column \endlink
|
|
28
|
+
*
|
|
29
|
+
* \subsection listmatrix Matrices
|
|
30
|
+
* - \link #boost::numeric::ublas::matrix matrix \endlink
|
|
31
|
+
* - \link #boost::numeric::ublas::banded_matrix banded_matrix \endlink
|
|
32
|
+
* - \link #boost::numeric::ublas::diagonal_matrix diagonal_matrix \endlink
|
|
33
|
+
* - \link #boost::numeric::ublas::banded_adaptor banded_adaptor \endlink
|
|
34
|
+
* - \link #boost::numeric::ublas::diagonal_adaptor diagonal_adaptor \endlink
|
|
35
|
+
* - \link #boost::numeric::ublas::hermitian_matrix hermitian_matrix \endlink
|
|
36
|
+
* - \link #boost::numeric::ublas::hermitian_adaptor hermitian_adaptor \endlink
|
|
37
|
+
* - \link #boost::numeric::ublas::symmetric_matrix symmetric_matrix \endlink
|
|
38
|
+
* - \link #boost::numeric::ublas::symmetric_adaptor symmetric_adaptor \endlink
|
|
39
|
+
* - \link #boost::numeric::ublas::triangular_matrix triangular_matrix \endlink
|
|
40
|
+
* - \link #boost::numeric::ublas::triangular_adaptor triangular_adaptor \endlink
|
|
41
|
+
* - \link #boost::numeric::ublas::vector_of_vector vector_of_vector \endlink
|
|
42
|
+
* - \link #boost::numeric::ublas::bounded_matrix bounded_matrix \endlink
|
|
43
|
+
* - \link #boost::numeric::ublas::zero_matrix zero_matrix \endlink
|
|
44
|
+
* - \link #boost::numeric::ublas::identity_matrix identity_matrix \endlink
|
|
45
|
+
* - \link #boost::numeric::ublas::scalar_matrix scalar_matrix \endlink
|
|
46
|
+
* - \link #boost::numeric::ublas::c_matrix c_matrix \endlink
|
|
47
|
+
* - \link #boost::numeric::ublas::matrix_vector_range matrix_vector_range \endlink
|
|
48
|
+
* - \link #boost::numeric::ublas::matrix_vector_slice matrix_vector_slice \endlink
|
|
49
|
+
* - \link #boost::numeric::ublas::matrix_vector_indirect matrix_vector_indirect \endlink
|
|
50
|
+
* - \link #boost::numeric::ublas::matrix_range matrix_range \endlink
|
|
51
|
+
* - \link #boost::numeric::ublas::matrix_slice matrix_slice \endlink
|
|
52
|
+
* - \link #boost::numeric::ublas::matrix_indirect matrix_indirect \endlink
|
|
53
|
+
* - \link #boost::numeric::ublas::mapped_matrix mapped_matrix \endlink
|
|
54
|
+
* - \link #boost::numeric::ublas::mapped_vector_of_mapped_vector mapped_vector_of_mapped_vector \endlink
|
|
55
|
+
* - \link #boost::numeric::ublas::compressed_matrix compressed_matrix \endlink
|
|
56
|
+
* - \link #boost::numeric::ublas::coordinate_matrix coordinate_matrix \endlink
|
|
57
|
+
* - \link #boost::numeric::ublas::generalized_vector_of_vector generalized_vector_of_vector \endlink
|
|
58
|
+
*/
|