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,506 @@
|
|
|
1
|
+
// Copyright (c) 2000-2013
|
|
2
|
+
// Joerg Walter, Mathias Koch. David Bellot
|
|
3
|
+
//
|
|
4
|
+
// Distributed under the Boost Software License, Version 1.0. (See
|
|
5
|
+
// accompanying file LICENSE_1_0.txt or copy at
|
|
6
|
+
// http://www.boost.org/LICENSE_1_0.txt)
|
|
7
|
+
//
|
|
8
|
+
// The authors gratefully acknowledge the support of
|
|
9
|
+
// GeNeSys mbH & Co. KG in producing this work.
|
|
10
|
+
//
|
|
11
|
+
#ifndef _BOOST_UBLAS_EXPRESSION_TYPE_
|
|
12
|
+
#define _BOOST_UBLAS_EXPRESSION_TYPE_
|
|
13
|
+
|
|
14
|
+
#include <boost/numeric/ublas/exception.hpp>
|
|
15
|
+
#include <boost/numeric/ublas/traits.hpp>
|
|
16
|
+
#include <boost/numeric/ublas/functional.hpp>
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
// Expression templates based on ideas of Todd Veldhuizen and Geoffrey Furnish
|
|
20
|
+
// Iterators based on ideas of Jeremy Siek
|
|
21
|
+
|
|
22
|
+
namespace boost { namespace numeric { namespace ublas {
|
|
23
|
+
|
|
24
|
+
/** \brief Base class for uBLAS statically derived expressions using the the Barton Nackman trick
|
|
25
|
+
*
|
|
26
|
+
* This is a NonAssignable class
|
|
27
|
+
* Directly implement nonassignable - simplifes debugging call trace!
|
|
28
|
+
*
|
|
29
|
+
* \tparam E an expression type
|
|
30
|
+
*/
|
|
31
|
+
template<class E>
|
|
32
|
+
class ublas_expression {
|
|
33
|
+
public:
|
|
34
|
+
typedef E expression_type;
|
|
35
|
+
/* E can be an incomplete type - to define the following we would need more template arguments
|
|
36
|
+
typedef typename E::type_category type_category;
|
|
37
|
+
typedef typename E::value_type value_type;
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
protected:
|
|
41
|
+
ublas_expression () {}
|
|
42
|
+
~ublas_expression () {}
|
|
43
|
+
private:
|
|
44
|
+
const ublas_expression& operator= (const ublas_expression &);
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
/** \brief Base class for Scalar Expression models
|
|
49
|
+
*
|
|
50
|
+
* It does not model the Scalar Expression concept but all derived types should.
|
|
51
|
+
* The class defines a common base type and some common interface for all statically
|
|
52
|
+
* derived Scalar Expression classes.
|
|
53
|
+
*
|
|
54
|
+
* We implement the casts to the statically derived type.
|
|
55
|
+
*
|
|
56
|
+
* \tparam E an expression type
|
|
57
|
+
*/
|
|
58
|
+
template<class E>
|
|
59
|
+
class scalar_expression:
|
|
60
|
+
public ublas_expression<E> {
|
|
61
|
+
public:
|
|
62
|
+
typedef E expression_type;
|
|
63
|
+
typedef scalar_tag type_category;
|
|
64
|
+
|
|
65
|
+
BOOST_UBLAS_INLINE
|
|
66
|
+
const expression_type &operator () () const {
|
|
67
|
+
return *static_cast<const expression_type *> (this);
|
|
68
|
+
}
|
|
69
|
+
BOOST_UBLAS_INLINE
|
|
70
|
+
expression_type &operator () () {
|
|
71
|
+
return *static_cast<expression_type *> (this);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
template<class T>
|
|
76
|
+
class scalar_reference:
|
|
77
|
+
public scalar_expression<scalar_reference<T> > {
|
|
78
|
+
|
|
79
|
+
typedef scalar_reference<T> self_type;
|
|
80
|
+
public:
|
|
81
|
+
typedef T value_type;
|
|
82
|
+
typedef const value_type &const_reference;
|
|
83
|
+
typedef typename boost::mpl::if_<boost::is_const<T>,
|
|
84
|
+
const_reference,
|
|
85
|
+
value_type &>::type reference;
|
|
86
|
+
typedef const self_type const_closure_type;
|
|
87
|
+
typedef const_closure_type closure_type;
|
|
88
|
+
|
|
89
|
+
// Construction and destruction
|
|
90
|
+
BOOST_UBLAS_INLINE
|
|
91
|
+
explicit scalar_reference (reference t):
|
|
92
|
+
t_ (t) {}
|
|
93
|
+
|
|
94
|
+
// Conversion
|
|
95
|
+
BOOST_UBLAS_INLINE
|
|
96
|
+
operator value_type () const {
|
|
97
|
+
return t_;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Assignment
|
|
101
|
+
BOOST_UBLAS_INLINE
|
|
102
|
+
scalar_reference &operator = (const scalar_reference &s) {
|
|
103
|
+
t_ = s.t_;
|
|
104
|
+
return *this;
|
|
105
|
+
}
|
|
106
|
+
template<class AE>
|
|
107
|
+
BOOST_UBLAS_INLINE
|
|
108
|
+
scalar_reference &operator = (const scalar_expression<AE> &ae) {
|
|
109
|
+
t_ = ae;
|
|
110
|
+
return *this;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Closure comparison
|
|
114
|
+
BOOST_UBLAS_INLINE
|
|
115
|
+
bool same_closure (const scalar_reference &sr) const {
|
|
116
|
+
return &t_ == &sr.t_;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
private:
|
|
120
|
+
reference t_;
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
template<class T>
|
|
124
|
+
class scalar_value:
|
|
125
|
+
public scalar_expression<scalar_value<T> > {
|
|
126
|
+
|
|
127
|
+
typedef scalar_value<T> self_type;
|
|
128
|
+
public:
|
|
129
|
+
typedef T value_type;
|
|
130
|
+
typedef const value_type &const_reference;
|
|
131
|
+
typedef typename boost::mpl::if_<boost::is_const<T>,
|
|
132
|
+
const_reference,
|
|
133
|
+
value_type &>::type reference;
|
|
134
|
+
typedef const scalar_reference<const self_type> const_closure_type;
|
|
135
|
+
typedef scalar_reference<self_type> closure_type;
|
|
136
|
+
|
|
137
|
+
// Construction and destruction
|
|
138
|
+
BOOST_UBLAS_INLINE
|
|
139
|
+
scalar_value ():
|
|
140
|
+
t_ () {}
|
|
141
|
+
BOOST_UBLAS_INLINE
|
|
142
|
+
scalar_value (const value_type &t):
|
|
143
|
+
t_ (t) {}
|
|
144
|
+
|
|
145
|
+
BOOST_UBLAS_INLINE
|
|
146
|
+
operator value_type () const {
|
|
147
|
+
return t_;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Assignment
|
|
151
|
+
BOOST_UBLAS_INLINE
|
|
152
|
+
scalar_value &operator = (const scalar_value &s) {
|
|
153
|
+
t_ = s.t_;
|
|
154
|
+
return *this;
|
|
155
|
+
}
|
|
156
|
+
template<class AE>
|
|
157
|
+
BOOST_UBLAS_INLINE
|
|
158
|
+
scalar_value &operator = (const scalar_expression<AE> &ae) {
|
|
159
|
+
t_ = ae;
|
|
160
|
+
return *this;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// Closure comparison
|
|
164
|
+
BOOST_UBLAS_INLINE
|
|
165
|
+
bool same_closure (const scalar_value &sv) const {
|
|
166
|
+
return this == &sv; // self closing on instances value
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
private:
|
|
170
|
+
value_type t_;
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
/** \brief Base class for Vector Expression models
|
|
175
|
+
*
|
|
176
|
+
* it does not model the Vector Expression concept but all derived types should.
|
|
177
|
+
* The class defines a common base type and some common interface for all
|
|
178
|
+
* statically derived Vector Expression classes.
|
|
179
|
+
* We implement the casts to the statically derived type.
|
|
180
|
+
*/
|
|
181
|
+
template<class E>
|
|
182
|
+
class vector_expression:
|
|
183
|
+
public ublas_expression<E> {
|
|
184
|
+
public:
|
|
185
|
+
static const unsigned complexity = 0;
|
|
186
|
+
typedef E expression_type;
|
|
187
|
+
typedef vector_tag type_category;
|
|
188
|
+
/* E can be an incomplete type - to define the following we would need more template arguments
|
|
189
|
+
typedef typename E::size_type size_type;
|
|
190
|
+
*/
|
|
191
|
+
|
|
192
|
+
BOOST_UBLAS_INLINE
|
|
193
|
+
const expression_type &operator () () const {
|
|
194
|
+
return *static_cast<const expression_type *> (this);
|
|
195
|
+
}
|
|
196
|
+
BOOST_UBLAS_INLINE
|
|
197
|
+
expression_type &operator () () {
|
|
198
|
+
return *static_cast<expression_type *> (this);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
|
|
202
|
+
private:
|
|
203
|
+
// projection types
|
|
204
|
+
typedef vector_range<E> vector_range_type;
|
|
205
|
+
typedef vector_range<const E> const_vector_range_type;
|
|
206
|
+
typedef vector_slice<E> vector_slice_type;
|
|
207
|
+
typedef vector_slice<const E> const_vector_slice_type;
|
|
208
|
+
// vector_indirect_type will depend on the A template parameter
|
|
209
|
+
typedef basic_range<> default_range; // required to avoid range/slice name confusion
|
|
210
|
+
typedef basic_slice<> default_slice;
|
|
211
|
+
public:
|
|
212
|
+
BOOST_UBLAS_INLINE
|
|
213
|
+
const_vector_range_type operator () (const default_range &r) const {
|
|
214
|
+
return const_vector_range_type (operator () (), r);
|
|
215
|
+
}
|
|
216
|
+
BOOST_UBLAS_INLINE
|
|
217
|
+
vector_range_type operator () (const default_range &r) {
|
|
218
|
+
return vector_range_type (operator () (), r);
|
|
219
|
+
}
|
|
220
|
+
BOOST_UBLAS_INLINE
|
|
221
|
+
const_vector_slice_type operator () (const default_slice &s) const {
|
|
222
|
+
return const_vector_slice_type (operator () (), s);
|
|
223
|
+
}
|
|
224
|
+
BOOST_UBLAS_INLINE
|
|
225
|
+
vector_slice_type operator () (const default_slice &s) {
|
|
226
|
+
return vector_slice_type (operator () (), s);
|
|
227
|
+
}
|
|
228
|
+
template<class A>
|
|
229
|
+
BOOST_UBLAS_INLINE
|
|
230
|
+
const vector_indirect<const E, indirect_array<A> > operator () (const indirect_array<A> &ia) const {
|
|
231
|
+
return vector_indirect<const E, indirect_array<A> > (operator () (), ia);
|
|
232
|
+
}
|
|
233
|
+
template<class A>
|
|
234
|
+
BOOST_UBLAS_INLINE
|
|
235
|
+
vector_indirect<E, indirect_array<A> > operator () (const indirect_array<A> &ia) {
|
|
236
|
+
return vector_indirect<E, indirect_array<A> > (operator () (), ia);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
BOOST_UBLAS_INLINE
|
|
240
|
+
const_vector_range_type project (const default_range &r) const {
|
|
241
|
+
return const_vector_range_type (operator () (), r);
|
|
242
|
+
}
|
|
243
|
+
BOOST_UBLAS_INLINE
|
|
244
|
+
vector_range_type project (const default_range &r) {
|
|
245
|
+
return vector_range_type (operator () (), r);
|
|
246
|
+
}
|
|
247
|
+
BOOST_UBLAS_INLINE
|
|
248
|
+
const_vector_slice_type project (const default_slice &s) const {
|
|
249
|
+
return const_vector_slice_type (operator () (), s);
|
|
250
|
+
}
|
|
251
|
+
BOOST_UBLAS_INLINE
|
|
252
|
+
vector_slice_type project (const default_slice &s) {
|
|
253
|
+
return vector_slice_type (operator () (), s);
|
|
254
|
+
}
|
|
255
|
+
template<class A>
|
|
256
|
+
BOOST_UBLAS_INLINE
|
|
257
|
+
const vector_indirect<const E, indirect_array<A> > project (const indirect_array<A> &ia) const {
|
|
258
|
+
return vector_indirect<const E, indirect_array<A> > (operator () (), ia);
|
|
259
|
+
}
|
|
260
|
+
template<class A>
|
|
261
|
+
BOOST_UBLAS_INLINE
|
|
262
|
+
vector_indirect<E, indirect_array<A> > project (const indirect_array<A> &ia) {
|
|
263
|
+
return vector_indirect<E, indirect_array<A> > (operator () (), ia);
|
|
264
|
+
}
|
|
265
|
+
#endif
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
/** \brief Base class for Vector container models
|
|
269
|
+
*
|
|
270
|
+
* it does not model the Vector concept but all derived types should.
|
|
271
|
+
* The class defines a common base type and some common interface for all
|
|
272
|
+
* statically derived Vector classes
|
|
273
|
+
* We implement the casts to the statically derived type.
|
|
274
|
+
*/
|
|
275
|
+
template<class C>
|
|
276
|
+
class vector_container:
|
|
277
|
+
public vector_expression<C> {
|
|
278
|
+
public:
|
|
279
|
+
static const unsigned complexity = 0;
|
|
280
|
+
typedef C container_type;
|
|
281
|
+
typedef vector_tag type_category;
|
|
282
|
+
|
|
283
|
+
BOOST_UBLAS_INLINE
|
|
284
|
+
const container_type &operator () () const {
|
|
285
|
+
return *static_cast<const container_type *> (this);
|
|
286
|
+
}
|
|
287
|
+
BOOST_UBLAS_INLINE
|
|
288
|
+
container_type &operator () () {
|
|
289
|
+
return *static_cast<container_type *> (this);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
|
|
293
|
+
using vector_expression<C>::operator ();
|
|
294
|
+
#endif
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
/** \brief Base class for Matrix Expression models
|
|
299
|
+
*
|
|
300
|
+
* it does not model the Matrix Expression concept but all derived types should.
|
|
301
|
+
* The class defines a common base type and some common interface for all
|
|
302
|
+
* statically derived Matrix Expression classes
|
|
303
|
+
* We implement the casts to the statically derived type.
|
|
304
|
+
*/
|
|
305
|
+
template<class E>
|
|
306
|
+
class matrix_expression:
|
|
307
|
+
public ublas_expression<E> {
|
|
308
|
+
private:
|
|
309
|
+
typedef matrix_expression<E> self_type;
|
|
310
|
+
public:
|
|
311
|
+
static const unsigned complexity = 0;
|
|
312
|
+
typedef E expression_type;
|
|
313
|
+
typedef matrix_tag type_category;
|
|
314
|
+
/* E can be an incomplete type - to define the following we would need more template arguments
|
|
315
|
+
typedef typename E::size_type size_type;
|
|
316
|
+
*/
|
|
317
|
+
|
|
318
|
+
BOOST_UBLAS_INLINE
|
|
319
|
+
const expression_type &operator () () const {
|
|
320
|
+
return *static_cast<const expression_type *> (this);
|
|
321
|
+
}
|
|
322
|
+
BOOST_UBLAS_INLINE
|
|
323
|
+
expression_type &operator () () {
|
|
324
|
+
return *static_cast<expression_type *> (this);
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
|
|
328
|
+
private:
|
|
329
|
+
// projection types
|
|
330
|
+
typedef vector_range<E> vector_range_type;
|
|
331
|
+
typedef const vector_range<const E> const_vector_range_type;
|
|
332
|
+
typedef vector_slice<E> vector_slice_type;
|
|
333
|
+
typedef const vector_slice<const E> const_vector_slice_type;
|
|
334
|
+
typedef matrix_row<E> matrix_row_type;
|
|
335
|
+
typedef const matrix_row<const E> const_matrix_row_type;
|
|
336
|
+
typedef matrix_column<E> matrix_column_type;
|
|
337
|
+
typedef const matrix_column<const E> const_matrix_column_type;
|
|
338
|
+
typedef matrix_range<E> matrix_range_type;
|
|
339
|
+
typedef const matrix_range<const E> const_matrix_range_type;
|
|
340
|
+
typedef matrix_slice<E> matrix_slice_type;
|
|
341
|
+
typedef const matrix_slice<const E> const_matrix_slice_type;
|
|
342
|
+
// matrix_indirect_type will depend on the A template parameter
|
|
343
|
+
typedef basic_range<> default_range; // required to avoid range/slice name confusion
|
|
344
|
+
typedef basic_slice<> default_slice;
|
|
345
|
+
|
|
346
|
+
public:
|
|
347
|
+
BOOST_UBLAS_INLINE
|
|
348
|
+
const_matrix_row_type operator [] (std::size_t i) const {
|
|
349
|
+
return const_matrix_row_type (operator () (), i);
|
|
350
|
+
}
|
|
351
|
+
BOOST_UBLAS_INLINE
|
|
352
|
+
matrix_row_type operator [] (std::size_t i) {
|
|
353
|
+
return matrix_row_type (operator () (), i);
|
|
354
|
+
}
|
|
355
|
+
BOOST_UBLAS_INLINE
|
|
356
|
+
const_matrix_row_type row (std::size_t i) const {
|
|
357
|
+
return const_matrix_row_type (operator () (), i);
|
|
358
|
+
}
|
|
359
|
+
BOOST_UBLAS_INLINE
|
|
360
|
+
matrix_row_type row (std::size_t i) {
|
|
361
|
+
return matrix_row_type (operator () (), i);
|
|
362
|
+
}
|
|
363
|
+
BOOST_UBLAS_INLINE
|
|
364
|
+
const_matrix_column_type column (std::size_t j) const {
|
|
365
|
+
return const_matrix_column_type (operator () (), j);
|
|
366
|
+
}
|
|
367
|
+
BOOST_UBLAS_INLINE
|
|
368
|
+
matrix_column_type column (std::size_t j) {
|
|
369
|
+
return matrix_column_type (operator () (), j);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
BOOST_UBLAS_INLINE
|
|
373
|
+
const_matrix_range_type operator () (const default_range &r1, const default_range &r2) const {
|
|
374
|
+
return const_matrix_range_type (operator () (), r1, r2);
|
|
375
|
+
}
|
|
376
|
+
BOOST_UBLAS_INLINE
|
|
377
|
+
matrix_range_type operator () (const default_range &r1, const default_range &r2) {
|
|
378
|
+
return matrix_range_type (operator () (), r1, r2);
|
|
379
|
+
}
|
|
380
|
+
BOOST_UBLAS_INLINE
|
|
381
|
+
const_matrix_slice_type operator () (const default_slice &s1, const default_slice &s2) const {
|
|
382
|
+
return const_matrix_slice_type (operator () (), s1, s2);
|
|
383
|
+
}
|
|
384
|
+
BOOST_UBLAS_INLINE
|
|
385
|
+
matrix_slice_type operator () (const default_slice &s1, const default_slice &s2) {
|
|
386
|
+
return matrix_slice_type (operator () (), s1, s2);
|
|
387
|
+
}
|
|
388
|
+
template<class A>
|
|
389
|
+
BOOST_UBLAS_INLINE
|
|
390
|
+
const matrix_indirect<const E, indirect_array<A> > operator () (const indirect_array<A> &ia1, const indirect_array<A> &ia2) const {
|
|
391
|
+
return matrix_indirect<const E, indirect_array<A> > (operator () (), ia1, ia2);
|
|
392
|
+
}
|
|
393
|
+
template<class A>
|
|
394
|
+
BOOST_UBLAS_INLINE
|
|
395
|
+
matrix_indirect<E, indirect_array<A> > operator () (const indirect_array<A> &ia1, const indirect_array<A> &ia2) {
|
|
396
|
+
return matrix_indirect<E, indirect_array<A> > (operator () (), ia1, ia2);
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
BOOST_UBLAS_INLINE
|
|
400
|
+
const_matrix_range_type project (const default_range &r1, const default_range &r2) const {
|
|
401
|
+
return const_matrix_range_type (operator () (), r1, r2);
|
|
402
|
+
}
|
|
403
|
+
BOOST_UBLAS_INLINE
|
|
404
|
+
matrix_range_type project (const default_range &r1, const default_range &r2) {
|
|
405
|
+
return matrix_range_type (operator () (), r1, r2);
|
|
406
|
+
}
|
|
407
|
+
BOOST_UBLAS_INLINE
|
|
408
|
+
const_matrix_slice_type project (const default_slice &s1, const default_slice &s2) const {
|
|
409
|
+
return const_matrix_slice_type (operator () (), s1, s2);
|
|
410
|
+
}
|
|
411
|
+
BOOST_UBLAS_INLINE
|
|
412
|
+
matrix_slice_type project (const default_slice &s1, const default_slice &s2) {
|
|
413
|
+
return matrix_slice_type (operator () (), s1, s2);
|
|
414
|
+
}
|
|
415
|
+
template<class A>
|
|
416
|
+
BOOST_UBLAS_INLINE
|
|
417
|
+
const matrix_indirect<const E, indirect_array<A> > project (const indirect_array<A> &ia1, const indirect_array<A> &ia2) const {
|
|
418
|
+
return matrix_indirect<const E, indirect_array<A> > (operator () (), ia1, ia2);
|
|
419
|
+
}
|
|
420
|
+
template<class A>
|
|
421
|
+
BOOST_UBLAS_INLINE
|
|
422
|
+
matrix_indirect<E, indirect_array<A> > project (const indirect_array<A> &ia1, const indirect_array<A> &ia2) {
|
|
423
|
+
return matrix_indirect<E, indirect_array<A> > (operator () (), ia1, ia2);
|
|
424
|
+
}
|
|
425
|
+
#endif
|
|
426
|
+
};
|
|
427
|
+
|
|
428
|
+
#ifdef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
|
|
429
|
+
struct iterator1_tag {};
|
|
430
|
+
struct iterator2_tag {};
|
|
431
|
+
|
|
432
|
+
template<class I>
|
|
433
|
+
BOOST_UBLAS_INLINE
|
|
434
|
+
typename I::dual_iterator_type begin (const I &it, iterator1_tag) {
|
|
435
|
+
return it ().find2 (1, it.index1 (), 0);
|
|
436
|
+
}
|
|
437
|
+
template<class I>
|
|
438
|
+
BOOST_UBLAS_INLINE
|
|
439
|
+
typename I::dual_iterator_type end (const I &it, iterator1_tag) {
|
|
440
|
+
return it ().find2 (1, it.index1 (), it ().size2 ());
|
|
441
|
+
}
|
|
442
|
+
template<class I>
|
|
443
|
+
BOOST_UBLAS_INLINE
|
|
444
|
+
typename I::dual_reverse_iterator_type rbegin (const I &it, iterator1_tag) {
|
|
445
|
+
return typename I::dual_reverse_iterator_type (end (it, iterator1_tag ()));
|
|
446
|
+
}
|
|
447
|
+
template<class I>
|
|
448
|
+
BOOST_UBLAS_INLINE
|
|
449
|
+
typename I::dual_reverse_iterator_type rend (const I &it, iterator1_tag) {
|
|
450
|
+
return typename I::dual_reverse_iterator_type (begin (it, iterator1_tag ()));
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
template<class I>
|
|
454
|
+
BOOST_UBLAS_INLINE
|
|
455
|
+
typename I::dual_iterator_type begin (const I &it, iterator2_tag) {
|
|
456
|
+
return it ().find1 (1, 0, it.index2 ());
|
|
457
|
+
}
|
|
458
|
+
template<class I>
|
|
459
|
+
BOOST_UBLAS_INLINE
|
|
460
|
+
typename I::dual_iterator_type end (const I &it, iterator2_tag) {
|
|
461
|
+
return it ().find1 (1, it ().size1 (), it.index2 ());
|
|
462
|
+
}
|
|
463
|
+
template<class I>
|
|
464
|
+
BOOST_UBLAS_INLINE
|
|
465
|
+
typename I::dual_reverse_iterator_type rbegin (const I &it, iterator2_tag) {
|
|
466
|
+
return typename I::dual_reverse_iterator_type (end (it, iterator2_tag ()));
|
|
467
|
+
}
|
|
468
|
+
template<class I>
|
|
469
|
+
BOOST_UBLAS_INLINE
|
|
470
|
+
typename I::dual_reverse_iterator_type rend (const I &it, iterator2_tag) {
|
|
471
|
+
return typename I::dual_reverse_iterator_type (begin (it, iterator2_tag ()));
|
|
472
|
+
}
|
|
473
|
+
#endif
|
|
474
|
+
|
|
475
|
+
/** \brief Base class for Matrix container models
|
|
476
|
+
*
|
|
477
|
+
* it does not model the Matrix concept but all derived types should.
|
|
478
|
+
* The class defines a common base type and some common interface for all
|
|
479
|
+
* statically derived Matrix classes
|
|
480
|
+
* We implement the casts to the statically derived type.
|
|
481
|
+
*/
|
|
482
|
+
template<class C>
|
|
483
|
+
class matrix_container:
|
|
484
|
+
public matrix_expression<C> {
|
|
485
|
+
public:
|
|
486
|
+
static const unsigned complexity = 0;
|
|
487
|
+
typedef C container_type;
|
|
488
|
+
typedef matrix_tag type_category;
|
|
489
|
+
|
|
490
|
+
BOOST_UBLAS_INLINE
|
|
491
|
+
const container_type &operator () () const {
|
|
492
|
+
return *static_cast<const container_type *> (this);
|
|
493
|
+
}
|
|
494
|
+
BOOST_UBLAS_INLINE
|
|
495
|
+
container_type &operator () () {
|
|
496
|
+
return *static_cast<container_type *> (this);
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
|
|
500
|
+
using matrix_expression<C>::operator ();
|
|
501
|
+
#endif
|
|
502
|
+
};
|
|
503
|
+
|
|
504
|
+
}}}
|
|
505
|
+
|
|
506
|
+
#endif
|