mqt-core 3.3.2__cp313-cp313t-win_amd64.whl
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.
- mqt/core/__init__.py +89 -0
- mqt/core/__main__.py +55 -0
- mqt/core/_commands.py +52 -0
- mqt/core/_compat/__init__.py +11 -0
- mqt/core/_compat/typing.py +29 -0
- mqt/core/_version.py +34 -0
- mqt/core/_version.pyi +12 -0
- mqt/core/bin/mqt-core-algorithms.dll +0 -0
- mqt/core/bin/mqt-core-circuit-optimizer.dll +0 -0
- mqt/core/bin/mqt-core-dd.dll +0 -0
- mqt/core/bin/mqt-core-ds.dll +0 -0
- mqt/core/bin/mqt-core-fomac.dll +0 -0
- mqt/core/bin/mqt-core-ir.dll +0 -0
- mqt/core/bin/mqt-core-na-fomac.dll +0 -0
- mqt/core/bin/mqt-core-na.dll +0 -0
- mqt/core/bin/mqt-core-qasm.dll +0 -0
- mqt/core/bin/mqt-core-qdmi-driver.dll +0 -0
- mqt/core/bin/mqt-core-qdmi-na-device.dll +0 -0
- mqt/core/bin/mqt-core-zx.dll +0 -0
- mqt/core/dd.cp313t-win_amd64.pyd +0 -0
- mqt/core/dd.pyi +1016 -0
- mqt/core/dd_evaluation.py +368 -0
- mqt/core/fomac.cp313t-win_amd64.pyd +0 -0
- mqt/core/fomac.pyi +125 -0
- mqt/core/include/mqt-core/algorithms/BernsteinVazirani.hpp +39 -0
- mqt/core/include/mqt-core/algorithms/GHZState.hpp +18 -0
- mqt/core/include/mqt-core/algorithms/Grover.hpp +33 -0
- mqt/core/include/mqt-core/algorithms/QFT.hpp +21 -0
- mqt/core/include/mqt-core/algorithms/QPE.hpp +30 -0
- mqt/core/include/mqt-core/algorithms/RandomCliffordCircuit.hpp +22 -0
- mqt/core/include/mqt-core/algorithms/StatePreparation.hpp +43 -0
- mqt/core/include/mqt-core/algorithms/WState.hpp +18 -0
- mqt/core/include/mqt-core/algorithms/mqt_core_algorithms_export.h +43 -0
- mqt/core/include/mqt-core/boost/config/abi/borland_prefix.hpp +27 -0
- mqt/core/include/mqt-core/boost/config/abi/borland_suffix.hpp +12 -0
- mqt/core/include/mqt-core/boost/config/abi/msvc_prefix.hpp +22 -0
- mqt/core/include/mqt-core/boost/config/abi/msvc_suffix.hpp +8 -0
- mqt/core/include/mqt-core/boost/config/abi_prefix.hpp +25 -0
- mqt/core/include/mqt-core/boost/config/abi_suffix.hpp +25 -0
- mqt/core/include/mqt-core/boost/config/assert_cxx03.hpp +211 -0
- mqt/core/include/mqt-core/boost/config/assert_cxx11.hpp +212 -0
- mqt/core/include/mqt-core/boost/config/assert_cxx14.hpp +47 -0
- mqt/core/include/mqt-core/boost/config/assert_cxx17.hpp +65 -0
- mqt/core/include/mqt-core/boost/config/assert_cxx20.hpp +59 -0
- mqt/core/include/mqt-core/boost/config/assert_cxx23.hpp +41 -0
- mqt/core/include/mqt-core/boost/config/assert_cxx98.hpp +23 -0
- mqt/core/include/mqt-core/boost/config/auto_link.hpp +525 -0
- mqt/core/include/mqt-core/boost/config/compiler/borland.hpp +342 -0
- mqt/core/include/mqt-core/boost/config/compiler/clang.hpp +370 -0
- mqt/core/include/mqt-core/boost/config/compiler/clang_version.hpp +89 -0
- mqt/core/include/mqt-core/boost/config/compiler/codegear.hpp +389 -0
- mqt/core/include/mqt-core/boost/config/compiler/comeau.hpp +59 -0
- mqt/core/include/mqt-core/boost/config/compiler/common_edg.hpp +185 -0
- mqt/core/include/mqt-core/boost/config/compiler/compaq_cxx.hpp +19 -0
- mqt/core/include/mqt-core/boost/config/compiler/cray.hpp +446 -0
- mqt/core/include/mqt-core/boost/config/compiler/diab.hpp +26 -0
- mqt/core/include/mqt-core/boost/config/compiler/digitalmars.hpp +146 -0
- mqt/core/include/mqt-core/boost/config/compiler/gcc.hpp +386 -0
- mqt/core/include/mqt-core/boost/config/compiler/gcc_xml.hpp +115 -0
- mqt/core/include/mqt-core/boost/config/compiler/greenhills.hpp +28 -0
- mqt/core/include/mqt-core/boost/config/compiler/hp_acc.hpp +153 -0
- mqt/core/include/mqt-core/boost/config/compiler/intel.hpp +577 -0
- mqt/core/include/mqt-core/boost/config/compiler/kai.hpp +33 -0
- mqt/core/include/mqt-core/boost/config/compiler/metrowerks.hpp +201 -0
- mqt/core/include/mqt-core/boost/config/compiler/mpw.hpp +143 -0
- mqt/core/include/mqt-core/boost/config/compiler/nvcc.hpp +64 -0
- mqt/core/include/mqt-core/boost/config/compiler/pathscale.hpp +141 -0
- mqt/core/include/mqt-core/boost/config/compiler/pgi.hpp +23 -0
- mqt/core/include/mqt-core/boost/config/compiler/sgi_mipspro.hpp +29 -0
- mqt/core/include/mqt-core/boost/config/compiler/sunpro_cc.hpp +225 -0
- mqt/core/include/mqt-core/boost/config/compiler/vacpp.hpp +189 -0
- mqt/core/include/mqt-core/boost/config/compiler/visualc.hpp +398 -0
- mqt/core/include/mqt-core/boost/config/compiler/xlcpp.hpp +303 -0
- mqt/core/include/mqt-core/boost/config/compiler/xlcpp_zos.hpp +174 -0
- mqt/core/include/mqt-core/boost/config/detail/cxx_composite.hpp +218 -0
- mqt/core/include/mqt-core/boost/config/detail/posix_features.hpp +95 -0
- mqt/core/include/mqt-core/boost/config/detail/select_compiler_config.hpp +157 -0
- mqt/core/include/mqt-core/boost/config/detail/select_platform_config.hpp +147 -0
- mqt/core/include/mqt-core/boost/config/detail/select_stdlib_config.hpp +121 -0
- mqt/core/include/mqt-core/boost/config/detail/suffix.hpp +1334 -0
- mqt/core/include/mqt-core/boost/config/header_deprecated.hpp +26 -0
- mqt/core/include/mqt-core/boost/config/helper_macros.hpp +37 -0
- mqt/core/include/mqt-core/boost/config/no_tr1/cmath.hpp +28 -0
- mqt/core/include/mqt-core/boost/config/no_tr1/complex.hpp +28 -0
- mqt/core/include/mqt-core/boost/config/no_tr1/functional.hpp +28 -0
- mqt/core/include/mqt-core/boost/config/no_tr1/memory.hpp +28 -0
- mqt/core/include/mqt-core/boost/config/no_tr1/utility.hpp +28 -0
- mqt/core/include/mqt-core/boost/config/platform/aix.hpp +33 -0
- mqt/core/include/mqt-core/boost/config/platform/amigaos.hpp +15 -0
- mqt/core/include/mqt-core/boost/config/platform/beos.hpp +26 -0
- mqt/core/include/mqt-core/boost/config/platform/bsd.hpp +83 -0
- mqt/core/include/mqt-core/boost/config/platform/cloudabi.hpp +18 -0
- mqt/core/include/mqt-core/boost/config/platform/cray.hpp +18 -0
- mqt/core/include/mqt-core/boost/config/platform/cygwin.hpp +71 -0
- mqt/core/include/mqt-core/boost/config/platform/haiku.hpp +31 -0
- mqt/core/include/mqt-core/boost/config/platform/hpux.hpp +87 -0
- mqt/core/include/mqt-core/boost/config/platform/irix.hpp +31 -0
- mqt/core/include/mqt-core/boost/config/platform/linux.hpp +106 -0
- mqt/core/include/mqt-core/boost/config/platform/macos.hpp +87 -0
- mqt/core/include/mqt-core/boost/config/platform/qnxnto.hpp +31 -0
- mqt/core/include/mqt-core/boost/config/platform/solaris.hpp +31 -0
- mqt/core/include/mqt-core/boost/config/platform/symbian.hpp +97 -0
- mqt/core/include/mqt-core/boost/config/platform/vms.hpp +25 -0
- mqt/core/include/mqt-core/boost/config/platform/vxworks.hpp +422 -0
- mqt/core/include/mqt-core/boost/config/platform/wasm.hpp +23 -0
- mqt/core/include/mqt-core/boost/config/platform/win32.hpp +90 -0
- mqt/core/include/mqt-core/boost/config/platform/zos.hpp +32 -0
- mqt/core/include/mqt-core/boost/config/pragma_message.hpp +31 -0
- mqt/core/include/mqt-core/boost/config/requires_threads.hpp +92 -0
- mqt/core/include/mqt-core/boost/config/stdlib/dinkumware.hpp +324 -0
- mqt/core/include/mqt-core/boost/config/stdlib/libcomo.hpp +93 -0
- mqt/core/include/mqt-core/boost/config/stdlib/libcpp.hpp +180 -0
- mqt/core/include/mqt-core/boost/config/stdlib/libstdcpp3.hpp +482 -0
- mqt/core/include/mqt-core/boost/config/stdlib/modena.hpp +79 -0
- mqt/core/include/mqt-core/boost/config/stdlib/msl.hpp +98 -0
- mqt/core/include/mqt-core/boost/config/stdlib/roguewave.hpp +208 -0
- mqt/core/include/mqt-core/boost/config/stdlib/sgi.hpp +168 -0
- mqt/core/include/mqt-core/boost/config/stdlib/stlport.hpp +258 -0
- mqt/core/include/mqt-core/boost/config/stdlib/vacpp.hpp +74 -0
- mqt/core/include/mqt-core/boost/config/stdlib/xlcpp_zos.hpp +61 -0
- mqt/core/include/mqt-core/boost/config/user.hpp +133 -0
- mqt/core/include/mqt-core/boost/config/warning_disable.hpp +47 -0
- mqt/core/include/mqt-core/boost/config/workaround.hpp +305 -0
- mqt/core/include/mqt-core/boost/config.hpp +67 -0
- mqt/core/include/mqt-core/boost/cstdint.hpp +556 -0
- mqt/core/include/mqt-core/boost/cxx11_char_types.hpp +70 -0
- mqt/core/include/mqt-core/boost/detail/workaround.hpp +10 -0
- mqt/core/include/mqt-core/boost/limits.hpp +146 -0
- mqt/core/include/mqt-core/boost/multiprecision/complex128.hpp +24 -0
- mqt/core/include/mqt-core/boost/multiprecision/complex_adaptor.hpp +1046 -0
- mqt/core/include/mqt-core/boost/multiprecision/concepts/mp_number_archetypes.hpp +257 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float/io.hpp +698 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float/transcendental.hpp +157 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float.hpp +2297 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_complex.hpp +12 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_dec_float.hpp +3690 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/add.hpp +368 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/add_unsigned.hpp +387 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/bitwise.hpp +889 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/checked.hpp +178 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/comparison.hpp +374 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/cpp_int_config.hpp +161 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/divide.hpp +703 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/import_export.hpp +248 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/intel_intrinsics.hpp +138 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/limits.hpp +282 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/literals.hpp +295 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/misc.hpp +1457 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/multiply.hpp +848 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/serialize.hpp +211 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/value_pack.hpp +42 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int.hpp +2360 -0
- mqt/core/include/mqt-core/boost/multiprecision/debug_adaptor.hpp +760 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/assert.hpp +29 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/atomic.hpp +62 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/bitscan.hpp +317 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/check_cpp11_config.hpp +64 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/constexpr.hpp +88 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/default_ops.hpp +4052 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/digits.hpp +49 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/dynamic_array.hpp +44 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/empty_value.hpp +87 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/endian.hpp +35 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/et_ops.hpp +1831 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/float128_functions.hpp +95 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/float_string_cvt.hpp +333 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/fpclassify.hpp +101 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/functions/constants.hpp +288 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/functions/pow.hpp +905 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/functions/trig.hpp +1058 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/functions/trunc.hpp +82 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/generic_interconvert.hpp +687 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/hash.hpp +56 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/integer_ops.hpp +474 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/itos.hpp +39 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/min_max.hpp +106 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/no_et_ops.hpp +661 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/no_exceptions_support.hpp +55 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/number_base.hpp +1656 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/number_compare.hpp +848 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/precision.hpp +313 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/rebind.hpp +19 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/standalone_config.hpp +148 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/static_array.hpp +42 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/string_helpers.hpp +48 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/tables.hpp +80 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/ublas_interop.hpp +75 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/uniform_int_distribution.hpp +212 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/utype_helper.hpp +374 -0
- mqt/core/include/mqt-core/boost/multiprecision/eigen.hpp +248 -0
- mqt/core/include/mqt-core/boost/multiprecision/float128.hpp +920 -0
- mqt/core/include/mqt-core/boost/multiprecision/fwd.hpp +268 -0
- mqt/core/include/mqt-core/boost/multiprecision/gmp.hpp +4060 -0
- mqt/core/include/mqt-core/boost/multiprecision/integer.hpp +363 -0
- mqt/core/include/mqt-core/boost/multiprecision/logged_adaptor.hpp +834 -0
- mqt/core/include/mqt-core/boost/multiprecision/miller_rabin.hpp +221 -0
- mqt/core/include/mqt-core/boost/multiprecision/mpc.hpp +1721 -0
- mqt/core/include/mqt-core/boost/multiprecision/mpfi.hpp +2559 -0
- mqt/core/include/mqt-core/boost/multiprecision/mpfr.hpp +3644 -0
- mqt/core/include/mqt-core/boost/multiprecision/number.hpp +2500 -0
- mqt/core/include/mqt-core/boost/multiprecision/random.hpp +23 -0
- mqt/core/include/mqt-core/boost/multiprecision/rational_adaptor.hpp +1289 -0
- mqt/core/include/mqt-core/boost/multiprecision/tommath.hpp +1034 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/explicit_conversion.hpp +67 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/extract_exponent_type.hpp +28 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/is_backend.hpp +91 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/is_byte_container.hpp +51 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/is_complex.hpp +22 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/is_convertible_arithmetic.hpp +51 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/is_restricted_conversion.hpp +47 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/is_variable_precision.hpp +25 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/max_digits10.hpp +79 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/std_integer_traits.hpp +90 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/transcendental_reduction_type.hpp +21 -0
- mqt/core/include/mqt-core/boost/version.hpp +32 -0
- mqt/core/include/mqt-core/circuit_optimizer/CircuitOptimizer.hpp +119 -0
- mqt/core/include/mqt-core/circuit_optimizer/mqt_core_circuit_optimizer_export.h +43 -0
- mqt/core/include/mqt-core/datastructures/DirectedAcyclicGraph.hpp +117 -0
- mqt/core/include/mqt-core/datastructures/DirectedGraph.hpp +158 -0
- mqt/core/include/mqt-core/datastructures/DisjointSet.hpp +50 -0
- mqt/core/include/mqt-core/datastructures/Layer.hpp +172 -0
- mqt/core/include/mqt-core/datastructures/SymmetricMatrix.hpp +57 -0
- mqt/core/include/mqt-core/datastructures/UndirectedGraph.hpp +227 -0
- mqt/core/include/mqt-core/datastructures/mqt_core_ds_export.h +43 -0
- mqt/core/include/mqt-core/dd/Approximation.hpp +45 -0
- mqt/core/include/mqt-core/dd/CachedEdge.hpp +174 -0
- mqt/core/include/mqt-core/dd/Complex.hpp +165 -0
- mqt/core/include/mqt-core/dd/ComplexNumbers.hpp +150 -0
- mqt/core/include/mqt-core/dd/ComplexValue.hpp +184 -0
- mqt/core/include/mqt-core/dd/ComputeTable.hpp +183 -0
- mqt/core/include/mqt-core/dd/DDDefinitions.hpp +139 -0
- mqt/core/include/mqt-core/dd/DDpackageConfig.hpp +104 -0
- mqt/core/include/mqt-core/dd/DensityNoiseTable.hpp +114 -0
- mqt/core/include/mqt-core/dd/Edge.hpp +416 -0
- mqt/core/include/mqt-core/dd/Export.hpp +438 -0
- mqt/core/include/mqt-core/dd/FunctionalityConstruction.hpp +75 -0
- mqt/core/include/mqt-core/dd/GateMatrixDefinitions.hpp +43 -0
- mqt/core/include/mqt-core/dd/LinkedListBase.hpp +45 -0
- mqt/core/include/mqt-core/dd/MemoryManager.hpp +193 -0
- mqt/core/include/mqt-core/dd/Node.hpp +223 -0
- mqt/core/include/mqt-core/dd/NoiseFunctionality.hpp +144 -0
- mqt/core/include/mqt-core/dd/Operations.hpp +306 -0
- mqt/core/include/mqt-core/dd/Package.hpp +2036 -0
- mqt/core/include/mqt-core/dd/Package_fwd.hpp +22 -0
- mqt/core/include/mqt-core/dd/RealNumber.hpp +255 -0
- mqt/core/include/mqt-core/dd/RealNumberUniqueTable.hpp +217 -0
- mqt/core/include/mqt-core/dd/Simulation.hpp +98 -0
- mqt/core/include/mqt-core/dd/StateGeneration.hpp +143 -0
- mqt/core/include/mqt-core/dd/StochasticNoiseOperationTable.hpp +88 -0
- mqt/core/include/mqt-core/dd/UnaryComputeTable.hpp +121 -0
- mqt/core/include/mqt-core/dd/UniqueTable.hpp +243 -0
- mqt/core/include/mqt-core/dd/mqt_core_dd_export.h +43 -0
- mqt/core/include/mqt-core/dd/statistics/MemoryManagerStatistics.hpp +84 -0
- mqt/core/include/mqt-core/dd/statistics/PackageStatistics.hpp +55 -0
- mqt/core/include/mqt-core/dd/statistics/Statistics.hpp +48 -0
- mqt/core/include/mqt-core/dd/statistics/TableStatistics.hpp +79 -0
- mqt/core/include/mqt-core/dd/statistics/UniqueTableStatistics.hpp +31 -0
- mqt/core/include/mqt-core/fomac/FoMaC.hpp +568 -0
- mqt/core/include/mqt-core/ir/Definitions.hpp +108 -0
- mqt/core/include/mqt-core/ir/Permutation.hpp +213 -0
- mqt/core/include/mqt-core/ir/QuantumComputation.hpp +596 -0
- mqt/core/include/mqt-core/ir/Register.hpp +125 -0
- mqt/core/include/mqt-core/ir/mqt_core_ir_export.h +43 -0
- mqt/core/include/mqt-core/ir/operations/AodOperation.hpp +92 -0
- mqt/core/include/mqt-core/ir/operations/CompoundOperation.hpp +212 -0
- mqt/core/include/mqt-core/ir/operations/Control.hpp +142 -0
- mqt/core/include/mqt-core/ir/operations/Expression.hpp +847 -0
- mqt/core/include/mqt-core/ir/operations/IfElseOperation.hpp +169 -0
- mqt/core/include/mqt-core/ir/operations/NonUnitaryOperation.hpp +118 -0
- mqt/core/include/mqt-core/ir/operations/OpType.hpp +120 -0
- mqt/core/include/mqt-core/ir/operations/OpType.inc +76 -0
- mqt/core/include/mqt-core/ir/operations/Operation.hpp +247 -0
- mqt/core/include/mqt-core/ir/operations/StandardOperation.hpp +140 -0
- mqt/core/include/mqt-core/ir/operations/SymbolicOperation.hpp +144 -0
- mqt/core/include/mqt-core/mqt_na_qdmi/device.h +602 -0
- mqt/core/include/mqt-core/mqt_na_qdmi/types.h +78 -0
- mqt/core/include/mqt-core/na/NAComputation.hpp +185 -0
- mqt/core/include/mqt-core/na/device/Device.hpp +410 -0
- mqt/core/include/mqt-core/na/device/DeviceMemberInitializers.hpp +724 -0
- mqt/core/include/mqt-core/na/device/Generator.hpp +447 -0
- mqt/core/include/mqt-core/na/entities/Atom.hpp +62 -0
- mqt/core/include/mqt-core/na/entities/Location.hpp +154 -0
- mqt/core/include/mqt-core/na/entities/Zone.hpp +95 -0
- mqt/core/include/mqt-core/na/fomac/Device.hpp +169 -0
- mqt/core/include/mqt-core/na/mqt_core_na_export.h +43 -0
- mqt/core/include/mqt-core/na/operations/GlobalCZOp.hpp +38 -0
- mqt/core/include/mqt-core/na/operations/GlobalOp.hpp +58 -0
- mqt/core/include/mqt-core/na/operations/GlobalRYOp.hpp +42 -0
- mqt/core/include/mqt-core/na/operations/LoadOp.hpp +89 -0
- mqt/core/include/mqt-core/na/operations/LocalOp.hpp +56 -0
- mqt/core/include/mqt-core/na/operations/LocalRZOp.hpp +42 -0
- mqt/core/include/mqt-core/na/operations/LocalUOp.hpp +49 -0
- mqt/core/include/mqt-core/na/operations/MoveOp.hpp +66 -0
- mqt/core/include/mqt-core/na/operations/Op.hpp +62 -0
- mqt/core/include/mqt-core/na/operations/ShuttlingOp.hpp +51 -0
- mqt/core/include/mqt-core/na/operations/StoreOp.hpp +87 -0
- mqt/core/include/mqt-core/qasm3/Exception.hpp +85 -0
- mqt/core/include/mqt-core/qasm3/Gate.hpp +65 -0
- mqt/core/include/mqt-core/qasm3/Importer.hpp +192 -0
- mqt/core/include/mqt-core/qasm3/InstVisitor.hpp +145 -0
- mqt/core/include/mqt-core/qasm3/NestedEnvironment.hpp +41 -0
- mqt/core/include/mqt-core/qasm3/Parser.hpp +170 -0
- mqt/core/include/mqt-core/qasm3/Scanner.hpp +73 -0
- mqt/core/include/mqt-core/qasm3/Statement.hpp +486 -0
- mqt/core/include/mqt-core/qasm3/Statement_fwd.hpp +39 -0
- mqt/core/include/mqt-core/qasm3/StdGates.hpp +232 -0
- mqt/core/include/mqt-core/qasm3/Token.hpp +198 -0
- mqt/core/include/mqt-core/qasm3/Types.hpp +238 -0
- mqt/core/include/mqt-core/qasm3/Types_fwd.hpp +22 -0
- mqt/core/include/mqt-core/qasm3/mqt_core_qasm_export.h +43 -0
- mqt/core/include/mqt-core/qasm3/passes/CompilerPass.hpp +22 -0
- mqt/core/include/mqt-core/qasm3/passes/ConstEvalPass.hpp +102 -0
- mqt/core/include/mqt-core/qasm3/passes/TypeCheckPass.hpp +124 -0
- mqt/core/include/mqt-core/qdmi/Driver.hpp +431 -0
- mqt/core/include/mqt-core/zx/FunctionalityConstruction.hpp +125 -0
- mqt/core/include/mqt-core/zx/Rational.hpp +318 -0
- mqt/core/include/mqt-core/zx/Rules.hpp +132 -0
- mqt/core/include/mqt-core/zx/Simplify.hpp +182 -0
- mqt/core/include/mqt-core/zx/Utils.hpp +212 -0
- mqt/core/include/mqt-core/zx/ZXDefinitions.hpp +93 -0
- mqt/core/include/mqt-core/zx/ZXDiagram.hpp +480 -0
- mqt/core/include/mqt-core/zx/mqt_core_zx_export.h +43 -0
- mqt/core/include/nlohmann/adl_serializer.hpp +55 -0
- mqt/core/include/nlohmann/byte_container_with_subtype.hpp +103 -0
- mqt/core/include/nlohmann/detail/abi_macros.hpp +111 -0
- mqt/core/include/nlohmann/detail/conversions/from_json.hpp +577 -0
- mqt/core/include/nlohmann/detail/conversions/to_chars.hpp +1118 -0
- mqt/core/include/nlohmann/detail/conversions/to_json.hpp +479 -0
- mqt/core/include/nlohmann/detail/exceptions.hpp +291 -0
- mqt/core/include/nlohmann/detail/hash.hpp +129 -0
- mqt/core/include/nlohmann/detail/input/binary_reader.hpp +3068 -0
- mqt/core/include/nlohmann/detail/input/input_adapters.hpp +549 -0
- mqt/core/include/nlohmann/detail/input/json_sax.hpp +986 -0
- mqt/core/include/nlohmann/detail/input/lexer.hpp +1643 -0
- mqt/core/include/nlohmann/detail/input/parser.hpp +519 -0
- mqt/core/include/nlohmann/detail/input/position_t.hpp +37 -0
- mqt/core/include/nlohmann/detail/iterators/internal_iterator.hpp +35 -0
- mqt/core/include/nlohmann/detail/iterators/iter_impl.hpp +760 -0
- mqt/core/include/nlohmann/detail/iterators/iteration_proxy.hpp +235 -0
- mqt/core/include/nlohmann/detail/iterators/iterator_traits.hpp +61 -0
- mqt/core/include/nlohmann/detail/iterators/json_reverse_iterator.hpp +130 -0
- mqt/core/include/nlohmann/detail/iterators/primitive_iterator.hpp +132 -0
- mqt/core/include/nlohmann/detail/json_custom_base_class.hpp +39 -0
- mqt/core/include/nlohmann/detail/json_pointer.hpp +988 -0
- mqt/core/include/nlohmann/detail/json_ref.hpp +78 -0
- mqt/core/include/nlohmann/detail/macro_scope.hpp +595 -0
- mqt/core/include/nlohmann/detail/macro_unscope.hpp +46 -0
- mqt/core/include/nlohmann/detail/meta/call_std/begin.hpp +17 -0
- mqt/core/include/nlohmann/detail/meta/call_std/end.hpp +17 -0
- mqt/core/include/nlohmann/detail/meta/cpp_future.hpp +171 -0
- mqt/core/include/nlohmann/detail/meta/detected.hpp +70 -0
- mqt/core/include/nlohmann/detail/meta/identity_tag.hpp +21 -0
- mqt/core/include/nlohmann/detail/meta/is_sax.hpp +159 -0
- mqt/core/include/nlohmann/detail/meta/std_fs.hpp +29 -0
- mqt/core/include/nlohmann/detail/meta/type_traits.hpp +795 -0
- mqt/core/include/nlohmann/detail/meta/void_t.hpp +24 -0
- mqt/core/include/nlohmann/detail/output/binary_writer.hpp +1850 -0
- mqt/core/include/nlohmann/detail/output/output_adapters.hpp +147 -0
- mqt/core/include/nlohmann/detail/output/serializer.hpp +988 -0
- mqt/core/include/nlohmann/detail/string_concat.hpp +146 -0
- mqt/core/include/nlohmann/detail/string_escape.hpp +72 -0
- mqt/core/include/nlohmann/detail/string_utils.hpp +37 -0
- mqt/core/include/nlohmann/detail/value_t.hpp +118 -0
- mqt/core/include/nlohmann/json.hpp +5306 -0
- mqt/core/include/nlohmann/json_fwd.hpp +75 -0
- mqt/core/include/nlohmann/ordered_map.hpp +359 -0
- mqt/core/include/nlohmann/thirdparty/hedley/hedley.hpp +2045 -0
- mqt/core/include/nlohmann/thirdparty/hedley/hedley_undef.hpp +158 -0
- mqt/core/include/qdmi/qdmi/client.h +990 -0
- mqt/core/include/qdmi/qdmi/constants.h +1139 -0
- mqt/core/include/qdmi/qdmi/device.h +602 -0
- mqt/core/include/qdmi/qdmi/types.h +78 -0
- mqt/core/include/spdlog/async.h +99 -0
- mqt/core/include/spdlog/async_logger-inl.h +84 -0
- mqt/core/include/spdlog/async_logger.h +74 -0
- mqt/core/include/spdlog/cfg/argv.h +40 -0
- mqt/core/include/spdlog/cfg/env.h +36 -0
- mqt/core/include/spdlog/cfg/helpers-inl.h +107 -0
- mqt/core/include/spdlog/cfg/helpers.h +29 -0
- mqt/core/include/spdlog/common-inl.h +68 -0
- mqt/core/include/spdlog/common.h +406 -0
- mqt/core/include/spdlog/details/backtracer-inl.h +63 -0
- mqt/core/include/spdlog/details/backtracer.h +45 -0
- mqt/core/include/spdlog/details/circular_q.h +115 -0
- mqt/core/include/spdlog/details/console_globals.h +28 -0
- mqt/core/include/spdlog/details/file_helper-inl.h +153 -0
- mqt/core/include/spdlog/details/file_helper.h +61 -0
- mqt/core/include/spdlog/details/fmt_helper.h +141 -0
- mqt/core/include/spdlog/details/log_msg-inl.h +44 -0
- mqt/core/include/spdlog/details/log_msg.h +40 -0
- mqt/core/include/spdlog/details/log_msg_buffer-inl.h +54 -0
- mqt/core/include/spdlog/details/log_msg_buffer.h +32 -0
- mqt/core/include/spdlog/details/mpmc_blocking_q.h +177 -0
- mqt/core/include/spdlog/details/null_mutex.h +35 -0
- mqt/core/include/spdlog/details/os-inl.h +606 -0
- mqt/core/include/spdlog/details/os.h +127 -0
- mqt/core/include/spdlog/details/periodic_worker-inl.h +26 -0
- mqt/core/include/spdlog/details/periodic_worker.h +58 -0
- mqt/core/include/spdlog/details/registry-inl.h +270 -0
- mqt/core/include/spdlog/details/registry.h +131 -0
- mqt/core/include/spdlog/details/synchronous_factory.h +22 -0
- mqt/core/include/spdlog/details/tcp_client-windows.h +135 -0
- mqt/core/include/spdlog/details/tcp_client.h +127 -0
- mqt/core/include/spdlog/details/thread_pool-inl.h +126 -0
- mqt/core/include/spdlog/details/thread_pool.h +117 -0
- mqt/core/include/spdlog/details/udp_client-windows.h +98 -0
- mqt/core/include/spdlog/details/udp_client.h +81 -0
- mqt/core/include/spdlog/details/windows_include.h +11 -0
- mqt/core/include/spdlog/fmt/bin_to_hex.h +224 -0
- mqt/core/include/spdlog/fmt/bundled/args.h +220 -0
- mqt/core/include/spdlog/fmt/bundled/base.h +2989 -0
- mqt/core/include/spdlog/fmt/bundled/chrono.h +2330 -0
- mqt/core/include/spdlog/fmt/bundled/color.h +637 -0
- mqt/core/include/spdlog/fmt/bundled/compile.h +539 -0
- mqt/core/include/spdlog/fmt/bundled/core.h +5 -0
- mqt/core/include/spdlog/fmt/bundled/fmt.license.rst +27 -0
- mqt/core/include/spdlog/fmt/bundled/format-inl.h +1948 -0
- mqt/core/include/spdlog/fmt/bundled/format.h +4244 -0
- mqt/core/include/spdlog/fmt/bundled/os.h +427 -0
- mqt/core/include/spdlog/fmt/bundled/ostream.h +167 -0
- mqt/core/include/spdlog/fmt/bundled/printf.h +633 -0
- mqt/core/include/spdlog/fmt/bundled/ranges.h +850 -0
- mqt/core/include/spdlog/fmt/bundled/std.h +728 -0
- mqt/core/include/spdlog/fmt/bundled/xchar.h +369 -0
- mqt/core/include/spdlog/fmt/chrono.h +23 -0
- mqt/core/include/spdlog/fmt/compile.h +23 -0
- mqt/core/include/spdlog/fmt/fmt.h +30 -0
- mqt/core/include/spdlog/fmt/ostr.h +23 -0
- mqt/core/include/spdlog/fmt/ranges.h +23 -0
- mqt/core/include/spdlog/fmt/std.h +24 -0
- mqt/core/include/spdlog/fmt/xchar.h +23 -0
- mqt/core/include/spdlog/formatter.h +17 -0
- mqt/core/include/spdlog/fwd.h +18 -0
- mqt/core/include/spdlog/logger-inl.h +198 -0
- mqt/core/include/spdlog/logger.h +379 -0
- mqt/core/include/spdlog/mdc.h +52 -0
- mqt/core/include/spdlog/pattern_formatter-inl.h +1340 -0
- mqt/core/include/spdlog/pattern_formatter.h +118 -0
- mqt/core/include/spdlog/sinks/android_sink.h +137 -0
- mqt/core/include/spdlog/sinks/ansicolor_sink-inl.h +142 -0
- mqt/core/include/spdlog/sinks/ansicolor_sink.h +116 -0
- mqt/core/include/spdlog/sinks/base_sink-inl.h +59 -0
- mqt/core/include/spdlog/sinks/base_sink.h +51 -0
- mqt/core/include/spdlog/sinks/basic_file_sink-inl.h +48 -0
- mqt/core/include/spdlog/sinks/basic_file_sink.h +66 -0
- mqt/core/include/spdlog/sinks/callback_sink.h +56 -0
- mqt/core/include/spdlog/sinks/daily_file_sink.h +254 -0
- mqt/core/include/spdlog/sinks/dist_sink.h +81 -0
- mqt/core/include/spdlog/sinks/dup_filter_sink.h +91 -0
- mqt/core/include/spdlog/sinks/hourly_file_sink.h +193 -0
- mqt/core/include/spdlog/sinks/kafka_sink.h +119 -0
- mqt/core/include/spdlog/sinks/mongo_sink.h +108 -0
- mqt/core/include/spdlog/sinks/msvc_sink.h +68 -0
- mqt/core/include/spdlog/sinks/null_sink.h +41 -0
- mqt/core/include/spdlog/sinks/ostream_sink.h +43 -0
- mqt/core/include/spdlog/sinks/qt_sinks.h +304 -0
- mqt/core/include/spdlog/sinks/ringbuffer_sink.h +67 -0
- mqt/core/include/spdlog/sinks/rotating_file_sink-inl.h +179 -0
- mqt/core/include/spdlog/sinks/rotating_file_sink.h +93 -0
- mqt/core/include/spdlog/sinks/sink-inl.h +22 -0
- mqt/core/include/spdlog/sinks/sink.h +34 -0
- mqt/core/include/spdlog/sinks/stdout_color_sinks-inl.h +38 -0
- mqt/core/include/spdlog/sinks/stdout_color_sinks.h +49 -0
- mqt/core/include/spdlog/sinks/stdout_sinks-inl.h +127 -0
- mqt/core/include/spdlog/sinks/stdout_sinks.h +84 -0
- mqt/core/include/spdlog/sinks/syslog_sink.h +104 -0
- mqt/core/include/spdlog/sinks/systemd_sink.h +121 -0
- mqt/core/include/spdlog/sinks/tcp_sink.h +75 -0
- mqt/core/include/spdlog/sinks/udp_sink.h +69 -0
- mqt/core/include/spdlog/sinks/win_eventlog_sink.h +260 -0
- mqt/core/include/spdlog/sinks/wincolor_sink-inl.h +172 -0
- mqt/core/include/spdlog/sinks/wincolor_sink.h +82 -0
- mqt/core/include/spdlog/spdlog-inl.h +96 -0
- mqt/core/include/spdlog/spdlog.h +357 -0
- mqt/core/include/spdlog/stopwatch.h +66 -0
- mqt/core/include/spdlog/tweakme.h +148 -0
- mqt/core/include/spdlog/version.h +11 -0
- mqt/core/ir/__init__.pyi +2078 -0
- mqt/core/ir/operations.pyi +1011 -0
- mqt/core/ir/registers.pyi +91 -0
- mqt/core/ir/symbolic.pyi +177 -0
- mqt/core/ir.cp313t-win_amd64.pyd +0 -0
- mqt/core/lib/mqt-core-algorithms.lib +0 -0
- mqt/core/lib/mqt-core-circuit-optimizer.lib +0 -0
- mqt/core/lib/mqt-core-dd.lib +0 -0
- mqt/core/lib/mqt-core-ds.lib +0 -0
- mqt/core/lib/mqt-core-fomac.lib +0 -0
- mqt/core/lib/mqt-core-ir.lib +0 -0
- mqt/core/lib/mqt-core-na-fomac.lib +0 -0
- mqt/core/lib/mqt-core-na.lib +0 -0
- mqt/core/lib/mqt-core-qasm.lib +0 -0
- mqt/core/lib/mqt-core-qdmi-driver.lib +0 -0
- mqt/core/lib/mqt-core-qdmi-na-device-gen.lib +0 -0
- mqt/core/lib/mqt-core-qdmi-na-device.lib +0 -0
- mqt/core/lib/mqt-core-zx.lib +0 -0
- mqt/core/lib/pkgconfig/spdlog.pc +13 -0
- mqt/core/lib/spdlog.lib +0 -0
- mqt/core/na/__init__.py +12 -0
- mqt/core/na/fomac.cp313t-win_amd64.pyd +0 -0
- mqt/core/na/fomac.pyi +117 -0
- mqt/core/nlohmann_json.natvis +278 -0
- mqt/core/plugins/__init__.py +9 -0
- mqt/core/plugins/qiskit/__init__.py +19 -0
- mqt/core/plugins/qiskit/mqt_to_qiskit.py +420 -0
- mqt/core/plugins/qiskit/qiskit_to_mqt.py +562 -0
- mqt/core/py.typed +2 -0
- mqt/core/share/cmake/mqt-core/AddMQTPythonBinding.cmake +55 -0
- mqt/core/share/cmake/mqt-core/Cache.cmake +33 -0
- mqt/core/share/cmake/mqt-core/FindGMP.cmake +103 -0
- mqt/core/share/cmake/mqt-core/PackageAddTest.cmake +46 -0
- mqt/core/share/cmake/mqt-core/PreventInSourceBuilds.cmake +25 -0
- mqt/core/share/cmake/mqt-core/StandardProjectSettings.cmake +87 -0
- mqt/core/share/cmake/mqt-core/mqt-core-config-version.cmake +85 -0
- mqt/core/share/cmake/mqt-core/mqt-core-config.cmake +52 -0
- mqt/core/share/cmake/mqt-core/mqt-core-targets-release.cmake +141 -0
- mqt/core/share/cmake/mqt-core/mqt-core-targets.cmake +445 -0
- mqt/core/share/cmake/nlohmann_json/nlohmann_jsonConfig.cmake +15 -0
- mqt/core/share/cmake/nlohmann_json/nlohmann_jsonConfigVersion.cmake +20 -0
- mqt/core/share/cmake/nlohmann_json/nlohmann_jsonTargets.cmake +110 -0
- mqt/core/share/cmake/qdmi/Cache.cmake +44 -0
- mqt/core/share/cmake/qdmi/PrefixHandling.cmake +78 -0
- mqt/core/share/cmake/qdmi/prefix_defs.txt +26 -0
- mqt/core/share/cmake/qdmi/qdmi-config-version.cmake +85 -0
- mqt/core/share/cmake/qdmi/qdmi-config.cmake +42 -0
- mqt/core/share/cmake/qdmi/qdmi-targets.cmake +129 -0
- mqt/core/share/cmake/spdlog/spdlogConfig.cmake +44 -0
- mqt/core/share/cmake/spdlog/spdlogConfigTargets-release.cmake +19 -0
- mqt/core/share/cmake/spdlog/spdlogConfigTargets.cmake +121 -0
- mqt/core/share/cmake/spdlog/spdlogConfigVersion.cmake +65 -0
- mqt/core/share/pkgconfig/nlohmann_json.pc +7 -0
- mqt_core-3.3.2.dist-info/DELVEWHEEL +2 -0
- mqt_core-3.3.2.dist-info/METADATA +210 -0
- mqt_core-3.3.2.dist-info/RECORD +537 -0
- mqt_core-3.3.2.dist-info/WHEEL +5 -0
- mqt_core-3.3.2.dist-info/entry_points.txt +4 -0
- mqt_core-3.3.2.dist-info/licenses/LICENSE.md +22 -0
- mqt_core.libs/msvcp140.dll +0 -0
|
@@ -0,0 +1,848 @@
|
|
|
1
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
2
|
+
// Copyright 2012 John Maddock. Distributed under the Boost
|
|
3
|
+
// Software License, Version 1.0. (See accompanying file
|
|
4
|
+
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
5
|
+
|
|
6
|
+
#ifndef BOOST_MP_NUMBER_COMPARE_HPP
|
|
7
|
+
#define BOOST_MP_NUMBER_COMPARE_HPP
|
|
8
|
+
|
|
9
|
+
#include <boost/multiprecision/traits/is_backend.hpp>
|
|
10
|
+
#include <boost/multiprecision/detail/fpclassify.hpp>
|
|
11
|
+
|
|
12
|
+
//
|
|
13
|
+
// Comparison operators for number.
|
|
14
|
+
//
|
|
15
|
+
|
|
16
|
+
namespace boost { namespace multiprecision {
|
|
17
|
+
|
|
18
|
+
namespace default_ops {
|
|
19
|
+
|
|
20
|
+
//
|
|
21
|
+
// The dispatching mechanism used here to deal with differently typed arguments
|
|
22
|
+
// could be better replaced with enable_if overloads, but that breaks MSVC-12
|
|
23
|
+
// under strange and hard to reproduce circumstances.
|
|
24
|
+
//
|
|
25
|
+
template <class B>
|
|
26
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool eval_eq(const B& a, const B& b)
|
|
27
|
+
{
|
|
28
|
+
return a.compare(b) == 0;
|
|
29
|
+
}
|
|
30
|
+
template <class T, class U>
|
|
31
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool eval_eq_imp(const T& a, const U& b, const std::integral_constant<bool, true>&)
|
|
32
|
+
{
|
|
33
|
+
typename boost::multiprecision::detail::number_from_backend<T, U>::type t(b);
|
|
34
|
+
return eval_eq(a, t.backend());
|
|
35
|
+
}
|
|
36
|
+
template <class T, class U>
|
|
37
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool eval_eq_imp(const T& a, const U& b, const std::integral_constant<bool, false>&)
|
|
38
|
+
{
|
|
39
|
+
typename boost::multiprecision::detail::number_from_backend<U, T>::type t(a);
|
|
40
|
+
return eval_eq(t.backend(), b);
|
|
41
|
+
}
|
|
42
|
+
template <class T, class U>
|
|
43
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool eval_eq(const T& a, const U& b)
|
|
44
|
+
{
|
|
45
|
+
using tag_type = std::integral_constant<bool, boost::multiprecision::detail::is_first_backend<T, U>::value>;
|
|
46
|
+
return eval_eq_imp(a, b, tag_type());
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
template <class B>
|
|
50
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool eval_lt(const B& a, const B& b)
|
|
51
|
+
{
|
|
52
|
+
return a.compare(b) < 0;
|
|
53
|
+
}
|
|
54
|
+
template <class T, class U>
|
|
55
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool eval_lt_imp(const T& a, const U& b, const std::integral_constant<bool, true>&)
|
|
56
|
+
{
|
|
57
|
+
typename boost::multiprecision::detail::number_from_backend<T, U>::type t(b);
|
|
58
|
+
return eval_lt(a, t.backend());
|
|
59
|
+
}
|
|
60
|
+
template <class T, class U>
|
|
61
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool eval_lt_imp(const T& a, const U& b, const std::integral_constant<bool, false>&)
|
|
62
|
+
{
|
|
63
|
+
typename boost::multiprecision::detail::number_from_backend<U, T>::type t(a);
|
|
64
|
+
return eval_lt(t.backend(), b);
|
|
65
|
+
}
|
|
66
|
+
template <class T, class U>
|
|
67
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool eval_lt(const T& a, const U& b)
|
|
68
|
+
{
|
|
69
|
+
using tag_type = std::integral_constant<bool, boost::multiprecision::detail::is_first_backend<T, U>::value>;
|
|
70
|
+
return eval_lt_imp(a, b, tag_type());
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
template <class B>
|
|
74
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool eval_gt(const B& a, const B& b)
|
|
75
|
+
{
|
|
76
|
+
return a.compare(b) > 0;
|
|
77
|
+
}
|
|
78
|
+
template <class T, class U>
|
|
79
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool eval_gt_imp(const T& a, const U& b, const std::integral_constant<bool, true>&)
|
|
80
|
+
{
|
|
81
|
+
typename boost::multiprecision::detail::number_from_backend<T, U>::type t(b);
|
|
82
|
+
return eval_gt(a, t.backend());
|
|
83
|
+
}
|
|
84
|
+
template <class T, class U>
|
|
85
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool eval_gt_imp(const T& a, const U& b, const std::integral_constant<bool, false>&)
|
|
86
|
+
{
|
|
87
|
+
typename boost::multiprecision::detail::number_from_backend<U, T>::type t(a);
|
|
88
|
+
return eval_gt(t.backend(), b);
|
|
89
|
+
}
|
|
90
|
+
template <class T, class U>
|
|
91
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool eval_gt(const T& a, const U& b)
|
|
92
|
+
{
|
|
93
|
+
using tag_type = std::integral_constant<bool, boost::multiprecision::detail::is_first_backend<T, U>::value>;
|
|
94
|
+
return eval_gt_imp(a, b, tag_type());
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
} // namespace default_ops
|
|
98
|
+
|
|
99
|
+
namespace detail {
|
|
100
|
+
|
|
101
|
+
template <class Num, class Val>
|
|
102
|
+
struct is_valid_mixed_compare : public std::integral_constant<bool, false>
|
|
103
|
+
{};
|
|
104
|
+
|
|
105
|
+
template <class B, expression_template_option ET, class Val>
|
|
106
|
+
struct is_valid_mixed_compare<number<B, ET>, Val> : public std::is_convertible<Val, number<B, ET> >
|
|
107
|
+
{};
|
|
108
|
+
|
|
109
|
+
template <class B, expression_template_option ET>
|
|
110
|
+
struct is_valid_mixed_compare<number<B, ET>, number<B, ET> > : public std::integral_constant<bool, false>
|
|
111
|
+
{};
|
|
112
|
+
|
|
113
|
+
template <class B, expression_template_option ET, class tag, class Arg1, class Arg2, class Arg3, class Arg4>
|
|
114
|
+
struct is_valid_mixed_compare<number<B, ET>, expression<tag, Arg1, Arg2, Arg3, Arg4> >
|
|
115
|
+
: public std::is_convertible<expression<tag, Arg1, Arg2, Arg3, Arg4>, number<B, ET> >
|
|
116
|
+
{};
|
|
117
|
+
|
|
118
|
+
template <class tag, class Arg1, class Arg2, class Arg3, class Arg4, class B, expression_template_option ET>
|
|
119
|
+
struct is_valid_mixed_compare<expression<tag, Arg1, Arg2, Arg3, Arg4>, number<B, ET> >
|
|
120
|
+
: public std::is_convertible<expression<tag, Arg1, Arg2, Arg3, Arg4>, number<B, ET> >
|
|
121
|
+
{};
|
|
122
|
+
|
|
123
|
+
template <class Backend, expression_template_option ExpressionTemplates>
|
|
124
|
+
inline constexpr typename std::enable_if<number_category<Backend>::value != number_kind_floating_point, bool>::type is_unordered_value(const number<Backend, ExpressionTemplates>&)
|
|
125
|
+
{
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
template <class Backend, expression_template_option ExpressionTemplates>
|
|
129
|
+
inline constexpr typename std::enable_if<number_category<Backend>::value == number_kind_floating_point, bool>::type is_unordered_value(const number<Backend, ExpressionTemplates>& a)
|
|
130
|
+
{
|
|
131
|
+
using default_ops::eval_fpclassify;
|
|
132
|
+
return eval_fpclassify(a.backend()) == FP_NAN;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
template <class Arithmetic>
|
|
136
|
+
inline constexpr typename std::enable_if<number_category<Arithmetic>::value != number_kind_floating_point, bool>::type is_unordered_value(const Arithmetic&)
|
|
137
|
+
{
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
template <class Arithmetic>
|
|
141
|
+
inline
|
|
142
|
+
#ifndef BOOST_MP_NO_CONSTEXPR_DETECTION
|
|
143
|
+
BOOST_MP_CXX14_CONSTEXPR
|
|
144
|
+
#endif
|
|
145
|
+
typename std::enable_if < number_category < Arithmetic> ::value == number_kind_floating_point, bool> ::type
|
|
146
|
+
is_unordered_value(const Arithmetic& a)
|
|
147
|
+
{
|
|
148
|
+
#ifndef BOOST_MP_NO_CONSTEXPR_DETECTION
|
|
149
|
+
if (BOOST_MP_IS_CONST_EVALUATED(a))
|
|
150
|
+
{
|
|
151
|
+
return a != a;
|
|
152
|
+
}
|
|
153
|
+
else
|
|
154
|
+
#endif
|
|
155
|
+
{
|
|
156
|
+
return BOOST_MP_ISNAN(a);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
template <class T, class U>
|
|
161
|
+
inline constexpr bool is_unordered_comparison(const T& a, const U& b)
|
|
162
|
+
{
|
|
163
|
+
return is_unordered_value(a) || is_unordered_value(b);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
} // namespace detail
|
|
167
|
+
|
|
168
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Backend2, expression_template_option ExpressionTemplates2>
|
|
169
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool operator==(const number<Backend, ExpressionTemplates>& a, const number<Backend2, ExpressionTemplates2>& b)
|
|
170
|
+
{
|
|
171
|
+
using default_ops::eval_eq;
|
|
172
|
+
if (detail::is_unordered_comparison(a, b))
|
|
173
|
+
return false;
|
|
174
|
+
return eval_eq(a.backend(), b.backend());
|
|
175
|
+
}
|
|
176
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Arithmetic>
|
|
177
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value && !is_number_expression<Arithmetic>::value, bool>::type
|
|
178
|
+
operator==(const number<Backend, ExpressionTemplates>& a, const Arithmetic& b)
|
|
179
|
+
{
|
|
180
|
+
using default_ops::eval_eq;
|
|
181
|
+
if (detail::is_unordered_comparison(a, b))
|
|
182
|
+
return false;
|
|
183
|
+
return eval_eq(a.backend(), number<Backend, ExpressionTemplates>::canonical_value(b));
|
|
184
|
+
}
|
|
185
|
+
template <class Arithmetic, class Backend, expression_template_option ExpressionTemplates>
|
|
186
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value && !is_number_expression<Arithmetic>::value, bool>::type
|
|
187
|
+
operator==(const Arithmetic& a, const number<Backend, ExpressionTemplates>& b)
|
|
188
|
+
{
|
|
189
|
+
using default_ops::eval_eq;
|
|
190
|
+
if (detail::is_unordered_comparison(a, b))
|
|
191
|
+
return false;
|
|
192
|
+
return eval_eq(b.backend(), number<Backend, ExpressionTemplates>::canonical_value(a));
|
|
193
|
+
}
|
|
194
|
+
template <class Arithmetic, class Tag, class A1, class A2, class A3, class A4>
|
|
195
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
|
196
|
+
operator==(const Arithmetic& a, const detail::expression<Tag, A1, A2, A3, A4>& b)
|
|
197
|
+
{
|
|
198
|
+
using result_type = typename detail::expression<Tag, A1, A2, A3, A4>::result_type;
|
|
199
|
+
using default_ops::eval_eq;
|
|
200
|
+
result_type t(b);
|
|
201
|
+
if (detail::is_unordered_comparison(a, t))
|
|
202
|
+
return false;
|
|
203
|
+
return eval_eq(t.backend(), result_type::canonical_value(a));
|
|
204
|
+
}
|
|
205
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Tag, class A1, class A2, class A3, class A4>
|
|
206
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool operator==(const number<Backend, ExpressionTemplates>& a, const detail::expression<Tag, A1, A2, A3, A4>& b)
|
|
207
|
+
{
|
|
208
|
+
using result_type = typename detail::expression<Tag, A1, A2, A3, A4>::result_type;
|
|
209
|
+
using default_ops::eval_eq;
|
|
210
|
+
result_type t(b);
|
|
211
|
+
if (detail::is_unordered_comparison(a, t))
|
|
212
|
+
return false;
|
|
213
|
+
return eval_eq(t.backend(), a.backend());
|
|
214
|
+
}
|
|
215
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Arithmetic>
|
|
216
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
|
217
|
+
operator==(const detail::expression<Tag, A1, A2, A3, A4>& a, const Arithmetic& b)
|
|
218
|
+
{
|
|
219
|
+
using result_type = typename detail::expression<Tag, A1, A2, A3, A4>::result_type;
|
|
220
|
+
using default_ops::eval_eq;
|
|
221
|
+
result_type t(a);
|
|
222
|
+
if (detail::is_unordered_comparison(t, b))
|
|
223
|
+
return false;
|
|
224
|
+
return eval_eq(t.backend(), result_type::canonical_value(b));
|
|
225
|
+
}
|
|
226
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Backend, expression_template_option ExpressionTemplates>
|
|
227
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool operator==(const detail::expression<Tag, A1, A2, A3, A4>& a, const number<Backend, ExpressionTemplates>& b)
|
|
228
|
+
{
|
|
229
|
+
using result_type = typename detail::expression<Tag, A1, A2, A3, A4>::result_type;
|
|
230
|
+
using default_ops::eval_eq;
|
|
231
|
+
result_type t(a);
|
|
232
|
+
if (detail::is_unordered_comparison(t, b))
|
|
233
|
+
return false;
|
|
234
|
+
return eval_eq(t.backend(), b.backend());
|
|
235
|
+
}
|
|
236
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Tagb, class A1b, class A2b, class A3b, class A4b>
|
|
237
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<is_equivalent_number_type<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type>::value, bool>::type
|
|
238
|
+
operator==(const detail::expression<Tag, A1, A2, A3, A4>& a, const detail::expression<Tagb, A1b, A2b, A3b, A4b>& b)
|
|
239
|
+
{
|
|
240
|
+
using default_ops::eval_eq;
|
|
241
|
+
typename detail::expression<Tag, A1, A2, A3, A4>::result_type t(a);
|
|
242
|
+
typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type t2(b);
|
|
243
|
+
if (detail::is_unordered_comparison(t, t2))
|
|
244
|
+
return false;
|
|
245
|
+
return eval_eq(t.backend(), t2.backend());
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Backend2, expression_template_option ExpressionTemplates2>
|
|
249
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool operator!=(const number<Backend, ExpressionTemplates>& a, const number<Backend2, ExpressionTemplates2>& b)
|
|
250
|
+
{
|
|
251
|
+
using default_ops::eval_eq;
|
|
252
|
+
if (detail::is_unordered_comparison(a, b))
|
|
253
|
+
return true;
|
|
254
|
+
return !eval_eq(a.backend(), b.backend());
|
|
255
|
+
}
|
|
256
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Arithmetic>
|
|
257
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value && !is_number_expression<Arithmetic>::value, bool>::type
|
|
258
|
+
operator!=(const number<Backend, ExpressionTemplates>& a, const Arithmetic& b)
|
|
259
|
+
{
|
|
260
|
+
using default_ops::eval_eq;
|
|
261
|
+
if (detail::is_unordered_comparison(a, b))
|
|
262
|
+
return true;
|
|
263
|
+
return !eval_eq(a.backend(), number<Backend, et_on>::canonical_value(b));
|
|
264
|
+
}
|
|
265
|
+
template <class Arithmetic, class Backend, expression_template_option ExpressionTemplates>
|
|
266
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value && !is_number_expression<Arithmetic>::value, bool>::type
|
|
267
|
+
operator!=(const Arithmetic& a, const number<Backend, ExpressionTemplates>& b)
|
|
268
|
+
{
|
|
269
|
+
using default_ops::eval_eq;
|
|
270
|
+
if (detail::is_unordered_comparison(a, b))
|
|
271
|
+
return true;
|
|
272
|
+
return !eval_eq(b.backend(), number<Backend, et_on>::canonical_value(a));
|
|
273
|
+
}
|
|
274
|
+
template <class Arithmetic, class Tag, class A1, class A2, class A3, class A4>
|
|
275
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
|
276
|
+
operator!=(const Arithmetic& a, const detail::expression<Tag, A1, A2, A3, A4>& b)
|
|
277
|
+
{
|
|
278
|
+
using result_type = typename detail::expression<Tag, A1, A2, A3, A4>::result_type;
|
|
279
|
+
using default_ops::eval_eq;
|
|
280
|
+
result_type t(b);
|
|
281
|
+
if (detail::is_unordered_comparison(a, t))
|
|
282
|
+
return true;
|
|
283
|
+
return !eval_eq(t.backend(), result_type::canonical_value(a));
|
|
284
|
+
}
|
|
285
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Tag, class A1, class A2, class A3, class A4>
|
|
286
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool operator!=(const number<Backend, ExpressionTemplates>& a, const detail::expression<Tag, A1, A2, A3, A4>& b)
|
|
287
|
+
{
|
|
288
|
+
using result_type = typename detail::expression<Tag, A1, A2, A3, A4>::result_type;
|
|
289
|
+
using default_ops::eval_eq;
|
|
290
|
+
result_type t(b);
|
|
291
|
+
if (detail::is_unordered_comparison(a, t))
|
|
292
|
+
return true;
|
|
293
|
+
return !eval_eq(t.backend(), a.backend());
|
|
294
|
+
}
|
|
295
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Arithmetic>
|
|
296
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
|
297
|
+
operator!=(const detail::expression<Tag, A1, A2, A3, A4>& a, const Arithmetic& b)
|
|
298
|
+
{
|
|
299
|
+
using result_type = typename detail::expression<Tag, A1, A2, A3, A4>::result_type;
|
|
300
|
+
using default_ops::eval_eq;
|
|
301
|
+
result_type t(a);
|
|
302
|
+
if (detail::is_unordered_comparison(t, b))
|
|
303
|
+
return true;
|
|
304
|
+
return !eval_eq(t.backend(), result_type::canonical_value(b));
|
|
305
|
+
}
|
|
306
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Backend, expression_template_option ExpressionTemplates>
|
|
307
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool operator!=(const detail::expression<Tag, A1, A2, A3, A4>& a, const number<Backend, ExpressionTemplates>& b)
|
|
308
|
+
{
|
|
309
|
+
using result_type = typename detail::expression<Tag, A1, A2, A3, A4>::result_type;
|
|
310
|
+
using default_ops::eval_eq;
|
|
311
|
+
result_type t(a);
|
|
312
|
+
if (detail::is_unordered_comparison(t, b))
|
|
313
|
+
return true;
|
|
314
|
+
return !eval_eq(t.backend(), result_type::canonical_value(b));
|
|
315
|
+
}
|
|
316
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Tagb, class A1b, class A2b, class A3b, class A4b>
|
|
317
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<is_equivalent_number_type<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type>::value, bool>::type
|
|
318
|
+
operator!=(const detail::expression<Tag, A1, A2, A3, A4>& a, const detail::expression<Tagb, A1b, A2b, A3b, A4b>& b)
|
|
319
|
+
{
|
|
320
|
+
using default_ops::eval_eq;
|
|
321
|
+
typename detail::expression<Tag, A1, A2, A3, A4>::result_type t(a);
|
|
322
|
+
typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type t2(b);
|
|
323
|
+
if (detail::is_unordered_comparison(t, t2))
|
|
324
|
+
return true;
|
|
325
|
+
return !eval_eq(t.backend(), t2.backend());
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Backend2, expression_template_option ExpressionTemplates2>
|
|
329
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<(number_category<Backend>::value != number_kind_complex) && (number_category<Backend2>::value != number_kind_complex), bool>::type
|
|
330
|
+
operator<(const number<Backend, ExpressionTemplates>& a, const number<Backend2, ExpressionTemplates2>& b)
|
|
331
|
+
{
|
|
332
|
+
using default_ops::eval_lt;
|
|
333
|
+
if (detail::is_unordered_comparison(a, b))
|
|
334
|
+
return false;
|
|
335
|
+
return eval_lt(a.backend(), b.backend());
|
|
336
|
+
}
|
|
337
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Arithmetic>
|
|
338
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value && (number_category<Backend>::value != number_kind_complex) && !is_number_expression<Arithmetic>::value, bool>::type
|
|
339
|
+
operator<(const number<Backend, ExpressionTemplates>& a, const Arithmetic& b)
|
|
340
|
+
{
|
|
341
|
+
using default_ops::eval_lt;
|
|
342
|
+
if (detail::is_unordered_comparison(a, b))
|
|
343
|
+
return false;
|
|
344
|
+
return eval_lt(a.backend(), number<Backend, ExpressionTemplates>::canonical_value(b));
|
|
345
|
+
}
|
|
346
|
+
template <class Arithmetic, class Backend, expression_template_option ExpressionTemplates>
|
|
347
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value && (number_category<Backend>::value != number_kind_complex) && !is_number_expression<Arithmetic>::value, bool>::type
|
|
348
|
+
operator<(const Arithmetic& a, const number<Backend, ExpressionTemplates>& b)
|
|
349
|
+
{
|
|
350
|
+
using default_ops::eval_gt;
|
|
351
|
+
if (detail::is_unordered_comparison(a, b))
|
|
352
|
+
return false;
|
|
353
|
+
return eval_gt(b.backend(), number<Backend, ExpressionTemplates>::canonical_value(a));
|
|
354
|
+
}
|
|
355
|
+
template <class Arithmetic, class Tag, class A1, class A2, class A3, class A4>
|
|
356
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value && (number_category<typename detail::expression<Tag, A1, A2, A3, A4>::result_type>::value != number_kind_complex), bool>::type
|
|
357
|
+
operator<(const Arithmetic& a, const detail::expression<Tag, A1, A2, A3, A4>& b)
|
|
358
|
+
{
|
|
359
|
+
using result_type = typename detail::expression<Tag, A1, A2, A3, A4>::result_type;
|
|
360
|
+
using default_ops::eval_gt;
|
|
361
|
+
result_type t(b);
|
|
362
|
+
if (detail::is_unordered_comparison(a, t))
|
|
363
|
+
return false;
|
|
364
|
+
return eval_gt(t.backend(), result_type::canonical_value(a));
|
|
365
|
+
}
|
|
366
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Tag, class A1, class A2, class A3, class A4>
|
|
367
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool operator<(const number<Backend, ExpressionTemplates>& a, const detail::expression<Tag, A1, A2, A3, A4>& b)
|
|
368
|
+
{
|
|
369
|
+
using result_type = typename detail::expression<Tag, A1, A2, A3, A4>::result_type;
|
|
370
|
+
using default_ops::eval_gt;
|
|
371
|
+
result_type t(b);
|
|
372
|
+
return a < t;
|
|
373
|
+
}
|
|
374
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Arithmetic>
|
|
375
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value && (number_category<typename detail::expression<Tag, A1, A2, A3, A4>::result_type>::value != number_kind_complex), bool>::type
|
|
376
|
+
operator<(const detail::expression<Tag, A1, A2, A3, A4>& a, const Arithmetic& b)
|
|
377
|
+
{
|
|
378
|
+
using result_type = typename detail::expression<Tag, A1, A2, A3, A4>::result_type;
|
|
379
|
+
using default_ops::eval_lt;
|
|
380
|
+
result_type t(a);
|
|
381
|
+
if (detail::is_unordered_comparison(t, b))
|
|
382
|
+
return false;
|
|
383
|
+
return eval_lt(t.backend(), result_type::canonical_value(b));
|
|
384
|
+
}
|
|
385
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Backend, expression_template_option ExpressionTemplates>
|
|
386
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool operator<(const detail::expression<Tag, A1, A2, A3, A4>& a, const number<Backend, ExpressionTemplates>& b)
|
|
387
|
+
{
|
|
388
|
+
using result_type = typename detail::expression<Tag, A1, A2, A3, A4>::result_type;
|
|
389
|
+
using default_ops::eval_lt;
|
|
390
|
+
result_type t(a);
|
|
391
|
+
return t < b;
|
|
392
|
+
}
|
|
393
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Tagb, class A1b, class A2b, class A3b, class A4b>
|
|
394
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<is_equivalent_number_type<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type>::value && (number_category<typename detail::expression<Tag, A1, A2, A3, A4>::result_type>::value != number_kind_complex), bool>::type
|
|
395
|
+
operator<(const detail::expression<Tag, A1, A2, A3, A4>& a, const detail::expression<Tagb, A1b, A2b, A3b, A4b>& b)
|
|
396
|
+
{
|
|
397
|
+
using default_ops::eval_lt;
|
|
398
|
+
typename detail::expression<Tag, A1, A2, A3, A4>::result_type t(a);
|
|
399
|
+
typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type t2(b);
|
|
400
|
+
if (detail::is_unordered_comparison(t, t2))
|
|
401
|
+
return false;
|
|
402
|
+
return eval_lt(t.backend(), t2.backend());
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Backend2, expression_template_option ExpressionTemplates2>
|
|
406
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<(number_category<Backend>::value != number_kind_complex) && (number_category<Backend2>::value != number_kind_complex), bool>::type
|
|
407
|
+
operator>(const number<Backend, ExpressionTemplates>& a, const number<Backend2, ExpressionTemplates2>& b)
|
|
408
|
+
{
|
|
409
|
+
using default_ops::eval_gt;
|
|
410
|
+
if (detail::is_unordered_comparison(a, b))
|
|
411
|
+
return false;
|
|
412
|
+
return eval_gt(a.backend(), b.backend());
|
|
413
|
+
}
|
|
414
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Arithmetic>
|
|
415
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value && (number_category<Backend>::value != number_kind_complex) && !is_number_expression<Arithmetic>::value, bool>::type
|
|
416
|
+
operator>(const number<Backend, ExpressionTemplates>& a, const Arithmetic& b)
|
|
417
|
+
{
|
|
418
|
+
using default_ops::eval_gt;
|
|
419
|
+
if (detail::is_unordered_comparison(a, b))
|
|
420
|
+
return false;
|
|
421
|
+
return eval_gt(a.backend(), number<Backend, ExpressionTemplates>::canonical_value(b));
|
|
422
|
+
}
|
|
423
|
+
template <class Arithmetic, class Backend, expression_template_option ExpressionTemplates>
|
|
424
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value && (number_category<Backend>::value != number_kind_complex) && !is_number_expression<Arithmetic>::value, bool>::type
|
|
425
|
+
operator>(const Arithmetic& a, const number<Backend, ExpressionTemplates>& b)
|
|
426
|
+
{
|
|
427
|
+
using default_ops::eval_lt;
|
|
428
|
+
if (detail::is_unordered_comparison(a, b))
|
|
429
|
+
return false;
|
|
430
|
+
return eval_lt(b.backend(), number<Backend, ExpressionTemplates>::canonical_value(a));
|
|
431
|
+
}
|
|
432
|
+
template <class Arithmetic, class Tag, class A1, class A2, class A3, class A4>
|
|
433
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value && (number_category<typename detail::expression<Tag, A1, A2, A3, A4>::result_type>::value != number_kind_complex), bool>::type
|
|
434
|
+
operator>(const Arithmetic& a, const detail::expression<Tag, A1, A2, A3, A4>& b)
|
|
435
|
+
{
|
|
436
|
+
using result_type = typename detail::expression<Tag, A1, A2, A3, A4>::result_type;
|
|
437
|
+
using default_ops::eval_lt;
|
|
438
|
+
result_type t(b);
|
|
439
|
+
return a > t;
|
|
440
|
+
}
|
|
441
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Tag, class A1, class A2, class A3, class A4>
|
|
442
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool operator>(const number<Backend, ExpressionTemplates>& a, const detail::expression<Tag, A1, A2, A3, A4>& b)
|
|
443
|
+
{
|
|
444
|
+
using result_type = typename detail::expression<Tag, A1, A2, A3, A4>::result_type;
|
|
445
|
+
using default_ops::eval_lt;
|
|
446
|
+
result_type t(b);
|
|
447
|
+
return a > t;
|
|
448
|
+
}
|
|
449
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Arithmetic>
|
|
450
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value && (number_category<typename detail::expression<Tag, A1, A2, A3, A4>::result_type>::value != number_kind_complex), bool>::type
|
|
451
|
+
operator>(const detail::expression<Tag, A1, A2, A3, A4>& a, const Arithmetic& b)
|
|
452
|
+
{
|
|
453
|
+
using result_type = typename detail::expression<Tag, A1, A2, A3, A4>::result_type;
|
|
454
|
+
using default_ops::eval_gt;
|
|
455
|
+
result_type t(a);
|
|
456
|
+
return t > b;
|
|
457
|
+
}
|
|
458
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Backend, expression_template_option ExpressionTemplates>
|
|
459
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool operator>(const detail::expression<Tag, A1, A2, A3, A4>& a, const number<Backend, ExpressionTemplates>& b)
|
|
460
|
+
{
|
|
461
|
+
using result_type = typename detail::expression<Tag, A1, A2, A3, A4>::result_type;
|
|
462
|
+
using default_ops::eval_gt;
|
|
463
|
+
result_type t(a);
|
|
464
|
+
return t > b;
|
|
465
|
+
}
|
|
466
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Tagb, class A1b, class A2b, class A3b, class A4b>
|
|
467
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<is_equivalent_number_type<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type>::value && (number_category<typename detail::expression<Tag, A1, A2, A3, A4>::result_type>::value != number_kind_complex), bool>::type
|
|
468
|
+
operator>(const detail::expression<Tag, A1, A2, A3, A4>& a, const detail::expression<Tagb, A1b, A2b, A3b, A4b>& b)
|
|
469
|
+
{
|
|
470
|
+
using default_ops::eval_gt;
|
|
471
|
+
typename detail::expression<Tag, A1, A2, A3, A4>::result_type t(a);
|
|
472
|
+
typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type t2(b);
|
|
473
|
+
return t > t2;
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Backend2, expression_template_option ExpressionTemplates2>
|
|
477
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<(number_category<Backend>::value != number_kind_complex) && (number_category<Backend2>::value != number_kind_complex), bool>::type
|
|
478
|
+
operator<=(const number<Backend, ExpressionTemplates>& a, const number<Backend2, ExpressionTemplates2>& b)
|
|
479
|
+
{
|
|
480
|
+
using default_ops::eval_gt;
|
|
481
|
+
if (detail::is_unordered_comparison(a, b))
|
|
482
|
+
return false;
|
|
483
|
+
return !eval_gt(a.backend(), b.backend());
|
|
484
|
+
}
|
|
485
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Arithmetic>
|
|
486
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value && (number_category<Backend>::value != number_kind_complex) && !is_number_expression<Arithmetic>::value, bool>::type
|
|
487
|
+
operator<=(const number<Backend, ExpressionTemplates>& a, const Arithmetic& b)
|
|
488
|
+
{
|
|
489
|
+
using default_ops::eval_gt;
|
|
490
|
+
if (detail::is_unordered_comparison(a, b))
|
|
491
|
+
return false;
|
|
492
|
+
return !eval_gt(a.backend(), number<Backend, ExpressionTemplates>::canonical_value(b));
|
|
493
|
+
}
|
|
494
|
+
template <class Arithmetic, class Backend, expression_template_option ExpressionTemplates>
|
|
495
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value && (number_category<Backend>::value != number_kind_complex) && !is_number_expression<Arithmetic>::value, bool>::type
|
|
496
|
+
operator<=(const Arithmetic& a, const number<Backend, ExpressionTemplates>& b)
|
|
497
|
+
{
|
|
498
|
+
using default_ops::eval_lt;
|
|
499
|
+
if (detail::is_unordered_comparison(a, b))
|
|
500
|
+
return false;
|
|
501
|
+
return !eval_lt(b.backend(), number<Backend, ExpressionTemplates>::canonical_value(a));
|
|
502
|
+
}
|
|
503
|
+
template <class Arithmetic, class Tag, class A1, class A2, class A3, class A4>
|
|
504
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value && (number_category<typename detail::expression<Tag, A1, A2, A3, A4>::result_type>::value != number_kind_complex), bool>::type
|
|
505
|
+
operator<=(const Arithmetic& a, const detail::expression<Tag, A1, A2, A3, A4>& b)
|
|
506
|
+
{
|
|
507
|
+
using result_type = typename detail::expression<Tag, A1, A2, A3, A4>::result_type;
|
|
508
|
+
using default_ops::eval_lt;
|
|
509
|
+
if (detail::is_unordered_value(a) || detail::is_unordered_value(b))
|
|
510
|
+
return false;
|
|
511
|
+
result_type t(b);
|
|
512
|
+
if (detail::is_unordered_comparison(a, t))
|
|
513
|
+
return false;
|
|
514
|
+
return !eval_lt(t.backend(), result_type::canonical_value(a));
|
|
515
|
+
}
|
|
516
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Tag, class A1, class A2, class A3, class A4>
|
|
517
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool operator<=(const number<Backend, ExpressionTemplates>& a, const detail::expression<Tag, A1, A2, A3, A4>& b)
|
|
518
|
+
{
|
|
519
|
+
using result_type = typename detail::expression<Tag, A1, A2, A3, A4>::result_type;
|
|
520
|
+
using default_ops::eval_lt;
|
|
521
|
+
if (detail::is_unordered_value(a) || detail::is_unordered_value(b))
|
|
522
|
+
return false;
|
|
523
|
+
result_type t(b);
|
|
524
|
+
return a <= t;
|
|
525
|
+
}
|
|
526
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Arithmetic>
|
|
527
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value && (number_category<typename detail::expression<Tag, A1, A2, A3, A4>::result_type>::value != number_kind_complex), bool>::type
|
|
528
|
+
operator<=(const detail::expression<Tag, A1, A2, A3, A4>& a, const Arithmetic& b)
|
|
529
|
+
{
|
|
530
|
+
using result_type = typename detail::expression<Tag, A1, A2, A3, A4>::result_type;
|
|
531
|
+
using default_ops::eval_gt;
|
|
532
|
+
result_type t(a);
|
|
533
|
+
if (detail::is_unordered_comparison(t, b))
|
|
534
|
+
return false;
|
|
535
|
+
return !eval_gt(t.backend(), result_type::canonical_value(b));
|
|
536
|
+
}
|
|
537
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Backend, expression_template_option ExpressionTemplates>
|
|
538
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool operator<=(const detail::expression<Tag, A1, A2, A3, A4>& a, const number<Backend, ExpressionTemplates>& b)
|
|
539
|
+
{
|
|
540
|
+
using result_type = typename detail::expression<Tag, A1, A2, A3, A4>::result_type;
|
|
541
|
+
using default_ops::eval_gt;
|
|
542
|
+
result_type t(a);
|
|
543
|
+
return t <= b;
|
|
544
|
+
}
|
|
545
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Tagb, class A1b, class A2b, class A3b, class A4b>
|
|
546
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<is_equivalent_number_type<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type>::value && (number_category<typename detail::expression<Tag, A1, A2, A3, A4>::result_type>::value != number_kind_complex), bool>::type
|
|
547
|
+
operator<=(const detail::expression<Tag, A1, A2, A3, A4>& a, const detail::expression<Tagb, A1b, A2b, A3b, A4b>& b)
|
|
548
|
+
{
|
|
549
|
+
using default_ops::eval_gt;
|
|
550
|
+
typename detail::expression<Tag, A1, A2, A3, A4>::result_type t(a);
|
|
551
|
+
typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type t2(b);
|
|
552
|
+
if (detail::is_unordered_comparison(t, t2))
|
|
553
|
+
return false;
|
|
554
|
+
return !eval_gt(t.backend(), t2.backend());
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Backend2, expression_template_option ExpressionTemplates2>
|
|
558
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<(number_category<Backend>::value != number_kind_complex) && (number_category<Backend2>::value != number_kind_complex), bool>::type
|
|
559
|
+
operator>=(const number<Backend, ExpressionTemplates>& a, const number<Backend2, ExpressionTemplates2>& b)
|
|
560
|
+
{
|
|
561
|
+
using default_ops::eval_lt;
|
|
562
|
+
if (detail::is_unordered_comparison(a, b))
|
|
563
|
+
return false;
|
|
564
|
+
return !eval_lt(a.backend(), b.backend());
|
|
565
|
+
}
|
|
566
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Arithmetic>
|
|
567
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value && (number_category<Backend>::value != number_kind_complex) && !is_number_expression<Arithmetic>::value, bool>::type
|
|
568
|
+
operator>=(const number<Backend, ExpressionTemplates>& a, const Arithmetic& b)
|
|
569
|
+
{
|
|
570
|
+
using default_ops::eval_lt;
|
|
571
|
+
if (detail::is_unordered_comparison(a, b))
|
|
572
|
+
return false;
|
|
573
|
+
return !eval_lt(a.backend(), number<Backend, ExpressionTemplates>::canonical_value(b));
|
|
574
|
+
}
|
|
575
|
+
template <class Arithmetic, class Backend, expression_template_option ExpressionTemplates>
|
|
576
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value && (number_category<Backend>::value != number_kind_complex) && !is_number_expression<Arithmetic>::value, bool>::type
|
|
577
|
+
operator>=(const Arithmetic& a, const number<Backend, ExpressionTemplates>& b)
|
|
578
|
+
{
|
|
579
|
+
using default_ops::eval_gt;
|
|
580
|
+
if (detail::is_unordered_comparison(a, b))
|
|
581
|
+
return false;
|
|
582
|
+
return !eval_gt(b.backend(), number<Backend, ExpressionTemplates>::canonical_value(a));
|
|
583
|
+
}
|
|
584
|
+
template <class Arithmetic, class Tag, class A1, class A2, class A3, class A4>
|
|
585
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value && (number_category<typename detail::expression<Tag, A1, A2, A3, A4>::result_type>::value != number_kind_complex), bool>::type
|
|
586
|
+
operator>=(const Arithmetic& a, const detail::expression<Tag, A1, A2, A3, A4>& b)
|
|
587
|
+
{
|
|
588
|
+
using result_type = typename detail::expression<Tag, A1, A2, A3, A4>::result_type;
|
|
589
|
+
using default_ops::eval_gt;
|
|
590
|
+
result_type t(b);
|
|
591
|
+
if (detail::is_unordered_comparison(a, t))
|
|
592
|
+
return false;
|
|
593
|
+
return !eval_gt(t.backend(), result_type::canonical_value(a));
|
|
594
|
+
}
|
|
595
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Tag, class A1, class A2, class A3, class A4>
|
|
596
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool operator>=(const number<Backend, ExpressionTemplates>& a, const detail::expression<Tag, A1, A2, A3, A4>& b)
|
|
597
|
+
{
|
|
598
|
+
using result_type = typename detail::expression<Tag, A1, A2, A3, A4>::result_type;
|
|
599
|
+
using default_ops::eval_gt;
|
|
600
|
+
result_type t(b);
|
|
601
|
+
return a >= t;
|
|
602
|
+
}
|
|
603
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Arithmetic>
|
|
604
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value && (number_category<typename detail::expression<Tag, A1, A2, A3, A4>::result_type>::value != number_kind_complex), bool>::type
|
|
605
|
+
operator>=(const detail::expression<Tag, A1, A2, A3, A4>& a, const Arithmetic& b)
|
|
606
|
+
{
|
|
607
|
+
using result_type = typename detail::expression<Tag, A1, A2, A3, A4>::result_type;
|
|
608
|
+
using default_ops::eval_lt;
|
|
609
|
+
result_type t(a);
|
|
610
|
+
if (detail::is_unordered_comparison(t, b))
|
|
611
|
+
return false;
|
|
612
|
+
return !eval_lt(t.backend(), result_type::canonical_value(b));
|
|
613
|
+
}
|
|
614
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Backend, expression_template_option ExpressionTemplates>
|
|
615
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool operator>=(const detail::expression<Tag, A1, A2, A3, A4>& a, const number<Backend, ExpressionTemplates>& b)
|
|
616
|
+
{
|
|
617
|
+
using result_type = typename detail::expression<Tag, A1, A2, A3, A4>::result_type;
|
|
618
|
+
using default_ops::eval_lt;
|
|
619
|
+
result_type t(a);
|
|
620
|
+
return t >= b;
|
|
621
|
+
}
|
|
622
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Tagb, class A1b, class A2b, class A3b, class A4b>
|
|
623
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<is_equivalent_number_type<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type>::value && (number_category<typename detail::expression<Tag, A1, A2, A3, A4>::result_type>::value != number_kind_complex), bool>::type
|
|
624
|
+
operator>=(const detail::expression<Tag, A1, A2, A3, A4>& a, const detail::expression<Tagb, A1b, A2b, A3b, A4b>& b)
|
|
625
|
+
{
|
|
626
|
+
using default_ops::eval_lt;
|
|
627
|
+
typename detail::expression<Tag, A1, A2, A3, A4>::result_type t(a);
|
|
628
|
+
typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type t2(b);
|
|
629
|
+
if (detail::is_unordered_comparison(t, t2))
|
|
630
|
+
return false;
|
|
631
|
+
return !eval_lt(t.backend(), t2.backend());
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
//
|
|
635
|
+
// C99 comparison macros as functions:
|
|
636
|
+
//
|
|
637
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Backend2, expression_template_option ExpressionTemplates2>
|
|
638
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool isgreater BOOST_PREVENT_MACRO_SUBSTITUTION(const number<Backend, ExpressionTemplates>& a, const number<Backend2, ExpressionTemplates2>& b) { return a > b; }
|
|
639
|
+
|
|
640
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Arithmetic>
|
|
641
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
|
642
|
+
isgreater
|
|
643
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const number<Backend, ExpressionTemplates>& a, const Arithmetic& b) { return a > b; }
|
|
644
|
+
|
|
645
|
+
template <class Arithmetic, class Backend, expression_template_option ExpressionTemplates>
|
|
646
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
|
647
|
+
isgreater
|
|
648
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const Arithmetic& a, const number<Backend, ExpressionTemplates>& b) { return a > b; }
|
|
649
|
+
|
|
650
|
+
template <class Arithmetic, class Tag, class A1, class A2, class A3, class A4>
|
|
651
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
|
652
|
+
isgreater
|
|
653
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const Arithmetic& a, const detail::expression<Tag, A1, A2, A3, A4>& b) { return a > b; }
|
|
654
|
+
|
|
655
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Arithmetic>
|
|
656
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
|
657
|
+
isgreater
|
|
658
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const detail::expression<Tag, A1, A2, A3, A4>& a, const Arithmetic& b) { return a > b; }
|
|
659
|
+
|
|
660
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Tagb, class A1b, class A2b, class A3b, class A4b>
|
|
661
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<is_equivalent_number_type<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type>::value, bool>::type
|
|
662
|
+
isgreater
|
|
663
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const detail::expression<Tag, A1, A2, A3, A4>& a, const detail::expression<Tagb, A1b, A2b, A3b, A4b>& b) { return a > b; }
|
|
664
|
+
|
|
665
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Backend2, expression_template_option ExpressionTemplates2>
|
|
666
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool isgreaterequal BOOST_PREVENT_MACRO_SUBSTITUTION(const number<Backend, ExpressionTemplates>& a, const number<Backend2, ExpressionTemplates2>& b) { return a >= b; }
|
|
667
|
+
|
|
668
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Arithmetic>
|
|
669
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
|
670
|
+
isgreaterequal
|
|
671
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const number<Backend, ExpressionTemplates>& a, const Arithmetic& b) { return a >= b; }
|
|
672
|
+
|
|
673
|
+
template <class Arithmetic, class Backend, expression_template_option ExpressionTemplates>
|
|
674
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
|
675
|
+
isgreaterequal
|
|
676
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const Arithmetic& a, const number<Backend, ExpressionTemplates>& b) { return a >= b; }
|
|
677
|
+
|
|
678
|
+
template <class Arithmetic, class Tag, class A1, class A2, class A3, class A4>
|
|
679
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
|
680
|
+
isgreaterequal
|
|
681
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const Arithmetic& a, const detail::expression<Tag, A1, A2, A3, A4>& b) { return a >= b; }
|
|
682
|
+
|
|
683
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Arithmetic>
|
|
684
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
|
685
|
+
isgreaterequal
|
|
686
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const detail::expression<Tag, A1, A2, A3, A4>& a, const Arithmetic& b) { return a >= b; }
|
|
687
|
+
|
|
688
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Tagb, class A1b, class A2b, class A3b, class A4b>
|
|
689
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<is_equivalent_number_type<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type>::value, bool>::type
|
|
690
|
+
isgreaterequal
|
|
691
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const detail::expression<Tag, A1, A2, A3, A4>& a, const detail::expression<Tagb, A1b, A2b, A3b, A4b>& b) { return a >= b; }
|
|
692
|
+
|
|
693
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Backend2, expression_template_option ExpressionTemplates2>
|
|
694
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool islessequal BOOST_PREVENT_MACRO_SUBSTITUTION(const number<Backend, ExpressionTemplates>& a, const number<Backend2, ExpressionTemplates2>& b) { return a <= b; }
|
|
695
|
+
|
|
696
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Arithmetic>
|
|
697
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
|
698
|
+
islessequal
|
|
699
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const number<Backend, ExpressionTemplates>& a, const Arithmetic& b) { return a <= b; }
|
|
700
|
+
|
|
701
|
+
template <class Arithmetic, class Backend, expression_template_option ExpressionTemplates>
|
|
702
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
|
703
|
+
islessequal
|
|
704
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const Arithmetic& a, const number<Backend, ExpressionTemplates>& b) { return a <= b; }
|
|
705
|
+
|
|
706
|
+
template <class Arithmetic, class Tag, class A1, class A2, class A3, class A4>
|
|
707
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
|
708
|
+
islessequal
|
|
709
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const Arithmetic& a, const detail::expression<Tag, A1, A2, A3, A4>& b) { return a <= b; }
|
|
710
|
+
|
|
711
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Arithmetic>
|
|
712
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
|
713
|
+
islessequal
|
|
714
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const detail::expression<Tag, A1, A2, A3, A4>& a, const Arithmetic& b) { return a <= b; }
|
|
715
|
+
|
|
716
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Tagb, class A1b, class A2b, class A3b, class A4b>
|
|
717
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<is_equivalent_number_type<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type>::value, bool>::type
|
|
718
|
+
islessequal
|
|
719
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const detail::expression<Tag, A1, A2, A3, A4>& a, const detail::expression<Tagb, A1b, A2b, A3b, A4b>& b) { return a <= b; }
|
|
720
|
+
|
|
721
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Backend2, expression_template_option ExpressionTemplates2>
|
|
722
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool isless BOOST_PREVENT_MACRO_SUBSTITUTION(const number<Backend, ExpressionTemplates>& a, const number<Backend2, ExpressionTemplates2>& b) { return a < b; }
|
|
723
|
+
|
|
724
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Arithmetic>
|
|
725
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
|
726
|
+
isless
|
|
727
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const number<Backend, ExpressionTemplates>& a, const Arithmetic& b) { return a < b; }
|
|
728
|
+
|
|
729
|
+
template <class Arithmetic, class Backend, expression_template_option ExpressionTemplates>
|
|
730
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
|
731
|
+
isless
|
|
732
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const Arithmetic& a, const number<Backend, ExpressionTemplates>& b) { return a < b; }
|
|
733
|
+
|
|
734
|
+
template <class Arithmetic, class Tag, class A1, class A2, class A3, class A4>
|
|
735
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
|
736
|
+
isless
|
|
737
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const Arithmetic& a, const detail::expression<Tag, A1, A2, A3, A4>& b) { return a < b; }
|
|
738
|
+
|
|
739
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Arithmetic>
|
|
740
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
|
741
|
+
isless
|
|
742
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const detail::expression<Tag, A1, A2, A3, A4>& a, const Arithmetic& b) { return a < b; }
|
|
743
|
+
|
|
744
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Tagb, class A1b, class A2b, class A3b, class A4b>
|
|
745
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<is_equivalent_number_type<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type>::value, bool>::type
|
|
746
|
+
isless
|
|
747
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const detail::expression<Tag, A1, A2, A3, A4>& a, const detail::expression<Tagb, A1b, A2b, A3b, A4b>& b) { return a < b; }
|
|
748
|
+
|
|
749
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Backend2, expression_template_option ExpressionTemplates2>
|
|
750
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool islessgreater BOOST_PREVENT_MACRO_SUBSTITUTION(const number<Backend, ExpressionTemplates>& a, const number<Backend2, ExpressionTemplates2>& b)
|
|
751
|
+
{
|
|
752
|
+
if (detail::is_unordered_comparison(a, b))
|
|
753
|
+
return false;
|
|
754
|
+
return a != b;
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Arithmetic>
|
|
758
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
|
759
|
+
islessgreater
|
|
760
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const number<Backend, ExpressionTemplates>& a, const Arithmetic& b)
|
|
761
|
+
{
|
|
762
|
+
if (detail::is_unordered_comparison(a, b))
|
|
763
|
+
return false;
|
|
764
|
+
return a != b;
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
template <class Arithmetic, class Backend, expression_template_option ExpressionTemplates>
|
|
768
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
|
769
|
+
islessgreater
|
|
770
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const Arithmetic& a, const number<Backend, ExpressionTemplates>& b)
|
|
771
|
+
{
|
|
772
|
+
if (detail::is_unordered_comparison(a, b))
|
|
773
|
+
return false;
|
|
774
|
+
return a != b;
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
template <class Arithmetic, class Tag, class A1, class A2, class A3, class A4>
|
|
778
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
|
779
|
+
islessgreater
|
|
780
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const Arithmetic& a, const detail::expression<Tag, A1, A2, A3, A4>& bb)
|
|
781
|
+
{
|
|
782
|
+
typename detail::expression<Tag, A1, A2, A3, A4>::result_type b(bb);
|
|
783
|
+
return islessgreater BOOST_PREVENT_MACRO_SUBSTITUTION(a, b);
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Arithmetic>
|
|
787
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
|
788
|
+
islessgreater
|
|
789
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const detail::expression<Tag, A1, A2, A3, A4>& aa, const Arithmetic& b)
|
|
790
|
+
{
|
|
791
|
+
typename detail::expression<Tag, A1, A2, A3, A4>::result_type a(aa);
|
|
792
|
+
return islessgreater BOOST_PREVENT_MACRO_SUBSTITUTION(a, b);
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Tagb, class A1b, class A2b, class A3b, class A4b>
|
|
796
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<is_equivalent_number_type<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type>::value, bool>::type
|
|
797
|
+
islessgreater
|
|
798
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const detail::expression<Tag, A1, A2, A3, A4>& aa, const detail::expression<Tagb, A1b, A2b, A3b, A4b>& bb)
|
|
799
|
+
{
|
|
800
|
+
typename detail::expression<Tag, A1, A2, A3, A4>::result_type a(aa);
|
|
801
|
+
typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type b(bb);
|
|
802
|
+
return islessgreater BOOST_PREVENT_MACRO_SUBSTITUTION(a, b);
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Backend2, expression_template_option ExpressionTemplates2>
|
|
806
|
+
inline BOOST_MP_CXX14_CONSTEXPR bool isunordered BOOST_PREVENT_MACRO_SUBSTITUTION(const number<Backend, ExpressionTemplates>& a, const number<Backend2, ExpressionTemplates2>& b) { return detail::is_unordered_comparison(a, b); }
|
|
807
|
+
|
|
808
|
+
template <class Backend, expression_template_option ExpressionTemplates, class Arithmetic>
|
|
809
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
|
810
|
+
isunordered
|
|
811
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const number<Backend, ExpressionTemplates>& a, const Arithmetic& b) { return detail::is_unordered_comparison(a, b); }
|
|
812
|
+
|
|
813
|
+
template <class Arithmetic, class Backend, expression_template_option ExpressionTemplates>
|
|
814
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
|
815
|
+
isunordered
|
|
816
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const Arithmetic& a, const number<Backend, ExpressionTemplates>& b) { return detail::is_unordered_comparison(a, b); }
|
|
817
|
+
|
|
818
|
+
template <class Arithmetic, class Tag, class A1, class A2, class A3, class A4>
|
|
819
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
|
820
|
+
isunordered
|
|
821
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const Arithmetic& a, const detail::expression<Tag, A1, A2, A3, A4>& bb)
|
|
822
|
+
{
|
|
823
|
+
typename detail::expression<Tag, A1, A2, A3, A4>::result_type b(bb);
|
|
824
|
+
return detail::is_unordered_comparison(a, b);
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Arithmetic>
|
|
828
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
|
829
|
+
isunordered
|
|
830
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const detail::expression<Tag, A1, A2, A3, A4>& aa, const Arithmetic& b)
|
|
831
|
+
{
|
|
832
|
+
typename detail::expression<Tag, A1, A2, A3, A4>::result_type a(aa);
|
|
833
|
+
return detail::is_unordered_comparison(a, b);
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
template <class Tag, class A1, class A2, class A3, class A4, class Tagb, class A1b, class A2b, class A3b, class A4b>
|
|
837
|
+
inline BOOST_MP_CXX14_CONSTEXPR typename std::enable_if<is_equivalent_number_type<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type>::value, bool>::type
|
|
838
|
+
isunordered
|
|
839
|
+
BOOST_PREVENT_MACRO_SUBSTITUTION(const detail::expression<Tag, A1, A2, A3, A4>& aa, const detail::expression<Tagb, A1b, A2b, A3b, A4b>& bb)
|
|
840
|
+
{
|
|
841
|
+
typename detail::expression<Tag, A1, A2, A3, A4>::result_type a(aa);
|
|
842
|
+
typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type b(bb);
|
|
843
|
+
return detail::is_unordered_comparison(a, b);
|
|
844
|
+
}
|
|
845
|
+
|
|
846
|
+
}} // namespace boost::multiprecision
|
|
847
|
+
|
|
848
|
+
#endif // BOOST_MP_NUMBER_COMPARE_HPP
|