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,297 @@
|
|
|
1
|
+
// Copyright (c) 2000-2011 Joerg Walter, Mathias Koch, 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
|
+
#ifndef _BOOST_UBLAS_EXCEPTION_
|
|
8
|
+
#define _BOOST_UBLAS_EXCEPTION_
|
|
9
|
+
|
|
10
|
+
#if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
|
|
11
|
+
#include <stdexcept>
|
|
12
|
+
#else
|
|
13
|
+
#include <cstdlib>
|
|
14
|
+
#endif
|
|
15
|
+
#ifndef BOOST_UBLAS_NO_STD_CERR
|
|
16
|
+
#include <iostream>
|
|
17
|
+
#endif
|
|
18
|
+
|
|
19
|
+
#include <boost/numeric/ublas/detail/config.hpp>
|
|
20
|
+
|
|
21
|
+
namespace boost { namespace numeric { namespace ublas {
|
|
22
|
+
|
|
23
|
+
/** \brief Exception raised when a division by zero occurs
|
|
24
|
+
*/
|
|
25
|
+
struct divide_by_zero
|
|
26
|
+
#if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
|
|
27
|
+
// Inherit from standard exceptions as requested during review.
|
|
28
|
+
: public std::runtime_error
|
|
29
|
+
{
|
|
30
|
+
explicit divide_by_zero (const char *s = "divide by zero") :
|
|
31
|
+
std::runtime_error (s) {}
|
|
32
|
+
void raise () {
|
|
33
|
+
throw *this;
|
|
34
|
+
}
|
|
35
|
+
#else
|
|
36
|
+
{
|
|
37
|
+
divide_by_zero ()
|
|
38
|
+
{}
|
|
39
|
+
explicit divide_by_zero (const char *)
|
|
40
|
+
{}
|
|
41
|
+
void raise () {
|
|
42
|
+
std::abort ();
|
|
43
|
+
}
|
|
44
|
+
#endif
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
/** \brief Expception raised when some interal errors occurs like computations errors, zeros values where you should not have zeros, etc...
|
|
48
|
+
*/
|
|
49
|
+
struct internal_logic
|
|
50
|
+
#if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
|
|
51
|
+
// Inherit from standard exceptions as requested during review.
|
|
52
|
+
: public std::logic_error {
|
|
53
|
+
explicit internal_logic (const char *s = "internal logic") :
|
|
54
|
+
std::logic_error (s) {}
|
|
55
|
+
void raise () {
|
|
56
|
+
throw *this;
|
|
57
|
+
}
|
|
58
|
+
#else
|
|
59
|
+
{
|
|
60
|
+
internal_logic ()
|
|
61
|
+
{}
|
|
62
|
+
explicit internal_logic (const char *)
|
|
63
|
+
{}
|
|
64
|
+
void raise () {
|
|
65
|
+
std::abort ();
|
|
66
|
+
}
|
|
67
|
+
#endif
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
struct external_logic
|
|
71
|
+
#if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
|
|
72
|
+
// Inherit from standard exceptions as requested during review.
|
|
73
|
+
: public std::logic_error {
|
|
74
|
+
explicit external_logic (const char *s = "external logic") :
|
|
75
|
+
std::logic_error (s) {}
|
|
76
|
+
// virtual const char *what () const throw () {
|
|
77
|
+
// return "exception: external logic";
|
|
78
|
+
// }
|
|
79
|
+
void raise () {
|
|
80
|
+
throw *this;
|
|
81
|
+
}
|
|
82
|
+
#else
|
|
83
|
+
{
|
|
84
|
+
external_logic ()
|
|
85
|
+
{}
|
|
86
|
+
explicit external_logic (const char *)
|
|
87
|
+
{}
|
|
88
|
+
void raise () {
|
|
89
|
+
std::abort ();
|
|
90
|
+
}
|
|
91
|
+
#endif
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
struct bad_argument
|
|
95
|
+
#if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
|
|
96
|
+
// Inherit from standard exceptions as requested during review.
|
|
97
|
+
: public std::invalid_argument {
|
|
98
|
+
explicit bad_argument (const char *s = "bad argument") :
|
|
99
|
+
std::invalid_argument (s) {}
|
|
100
|
+
void raise () {
|
|
101
|
+
throw *this;
|
|
102
|
+
}
|
|
103
|
+
#else
|
|
104
|
+
{
|
|
105
|
+
bad_argument ()
|
|
106
|
+
{}
|
|
107
|
+
explicit bad_argument (const char *)
|
|
108
|
+
{}
|
|
109
|
+
void raise () {
|
|
110
|
+
std::abort ();
|
|
111
|
+
}
|
|
112
|
+
#endif
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
*/
|
|
117
|
+
struct bad_size
|
|
118
|
+
#if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
|
|
119
|
+
// Inherit from standard exceptions as requested during review.
|
|
120
|
+
: public std::domain_error {
|
|
121
|
+
explicit bad_size (const char *s = "bad size") :
|
|
122
|
+
std::domain_error (s) {}
|
|
123
|
+
void raise () {
|
|
124
|
+
throw *this;
|
|
125
|
+
}
|
|
126
|
+
#else
|
|
127
|
+
{
|
|
128
|
+
bad_size ()
|
|
129
|
+
{}
|
|
130
|
+
explicit bad_size (const char *)
|
|
131
|
+
{}
|
|
132
|
+
void raise () {
|
|
133
|
+
std::abort ();
|
|
134
|
+
}
|
|
135
|
+
#endif
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
struct bad_index
|
|
139
|
+
#if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
|
|
140
|
+
// Inherit from standard exceptions as requested during review.
|
|
141
|
+
: public std::out_of_range {
|
|
142
|
+
explicit bad_index (const char *s = "bad index") :
|
|
143
|
+
std::out_of_range (s) {}
|
|
144
|
+
void raise () {
|
|
145
|
+
throw *this;
|
|
146
|
+
}
|
|
147
|
+
#else
|
|
148
|
+
{
|
|
149
|
+
bad_index ()
|
|
150
|
+
{}
|
|
151
|
+
explicit bad_index (const char *)
|
|
152
|
+
{}
|
|
153
|
+
void raise () {
|
|
154
|
+
std::abort ();
|
|
155
|
+
}
|
|
156
|
+
#endif
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
struct singular
|
|
160
|
+
#if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
|
|
161
|
+
// Inherit from standard exceptions as requested during review.
|
|
162
|
+
: public std::runtime_error {
|
|
163
|
+
explicit singular (const char *s = "singular") :
|
|
164
|
+
std::runtime_error (s) {}
|
|
165
|
+
void raise () {
|
|
166
|
+
throw *this;
|
|
167
|
+
}
|
|
168
|
+
#else
|
|
169
|
+
{
|
|
170
|
+
singular ()
|
|
171
|
+
{}
|
|
172
|
+
explicit singular (const char *)
|
|
173
|
+
{}
|
|
174
|
+
void raise () {
|
|
175
|
+
std::abort ();
|
|
176
|
+
}
|
|
177
|
+
#endif
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
struct non_real
|
|
181
|
+
#if ! defined (BOOST_NO_EXCEPTIONS) && ! defined (BOOST_UBLAS_NO_EXCEPTIONS)
|
|
182
|
+
// Inherit from standard exceptions as requested during review.
|
|
183
|
+
: public std::domain_error {
|
|
184
|
+
explicit non_real (const char *s = "exception: non real") :
|
|
185
|
+
std::domain_error (s) {}
|
|
186
|
+
void raise () {
|
|
187
|
+
throw *this;
|
|
188
|
+
}
|
|
189
|
+
#else
|
|
190
|
+
{
|
|
191
|
+
non_real ()
|
|
192
|
+
{}
|
|
193
|
+
explicit non_real (const char *)
|
|
194
|
+
{}
|
|
195
|
+
void raise () {
|
|
196
|
+
std::abort ();
|
|
197
|
+
}
|
|
198
|
+
#endif
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
#if BOOST_UBLAS_CHECK_ENABLE
|
|
202
|
+
// Macros are equivilent to
|
|
203
|
+
// template<class E>
|
|
204
|
+
// BOOST_UBLAS_INLINE
|
|
205
|
+
// void check (bool expression, const E &e) {
|
|
206
|
+
// if (! expression)
|
|
207
|
+
// e.raise ();
|
|
208
|
+
// }
|
|
209
|
+
// template<class E>
|
|
210
|
+
// BOOST_UBLAS_INLINE
|
|
211
|
+
// void check_ex (bool expression, const char *file, int line, const E &e) {
|
|
212
|
+
// if (! expression)
|
|
213
|
+
// e.raise ();
|
|
214
|
+
// }
|
|
215
|
+
#ifndef BOOST_UBLAS_NO_STD_CERR
|
|
216
|
+
#define BOOST_UBLAS_CHECK_FALSE(e) \
|
|
217
|
+
std::cerr << "Check failed in file " << __FILE__ << " at line " << __LINE__ << ":" << std::endl; \
|
|
218
|
+
e.raise ();
|
|
219
|
+
#define BOOST_UBLAS_CHECK(expression, e) \
|
|
220
|
+
if (! (expression)) { \
|
|
221
|
+
std::cerr << "Check failed in file " << __FILE__ << " at line " << __LINE__ << ":" << std::endl; \
|
|
222
|
+
std::cerr << #expression << std::endl; \
|
|
223
|
+
e.raise (); \
|
|
224
|
+
}
|
|
225
|
+
#define BOOST_UBLAS_CHECK_EX(expression, file, line, e) \
|
|
226
|
+
if (! (expression)) { \
|
|
227
|
+
std::cerr << "Check failed in file " << (file) << " at line " << (line) << ":" << std::endl; \
|
|
228
|
+
std::cerr << #expression << std::endl; \
|
|
229
|
+
e.raise (); \
|
|
230
|
+
}
|
|
231
|
+
#else
|
|
232
|
+
#define BOOST_UBLAS_CHECK_FALSE(e) \
|
|
233
|
+
e.raise ();
|
|
234
|
+
#define BOOST_UBLAS_CHECK(expression, e) \
|
|
235
|
+
if (! (expression)) { \
|
|
236
|
+
e.raise (); \
|
|
237
|
+
}
|
|
238
|
+
#define BOOST_UBLAS_CHECK_EX(expression, file, line, e) \
|
|
239
|
+
if (! (expression)) { \
|
|
240
|
+
e.raise (); \
|
|
241
|
+
}
|
|
242
|
+
#endif
|
|
243
|
+
#else
|
|
244
|
+
// Macros are equivilent to
|
|
245
|
+
// template<class E>
|
|
246
|
+
// BOOST_UBLAS_INLINE
|
|
247
|
+
// void check (bool expression, const E &e) {}
|
|
248
|
+
// template<class E>
|
|
249
|
+
// BOOST_UBLAS_INLINE
|
|
250
|
+
// void check_ex (bool expression, const char *file, int line, const E &e) {}
|
|
251
|
+
#define BOOST_UBLAS_CHECK_FALSE(e)
|
|
252
|
+
#define BOOST_UBLAS_CHECK(expression, e)
|
|
253
|
+
#define BOOST_UBLAS_CHECK_EX(expression, file, line, e)
|
|
254
|
+
#endif
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
#ifndef BOOST_UBLAS_USE_FAST_SAME
|
|
258
|
+
// Macro is equivilent to
|
|
259
|
+
// template<class T>
|
|
260
|
+
// BOOST_UBLAS_INLINE
|
|
261
|
+
// const T &same_impl (const T &size1, const T &size2) {
|
|
262
|
+
// BOOST_UBLAS_CHECK (size1 == size2, bad_argument ());
|
|
263
|
+
// return (std::min) (size1, size2);
|
|
264
|
+
// }
|
|
265
|
+
// #define BOOST_UBLAS_SAME(size1, size2) same_impl ((size1), (size2))
|
|
266
|
+
// need two types here because different containers can have
|
|
267
|
+
// different size_types (especially sparse types)
|
|
268
|
+
template<class T1, class T2>
|
|
269
|
+
BOOST_UBLAS_INLINE
|
|
270
|
+
// Kresimir Fresl and Dan Muller reported problems with COMO.
|
|
271
|
+
// We better change the signature instead of libcomo ;-)
|
|
272
|
+
// const T &same_impl_ex (const T &size1, const T &size2, const char *file, int line) {
|
|
273
|
+
T1 same_impl_ex (const T1 &size1, const T2 &size2, const char *file, int line) {
|
|
274
|
+
BOOST_UBLAS_CHECK_EX (size1 == size2, file, line, bad_argument ());
|
|
275
|
+
return (size1 < size2)?(size1):(size2);
|
|
276
|
+
}
|
|
277
|
+
template<class T>
|
|
278
|
+
BOOST_UBLAS_INLINE
|
|
279
|
+
T same_impl_ex (const T &size1, const T &size2, const char *file, int line) {
|
|
280
|
+
BOOST_UBLAS_CHECK_EX (size1 == size2, file, line, bad_argument ());
|
|
281
|
+
return (std::min) (size1, size2);
|
|
282
|
+
}
|
|
283
|
+
#define BOOST_UBLAS_SAME(size1, size2) same_impl_ex ((size1), (size2), __FILE__, __LINE__)
|
|
284
|
+
#else
|
|
285
|
+
// Macros are equivilent to
|
|
286
|
+
// template<class T>
|
|
287
|
+
// BOOST_UBLAS_INLINE
|
|
288
|
+
// const T &same_impl (const T &size1, const T &size2) {
|
|
289
|
+
// return size1;
|
|
290
|
+
// }
|
|
291
|
+
// #define BOOST_UBLAS_SAME(size1, size2) same_impl ((size1), (size2))
|
|
292
|
+
#define BOOST_UBLAS_SAME(size1, size2) (size1)
|
|
293
|
+
#endif
|
|
294
|
+
|
|
295
|
+
}}}
|
|
296
|
+
|
|
297
|
+
#endif
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright (c) 2009
|
|
3
|
+
// Gunter Winkler
|
|
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
|
+
//
|
|
10
|
+
|
|
11
|
+
#ifndef _BOOST_UBLAS_SPARSE_VIEW_
|
|
12
|
+
#define _BOOST_UBLAS_SPARSE_VIEW_
|
|
13
|
+
|
|
14
|
+
#include <boost/numeric/ublas/matrix_expression.hpp>
|
|
15
|
+
#include <boost/numeric/ublas/detail/matrix_assign.hpp>
|
|
16
|
+
#if BOOST_UBLAS_TYPE_CHECK
|
|
17
|
+
#include <boost/numeric/ublas/matrix.hpp>
|
|
18
|
+
#endif
|
|
19
|
+
|
|
20
|
+
#include <boost/next_prior.hpp>
|
|
21
|
+
#include <boost/type_traits/remove_cv.hpp>
|
|
22
|
+
#include <boost/numeric/ublas/storage.hpp>
|
|
23
|
+
|
|
24
|
+
namespace boost { namespace numeric { namespace ublas {
|
|
25
|
+
|
|
26
|
+
// view a chunk of memory as ublas array
|
|
27
|
+
|
|
28
|
+
template < class T >
|
|
29
|
+
class c_array_view
|
|
30
|
+
: public storage_array< c_array_view<T> > {
|
|
31
|
+
private:
|
|
32
|
+
typedef c_array_view<T> self_type;
|
|
33
|
+
typedef T * pointer;
|
|
34
|
+
|
|
35
|
+
public:
|
|
36
|
+
// TODO: think about a const pointer
|
|
37
|
+
typedef const pointer array_type;
|
|
38
|
+
|
|
39
|
+
typedef std::size_t size_type;
|
|
40
|
+
typedef std::ptrdiff_t difference_type;
|
|
41
|
+
|
|
42
|
+
typedef T value_type;
|
|
43
|
+
typedef const T &const_reference;
|
|
44
|
+
typedef const T *const_pointer;
|
|
45
|
+
|
|
46
|
+
typedef const_pointer const_iterator;
|
|
47
|
+
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
|
|
48
|
+
|
|
49
|
+
//
|
|
50
|
+
// typedefs required by vector concept
|
|
51
|
+
//
|
|
52
|
+
|
|
53
|
+
typedef dense_tag storage_category;
|
|
54
|
+
typedef const vector_reference<const self_type> const_closure_type;
|
|
55
|
+
|
|
56
|
+
c_array_view(size_type size, array_type data) :
|
|
57
|
+
size_(size), data_(data)
|
|
58
|
+
{}
|
|
59
|
+
|
|
60
|
+
~c_array_view()
|
|
61
|
+
{}
|
|
62
|
+
|
|
63
|
+
//
|
|
64
|
+
// immutable methods of container concept
|
|
65
|
+
//
|
|
66
|
+
|
|
67
|
+
BOOST_UBLAS_INLINE
|
|
68
|
+
size_type size () const {
|
|
69
|
+
return size_;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
BOOST_UBLAS_INLINE
|
|
73
|
+
const_reference operator [] (size_type i) const {
|
|
74
|
+
BOOST_UBLAS_CHECK (i < size_, bad_index ());
|
|
75
|
+
return data_ [i];
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
BOOST_UBLAS_INLINE
|
|
79
|
+
const_iterator begin () const {
|
|
80
|
+
return data_;
|
|
81
|
+
}
|
|
82
|
+
BOOST_UBLAS_INLINE
|
|
83
|
+
const_iterator end () const {
|
|
84
|
+
return data_ + size_;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
BOOST_UBLAS_INLINE
|
|
88
|
+
const_reverse_iterator rbegin () const {
|
|
89
|
+
return const_reverse_iterator (end ());
|
|
90
|
+
}
|
|
91
|
+
BOOST_UBLAS_INLINE
|
|
92
|
+
const_reverse_iterator rend () const {
|
|
93
|
+
return const_reverse_iterator (begin ());
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
private:
|
|
97
|
+
size_type size_;
|
|
98
|
+
array_type data_;
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
/** \brief Present existing arrays as compressed array based
|
|
103
|
+
* sparse matrix.
|
|
104
|
+
* This class provides CRS / CCS storage layout.
|
|
105
|
+
*
|
|
106
|
+
* see also http://www.netlib.org/utk/papers/templates/node90.html
|
|
107
|
+
*
|
|
108
|
+
* \param L layout type, either row_major or column_major
|
|
109
|
+
* \param IB index base, use 0 for C indexing and 1 for
|
|
110
|
+
* FORTRAN indexing of the internal index arrays. This
|
|
111
|
+
* does not affect the operator()(int,int) where the first
|
|
112
|
+
* row/column has always index 0.
|
|
113
|
+
* \param IA index array type, e.g., int[]
|
|
114
|
+
* \param TA value array type, e.g., double[]
|
|
115
|
+
*/
|
|
116
|
+
template<class L, std::size_t IB, class IA, class JA, class TA>
|
|
117
|
+
class compressed_matrix_view:
|
|
118
|
+
public matrix_expression<compressed_matrix_view<L, IB, IA, JA, TA> > {
|
|
119
|
+
|
|
120
|
+
public:
|
|
121
|
+
typedef typename vector_view_traits<TA>::value_type value_type;
|
|
122
|
+
|
|
123
|
+
private:
|
|
124
|
+
typedef value_type &true_reference;
|
|
125
|
+
typedef value_type *pointer;
|
|
126
|
+
typedef const value_type *const_pointer;
|
|
127
|
+
typedef L layout_type;
|
|
128
|
+
typedef compressed_matrix_view<L, IB, IA, JA, TA> self_type;
|
|
129
|
+
|
|
130
|
+
public:
|
|
131
|
+
#ifdef BOOST_UBLAS_ENABLE_PROXY_SHORTCUTS
|
|
132
|
+
using matrix_expression<self_type>::operator ();
|
|
133
|
+
#endif
|
|
134
|
+
// ISSUE require type consistency check
|
|
135
|
+
// is_convertable (IA::size_type, TA::size_type)
|
|
136
|
+
typedef typename boost::remove_cv<typename vector_view_traits<JA>::value_type>::type index_type;
|
|
137
|
+
// for compatibility, should be removed some day ...
|
|
138
|
+
typedef index_type size_type;
|
|
139
|
+
// size_type for the data arrays.
|
|
140
|
+
typedef typename vector_view_traits<JA>::size_type array_size_type;
|
|
141
|
+
typedef typename vector_view_traits<JA>::difference_type difference_type;
|
|
142
|
+
typedef const value_type & const_reference;
|
|
143
|
+
|
|
144
|
+
// do NOT define reference type, because class is read only
|
|
145
|
+
// typedef value_type & reference;
|
|
146
|
+
|
|
147
|
+
typedef IA rowptr_array_type;
|
|
148
|
+
typedef JA index_array_type;
|
|
149
|
+
typedef TA value_array_type;
|
|
150
|
+
typedef const matrix_reference<const self_type> const_closure_type;
|
|
151
|
+
typedef matrix_reference<self_type> closure_type;
|
|
152
|
+
|
|
153
|
+
// FIXME: define a corresponding temporary type
|
|
154
|
+
// typedef compressed_vector<T, IB, IA, TA> vector_temporary_type;
|
|
155
|
+
|
|
156
|
+
// FIXME: define a corresponding temporary type
|
|
157
|
+
// typedef self_type matrix_temporary_type;
|
|
158
|
+
|
|
159
|
+
typedef sparse_tag storage_category;
|
|
160
|
+
typedef typename L::orientation_category orientation_category;
|
|
161
|
+
|
|
162
|
+
//
|
|
163
|
+
// private types for internal use
|
|
164
|
+
//
|
|
165
|
+
|
|
166
|
+
private:
|
|
167
|
+
typedef typename vector_view_traits<index_array_type>::const_iterator const_subiterator_type;
|
|
168
|
+
|
|
169
|
+
//
|
|
170
|
+
// Construction and destruction
|
|
171
|
+
//
|
|
172
|
+
private:
|
|
173
|
+
/// private default constructor because data must be filled by caller
|
|
174
|
+
BOOST_UBLAS_INLINE
|
|
175
|
+
compressed_matrix_view () { }
|
|
176
|
+
|
|
177
|
+
public:
|
|
178
|
+
BOOST_UBLAS_INLINE
|
|
179
|
+
compressed_matrix_view (index_type n_rows, index_type n_cols, array_size_type nnz
|
|
180
|
+
, const rowptr_array_type & iptr
|
|
181
|
+
, const index_array_type & jptr
|
|
182
|
+
, const value_array_type & values):
|
|
183
|
+
matrix_expression<self_type> (),
|
|
184
|
+
size1_ (n_rows), size2_ (n_cols),
|
|
185
|
+
nnz_ (nnz),
|
|
186
|
+
index1_data_ (iptr),
|
|
187
|
+
index2_data_ (jptr),
|
|
188
|
+
value_data_ (values) {
|
|
189
|
+
storage_invariants ();
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
BOOST_UBLAS_INLINE
|
|
193
|
+
compressed_matrix_view(const compressed_matrix_view& o) :
|
|
194
|
+
size1_(o.size1_), size2_(o.size2_),
|
|
195
|
+
nnz_(o.nnz_),
|
|
196
|
+
index1_data_(o.index1_data_),
|
|
197
|
+
index2_data_(o.index2_data_),
|
|
198
|
+
value_data_(o.value_data_)
|
|
199
|
+
{}
|
|
200
|
+
|
|
201
|
+
//
|
|
202
|
+
// implement immutable iterator types
|
|
203
|
+
//
|
|
204
|
+
|
|
205
|
+
class const_iterator1 {};
|
|
206
|
+
class const_iterator2 {};
|
|
207
|
+
|
|
208
|
+
typedef reverse_iterator_base1<const_iterator1> const_reverse_iterator1;
|
|
209
|
+
typedef reverse_iterator_base2<const_iterator2> const_reverse_iterator2;
|
|
210
|
+
|
|
211
|
+
//
|
|
212
|
+
// implement all read only methods for the matrix expression concept
|
|
213
|
+
//
|
|
214
|
+
|
|
215
|
+
//! return the number of rows
|
|
216
|
+
index_type size1() const {
|
|
217
|
+
return size1_;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
//! return the number of columns
|
|
221
|
+
index_type size2() const {
|
|
222
|
+
return size2_;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
//! return value at position (i,j)
|
|
226
|
+
value_type operator()(index_type i, index_type j) const {
|
|
227
|
+
const_pointer p = find_element(i,j);
|
|
228
|
+
if (!p) {
|
|
229
|
+
return zero_;
|
|
230
|
+
} else {
|
|
231
|
+
return *p;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
private:
|
|
237
|
+
//
|
|
238
|
+
// private helper functions
|
|
239
|
+
//
|
|
240
|
+
|
|
241
|
+
const_pointer find_element (index_type i, index_type j) const {
|
|
242
|
+
index_type element1 (layout_type::index_M (i, j));
|
|
243
|
+
index_type element2 (layout_type::index_m (i, j));
|
|
244
|
+
|
|
245
|
+
const array_size_type itv = zero_based( index1_data_[element1] );
|
|
246
|
+
const array_size_type itv_next = zero_based( index1_data_[element1+1] );
|
|
247
|
+
|
|
248
|
+
const_subiterator_type it_start = boost::next(vector_view_traits<index_array_type>::begin(index2_data_),itv);
|
|
249
|
+
const_subiterator_type it_end = boost::next(vector_view_traits<index_array_type>::begin(index2_data_),itv_next);
|
|
250
|
+
const_subiterator_type it = find_index_in_row(it_start, it_end, element2) ;
|
|
251
|
+
|
|
252
|
+
if (it == it_end || *it != k_based (element2))
|
|
253
|
+
return 0;
|
|
254
|
+
return &value_data_ [it - vector_view_traits<index_array_type>::begin(index2_data_)];
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
const_subiterator_type find_index_in_row(const_subiterator_type it_start
|
|
258
|
+
, const_subiterator_type it_end
|
|
259
|
+
, index_type index) const {
|
|
260
|
+
return std::lower_bound( it_start
|
|
261
|
+
, it_end
|
|
262
|
+
, k_based (index) );
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
private:
|
|
267
|
+
void storage_invariants () const {
|
|
268
|
+
BOOST_UBLAS_CHECK (index1_data_ [layout_type::size_M (size1_, size2_)] == k_based (nnz_), external_logic ());
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
index_type size1_;
|
|
272
|
+
index_type size2_;
|
|
273
|
+
|
|
274
|
+
array_size_type nnz_;
|
|
275
|
+
|
|
276
|
+
const rowptr_array_type & index1_data_;
|
|
277
|
+
const index_array_type & index2_data_;
|
|
278
|
+
const value_array_type & value_data_;
|
|
279
|
+
|
|
280
|
+
static const value_type zero_;
|
|
281
|
+
|
|
282
|
+
BOOST_UBLAS_INLINE
|
|
283
|
+
static index_type zero_based (index_type k_based_index) {
|
|
284
|
+
return k_based_index - IB;
|
|
285
|
+
}
|
|
286
|
+
BOOST_UBLAS_INLINE
|
|
287
|
+
static index_type k_based (index_type zero_based_index) {
|
|
288
|
+
return zero_based_index + IB;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
friend class iterator1;
|
|
292
|
+
friend class iterator2;
|
|
293
|
+
friend class const_iterator1;
|
|
294
|
+
friend class const_iterator2;
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
template<class L, std::size_t IB, class IA, class JA, class TA >
|
|
298
|
+
const typename compressed_matrix_view<L,IB,IA,JA,TA>::value_type
|
|
299
|
+
compressed_matrix_view<L,IB,IA,JA,TA>::zero_ = value_type/*zero*/();
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
template<class L, std::size_t IB, class IA, class JA, class TA >
|
|
303
|
+
compressed_matrix_view<L,IB,IA,JA,TA>
|
|
304
|
+
make_compressed_matrix_view(typename vector_view_traits<JA>::value_type n_rows
|
|
305
|
+
, typename vector_view_traits<JA>::value_type n_cols
|
|
306
|
+
, typename vector_view_traits<JA>::size_type nnz
|
|
307
|
+
, const IA & ia
|
|
308
|
+
, const JA & ja
|
|
309
|
+
, const TA & ta) {
|
|
310
|
+
|
|
311
|
+
return compressed_matrix_view<L,IB,IA,JA,TA>(n_rows, n_cols, nnz, ia, ja, ta);
|
|
312
|
+
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
}}}
|
|
316
|
+
|
|
317
|
+
#endif
|