Line data Source code
1 : // SPDX-License-Identifier: BSD-3-Clause 2 : // Copyright (c) 2023 Scipp contributors (https://github.com/scipp) 3 : /// @file 4 : /// @author Simon Heybrock 5 : #pragma once 6 : 7 : #include "scipp/common/overloaded.h" 8 : #include "scipp/core/element/arg_list.h" 9 : #include "scipp/core/transform_common.h" 10 : 11 : namespace scipp::core::element { 12 : 13 : constexpr auto logical = 14 : overloaded{arg_list<bool>, 15 274 : [](const units::Unit &a) { 16 274 : expect::equals(units::none, a); 17 274 : return a; 18 : }, 19 9221 : [](const units::Unit &a, const units::Unit &b) { 20 9221 : expect::equals(units::none, a); 21 9221 : expect::equals(units::none, b); 22 9221 : return units::none; 23 : }}; 24 : 25 : constexpr auto logical_and = 26 815 : overloaded{logical, [](const auto &a, const auto &b) { return a && b; }}; 27 : constexpr auto logical_or = 28 1350796 : overloaded{logical, [](const auto &a, const auto &b) { return a || b; }}; 29 : constexpr auto logical_xor = 30 24 : overloaded{logical, [](const auto &a, const auto &b) { return a != b; }}; 31 : constexpr auto logical_not = 32 2882 : overloaded{logical, [](const auto &x) { return !x; }}; 33 : 34 : constexpr auto logical_inplace = 35 312 : overloaded{arg_list<bool>, [](units::Unit &var, const units::Unit &other) { 36 312 : expect::equals(units::none, var); 37 312 : expect::equals(units::none, other); 38 312 : }}; 39 : 40 : constexpr auto logical_and_equals = 41 22909 : overloaded{logical_inplace, [](auto &&a, const auto &b) { a = a && b; }}; 42 : constexpr auto logical_or_equals = 43 8781 : overloaded{logical_inplace, [](auto &&a, const auto &b) { a = a || b; }}; 44 : constexpr auto logical_xor_equals = 45 51 : overloaded{logical_inplace, [](auto &&a, const auto &b) { a = a != b; }}; 46 : 47 : } // namespace scipp::core::element