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,110 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright (c) 2018-2019, Cem Bassoy, cem.bassoy@gmail.com
|
|
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
|
+
// Fraunhofer IOSB, Ettlingen, Germany
|
|
10
|
+
//
|
|
11
|
+
|
|
12
|
+
#ifndef BOOST_UBLAS_TENSOR_MULTI_INDEX_HPP
|
|
13
|
+
#define BOOST_UBLAS_TENSOR_MULTI_INDEX_HPP
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
#include <cstddef>
|
|
17
|
+
#include <array>
|
|
18
|
+
#include <vector>
|
|
19
|
+
|
|
20
|
+
#include "multi_index_utility.hpp"
|
|
21
|
+
|
|
22
|
+
namespace boost {
|
|
23
|
+
namespace numeric {
|
|
24
|
+
namespace ublas {
|
|
25
|
+
namespace index {
|
|
26
|
+
|
|
27
|
+
template<std::size_t I>
|
|
28
|
+
struct index_type;
|
|
29
|
+
|
|
30
|
+
} // namespace indices
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
namespace boost {
|
|
37
|
+
namespace numeric {
|
|
38
|
+
namespace ublas {
|
|
39
|
+
|
|
40
|
+
/** @brief Proxy class for the einstein summation notation
|
|
41
|
+
*
|
|
42
|
+
* Denotes an array of index_type types ::_a for 0<=K<=16 is used in tensor::operator()
|
|
43
|
+
*/
|
|
44
|
+
template<std::size_t N>
|
|
45
|
+
class multi_index
|
|
46
|
+
{
|
|
47
|
+
public:
|
|
48
|
+
multi_index() = delete;
|
|
49
|
+
|
|
50
|
+
template<std::size_t I, class ... indexes>
|
|
51
|
+
constexpr multi_index(index::index_type<I> const& i, indexes ... is )
|
|
52
|
+
: _base{i(), is()... }
|
|
53
|
+
{
|
|
54
|
+
static_assert( sizeof...(is)+1 == N,
|
|
55
|
+
"Static assert in boost::numeric::ublas::multi_index: number of constructor arguments is not equal to the template parameter." );
|
|
56
|
+
|
|
57
|
+
static_assert( valid_multi_index<std::tuple<index::index_type<I>, indexes ...> >::value,
|
|
58
|
+
"Static assert in boost::numeric::ublas::multi_index: indexes occur twice in multi-index." );
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
multi_index(multi_index const& other)
|
|
62
|
+
: _base(other._base)
|
|
63
|
+
{
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
multi_index& operator=(multi_index const& other)
|
|
67
|
+
{
|
|
68
|
+
this->_base = other._base;
|
|
69
|
+
return *this;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
~multi_index() = default;
|
|
73
|
+
|
|
74
|
+
auto const& base() const { return _base; }
|
|
75
|
+
constexpr auto size() const { return _base.size(); }
|
|
76
|
+
constexpr auto at(std::size_t i) const { return _base.at(i); }
|
|
77
|
+
constexpr auto operator[](std::size_t i) const { return _base.at(i); }
|
|
78
|
+
|
|
79
|
+
private:
|
|
80
|
+
std::array<std::size_t, N> _base;
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
template<std::size_t K, std::size_t N>
|
|
84
|
+
constexpr auto get(multi_index<N> const& m) { return std::get<K>(m.base()); }
|
|
85
|
+
|
|
86
|
+
template<std::size_t M, std::size_t N>
|
|
87
|
+
auto array_to_vector(multi_index<M> const& lhs, multi_index<N> const& rhs)
|
|
88
|
+
{
|
|
89
|
+
using vtype = std::vector<std::size_t>;
|
|
90
|
+
|
|
91
|
+
auto pair_of_vector = std::make_pair( vtype {}, vtype{} );
|
|
92
|
+
|
|
93
|
+
for(auto i = 0u; i < N; ++i)
|
|
94
|
+
for(auto j = 0u; j < M; ++j)
|
|
95
|
+
if ( lhs.at(i) == rhs.at(j) && lhs.at(i) != boost::numeric::ublas::index::_())
|
|
96
|
+
pair_of_vector.first .push_back( i+1 ),
|
|
97
|
+
pair_of_vector.second.push_back( j+1 );
|
|
98
|
+
|
|
99
|
+
return pair_of_vector;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
} // namespace ublas
|
|
107
|
+
} // namespace numeric
|
|
108
|
+
} // namespace boost
|
|
109
|
+
|
|
110
|
+
#endif // MULTI_INDEX_HPP
|
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright (c) 2018-2019, Cem Bassoy, cem.bassoy@gmail.com
|
|
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
|
+
// Fraunhofer IOSB, Ettlingen, Germany
|
|
10
|
+
//
|
|
11
|
+
|
|
12
|
+
#ifndef BOOST_UBLAS_TENSOR_MULTI_INDEX_UTILITY_HPP
|
|
13
|
+
#define BOOST_UBLAS_TENSOR_MULTI_INDEX_UTILITY_HPP
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
#include <tuple>
|
|
17
|
+
#include <type_traits>
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
namespace boost {
|
|
21
|
+
namespace numeric {
|
|
22
|
+
namespace ublas {
|
|
23
|
+
namespace detail {
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
template<class ... index_types>
|
|
27
|
+
struct has_index_impl;
|
|
28
|
+
|
|
29
|
+
template<class itype_left, class itype_right>
|
|
30
|
+
struct has_index_impl<itype_left, itype_right>
|
|
31
|
+
{
|
|
32
|
+
static constexpr bool value = itype_left::value == itype_right::value;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
template<class itype_left>
|
|
36
|
+
struct has_index_impl <itype_left, std::tuple<> >
|
|
37
|
+
{
|
|
38
|
+
static constexpr bool value = false;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
template<class itype_left, class itype_right>
|
|
42
|
+
struct has_index_impl <itype_left, std::tuple<itype_right> >
|
|
43
|
+
{
|
|
44
|
+
static constexpr bool value = has_index_impl<itype_left,itype_right>::value;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
template<class itype_left, class itype_right, class ... index_types>
|
|
48
|
+
struct has_index_impl <itype_left, std::tuple<itype_right, index_types...> >
|
|
49
|
+
{
|
|
50
|
+
using next_type = has_index_impl<itype_left, std::tuple<index_types...>>;
|
|
51
|
+
static constexpr bool value = has_index_impl<itype_left,itype_right>::value || next_type::value;
|
|
52
|
+
};
|
|
53
|
+
} // namespace detail
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
/** @brief has_index is true if index occurs once or more in a multi-index
|
|
58
|
+
*
|
|
59
|
+
* @note a multi-index represents as tuple of single indexes of type boost::numeric::ublas::index::index_type
|
|
60
|
+
*
|
|
61
|
+
* @code auto has_index_value = has_index<index_type<1>, std::tuple<index_type<2>,index_type<1>> >::value; @endcode
|
|
62
|
+
*
|
|
63
|
+
* @tparam index_type type of index
|
|
64
|
+
* @tparam tuple_type type of std::tuple representing a multi-index
|
|
65
|
+
*/
|
|
66
|
+
template<class index_type, class tuple_type>
|
|
67
|
+
struct has_index
|
|
68
|
+
{
|
|
69
|
+
static constexpr bool value = detail::has_index_impl<std::decay_t<index_type>,std::decay_t<tuple_type>>::value;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
} // namespace ublas
|
|
73
|
+
} // namespace numeric
|
|
74
|
+
} // namespace boost
|
|
75
|
+
|
|
76
|
+
////////////////////////////////////////////////
|
|
77
|
+
////////////////////////////////////////////////
|
|
78
|
+
|
|
79
|
+
namespace boost {
|
|
80
|
+
namespace numeric {
|
|
81
|
+
namespace ublas {
|
|
82
|
+
namespace detail {
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
template<class ... index_types>
|
|
86
|
+
struct valid_multi_index_impl;
|
|
87
|
+
|
|
88
|
+
template<>
|
|
89
|
+
struct valid_multi_index_impl<std::tuple<>>
|
|
90
|
+
{
|
|
91
|
+
static constexpr bool value = true;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
template<class itype>
|
|
95
|
+
struct valid_multi_index_impl<std::tuple<itype>>
|
|
96
|
+
{
|
|
97
|
+
static constexpr bool value = true;
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
template<class itype, class ... index_types>
|
|
102
|
+
struct valid_multi_index_impl<std::tuple<itype,index_types...>>
|
|
103
|
+
{
|
|
104
|
+
using ttype = std::tuple<index_types...>;
|
|
105
|
+
using has_index_type = has_index<itype, ttype>;
|
|
106
|
+
|
|
107
|
+
static constexpr bool is_index_zero = itype::value==0ul;
|
|
108
|
+
static constexpr bool has_index_value = has_index_type::value && !is_index_zero;
|
|
109
|
+
static constexpr bool value = !has_index_value && valid_multi_index_impl<ttype>::value;
|
|
110
|
+
};
|
|
111
|
+
} // namespace detail
|
|
112
|
+
|
|
113
|
+
/** @brief valid_multi_index is true if indexes occur only once in a multi-index
|
|
114
|
+
*
|
|
115
|
+
* @note a multi-index represents as tuple of single indexes of type boost::numeric::ublas::index::index_type
|
|
116
|
+
*
|
|
117
|
+
* @code auto valid = valid_multi_index< std::tuple<index_type<2>,index_type<1>> >::value;
|
|
118
|
+
* @endcode
|
|
119
|
+
*
|
|
120
|
+
* @tparam tuple_type type of std::tuple representing a multi-index
|
|
121
|
+
*/
|
|
122
|
+
template<class tupe_type>
|
|
123
|
+
struct valid_multi_index
|
|
124
|
+
{
|
|
125
|
+
static constexpr bool value = detail::valid_multi_index_impl<std::decay_t<tupe_type>>::value;
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
} // namespace ublas
|
|
129
|
+
} // namespace numeric
|
|
130
|
+
} // namespace boost
|
|
131
|
+
|
|
132
|
+
////////////////////////////////////////////////
|
|
133
|
+
////////////////////////////////////////////////
|
|
134
|
+
|
|
135
|
+
namespace boost {
|
|
136
|
+
namespace numeric {
|
|
137
|
+
namespace ublas {
|
|
138
|
+
namespace detail {
|
|
139
|
+
|
|
140
|
+
template<class ... index_types >
|
|
141
|
+
struct number_equal_indexes_impl;
|
|
142
|
+
|
|
143
|
+
template<class ... itypes_right >
|
|
144
|
+
struct number_equal_indexes_impl < std::tuple<>, std::tuple<itypes_right...>>
|
|
145
|
+
{
|
|
146
|
+
static constexpr unsigned value = 0;
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
template<class itype, class ... itypes_left, class ... itypes_right>
|
|
150
|
+
struct number_equal_indexes_impl < std::tuple<itype,itypes_left...>, std::tuple<itypes_right...>>
|
|
151
|
+
{
|
|
152
|
+
using tuple_right = std::tuple<itypes_right...>;
|
|
153
|
+
using has_index_type = has_index<itype, tuple_right>;
|
|
154
|
+
|
|
155
|
+
static constexpr bool is_index_zero = itype::value==0ul;
|
|
156
|
+
static constexpr bool has_index_value = has_index_type::value && !is_index_zero;
|
|
157
|
+
|
|
158
|
+
using next_type = number_equal_indexes_impl< std::tuple<itypes_left...>, tuple_right >;
|
|
159
|
+
static constexpr unsigned v = has_index_value ? 1 : 0;
|
|
160
|
+
static constexpr unsigned value = v + next_type::value;
|
|
161
|
+
};
|
|
162
|
+
} // namespace detail
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
/** @brief number_equal_indexes contains the number of equal indexes of two multi-indexes
|
|
166
|
+
*
|
|
167
|
+
* @note a multi-index represents as tuple of single indexes of type boost::numeric::ublas::index::index_type
|
|
168
|
+
*
|
|
169
|
+
*
|
|
170
|
+
* @code auto num = number_equal_indexes<
|
|
171
|
+
* std::tuple<index_type<2>,index_type<1>>,
|
|
172
|
+
* std::tuple<index_type<1>,index_type<3>> >::value;
|
|
173
|
+
* @endcode
|
|
174
|
+
*
|
|
175
|
+
* @tparam tuple_type_left type of left std::tuple representing a multi-index
|
|
176
|
+
* @tparam tuple_type_right type of right std::tuple representing a multi-index
|
|
177
|
+
*/
|
|
178
|
+
template<class tuple_left, class tuple_right>
|
|
179
|
+
struct number_equal_indexes
|
|
180
|
+
{
|
|
181
|
+
static constexpr unsigned value =
|
|
182
|
+
detail::number_equal_indexes_impl< std::decay_t<tuple_left>, std::decay_t<tuple_right>>::value;
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
} // namespace ublas
|
|
186
|
+
} // namespace numeric
|
|
187
|
+
} // namespace boost
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
////////////////////////////////////////////////
|
|
191
|
+
////////////////////////////////////////////////
|
|
192
|
+
|
|
193
|
+
namespace boost {
|
|
194
|
+
namespace numeric {
|
|
195
|
+
namespace ublas {
|
|
196
|
+
namespace detail {
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
template<std::size_t r, std::size_t m, class itype, class ttype>
|
|
200
|
+
struct index_position_impl
|
|
201
|
+
{
|
|
202
|
+
static constexpr auto is_same = std::is_same< std::decay_t<itype>, std::decay_t<std::tuple_element_t<r,ttype>> >::value;
|
|
203
|
+
static constexpr auto value = is_same ? r : index_position_impl<r+1,m,itype,ttype>::value;
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
template<std::size_t m, class itype, class ttype>
|
|
209
|
+
struct index_position_impl < m, m, itype, ttype>
|
|
210
|
+
{
|
|
211
|
+
static constexpr auto value = std::tuple_size<ttype>::value;
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
} // namespace detail
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
/** @brief index_position contains the zero-based index position of an index type within a multi-index
|
|
219
|
+
*
|
|
220
|
+
* @note a multi-index represents as tuple of single indexes of type boost::numeric::ublas::index::index_type
|
|
221
|
+
*
|
|
222
|
+
* @code auto num = index_position<
|
|
223
|
+
* index_type<1>,
|
|
224
|
+
* std::tuple<index_type<2>,index_type<1>> >::value;
|
|
225
|
+
* @endcode
|
|
226
|
+
*
|
|
227
|
+
* @returns value returns 0 and N-1 if index_type is found, N otherwise where N is tuple_size_v<tuple_type>.
|
|
228
|
+
*
|
|
229
|
+
* @tparam index_type type of index
|
|
230
|
+
* @tparam tuple_type type of std::tuple that is searched for index
|
|
231
|
+
*/
|
|
232
|
+
template<class index_type, class tuple_type>
|
|
233
|
+
struct index_position
|
|
234
|
+
{
|
|
235
|
+
static constexpr auto value = detail::index_position_impl<0ul,std::tuple_size<tuple_type>::value,std::decay_t<index_type>,std::decay_t<tuple_type>>::value;
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
} // namespace ublas
|
|
239
|
+
} // namespace numeric
|
|
240
|
+
} // namespace boost
|
|
241
|
+
|
|
242
|
+
////////////////////////////////////////////////
|
|
243
|
+
////////////////////////////////////////////////
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
namespace boost {
|
|
247
|
+
namespace numeric {
|
|
248
|
+
namespace ublas {
|
|
249
|
+
namespace detail {
|
|
250
|
+
|
|
251
|
+
template<std::size_t r, std::size_t m>
|
|
252
|
+
struct index_position_pairs_impl
|
|
253
|
+
{
|
|
254
|
+
template<class array_type, class tuple_left, class tuple_right>
|
|
255
|
+
static constexpr void run(array_type& out, tuple_left const& lhs, tuple_right const& rhs, std::size_t p)
|
|
256
|
+
{
|
|
257
|
+
using index_type = std::tuple_element_t<r-1,tuple_left>;
|
|
258
|
+
using has_index_type = has_index<index_type, tuple_right>;
|
|
259
|
+
using get_index_type = index_position<index_type,tuple_right>;
|
|
260
|
+
using next_type = index_position_pairs_impl<r+1,m>;
|
|
261
|
+
if constexpr ( has_index_type::value && index_type::value != 0)
|
|
262
|
+
out[p++] = std::make_pair(r-1,get_index_type::value);
|
|
263
|
+
next_type::run( out, lhs, rhs, p );
|
|
264
|
+
}
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
template<std::size_t m>
|
|
268
|
+
struct index_position_pairs_impl<m,m>
|
|
269
|
+
{
|
|
270
|
+
template<class array_type, class tuple_left, class tuple_right>
|
|
271
|
+
static constexpr void run(array_type& out, tuple_left const& , tuple_right const& , std::size_t p)
|
|
272
|
+
{
|
|
273
|
+
using index_type = std::tuple_element_t<m-1,tuple_left>;
|
|
274
|
+
using has_index_type = has_index<index_type, tuple_right>;
|
|
275
|
+
using get_index_type = index_position<index_type, tuple_right>;
|
|
276
|
+
if constexpr ( has_index_type::value && index_type::value != 0 )
|
|
277
|
+
out[p] = std::make_pair(m-1,get_index_type::value);
|
|
278
|
+
}
|
|
279
|
+
};
|
|
280
|
+
|
|
281
|
+
template<std::size_t r>
|
|
282
|
+
struct index_position_pairs_impl<r,0>
|
|
283
|
+
{
|
|
284
|
+
template<class array_type, class tuple_left, class tuple_right>
|
|
285
|
+
static constexpr void run(array_type&, tuple_left const& , tuple_right const& , std::size_t)
|
|
286
|
+
{}
|
|
287
|
+
};
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
} // namespace detail
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
/** @brief index_position_pairs returns zero-based index positions of matching indexes of two multi-indexes
|
|
294
|
+
*
|
|
295
|
+
* @note a multi-index represents as tuple of single indexes of type boost::numeric::ublas::index::index_type
|
|
296
|
+
*
|
|
297
|
+
* @code auto pairs = index_position_pairs(std::make_tuple(_a,_b), std::make_tuple(_b,_c));
|
|
298
|
+
* @endcode
|
|
299
|
+
*
|
|
300
|
+
* @returns a std::array instance containing index position pairs of type std::pair<std::size_t, std::size_t>.
|
|
301
|
+
*
|
|
302
|
+
* @param lhs left std::tuple instance representing a multi-index
|
|
303
|
+
* @param rhs right std::tuple instance representing a multi-index
|
|
304
|
+
*/
|
|
305
|
+
template<class tuple_left, class tuple_right>
|
|
306
|
+
auto index_position_pairs(tuple_left const& lhs, tuple_right const& rhs)
|
|
307
|
+
{
|
|
308
|
+
using pair_type = std::pair<std::size_t,std::size_t>;
|
|
309
|
+
constexpr auto m = std::tuple_size<tuple_left >::value;
|
|
310
|
+
constexpr auto p = number_equal_indexes<tuple_left, tuple_right>::value;
|
|
311
|
+
auto array = std::array<pair_type,p>{};
|
|
312
|
+
detail::index_position_pairs_impl<1,m>::run(array, lhs, rhs,0);
|
|
313
|
+
return array;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
} // namespace ublas
|
|
317
|
+
} // namespace numeric
|
|
318
|
+
} // namespace boost
|
|
319
|
+
|
|
320
|
+
////////////////////////////
|
|
321
|
+
////////////////////////////
|
|
322
|
+
////////////////////////////
|
|
323
|
+
////////////////////////////
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
namespace boost {
|
|
327
|
+
namespace numeric {
|
|
328
|
+
namespace ublas {
|
|
329
|
+
namespace detail {
|
|
330
|
+
|
|
331
|
+
template<class array_type, std::size_t ... R>
|
|
332
|
+
constexpr auto array_to_vector_impl( array_type const& array, std::index_sequence<R...> )
|
|
333
|
+
{
|
|
334
|
+
return std::make_pair(
|
|
335
|
+
std::vector<std::size_t>{std::get<0>( std::get<R>(array) )+1 ...} ,
|
|
336
|
+
std::vector<std::size_t>{std::get<1>( std::get<R>(array) )+1 ...} );
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
} // namespace detail
|
|
340
|
+
|
|
341
|
+
|
|
342
|
+
/** @brief array_to_vector converts a std::array of zero-based index position pairs into two std::vector of one-based index positions
|
|
343
|
+
*
|
|
344
|
+
* @code auto two_vectors = array_to_vector(std::make_array ( std::make_pair(1,2), std::make_pair(3,4) ) ) ;
|
|
345
|
+
* @endcode
|
|
346
|
+
*
|
|
347
|
+
* @returns two std::vector of one-based index positions
|
|
348
|
+
*
|
|
349
|
+
* @param array std::array of zero-based index position pairs
|
|
350
|
+
*/
|
|
351
|
+
template<class pair_type, std::size_t N>
|
|
352
|
+
constexpr auto array_to_vector( std::array<pair_type,N> const& array)
|
|
353
|
+
{
|
|
354
|
+
constexpr auto sequence = std::make_index_sequence<N>{};
|
|
355
|
+
return detail::array_to_vector_impl( array, sequence );
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
|
|
359
|
+
} // namespace ublas
|
|
360
|
+
} // namespace numeric
|
|
361
|
+
} // namespace boost
|
|
362
|
+
|
|
363
|
+
|
|
364
|
+
#endif // _BOOST_UBLAS_TENSOR_MULTI_INDEX_UTILITY_HPP_
|