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 265 : [](const units::Unit &a) { 16 265 : expect::equals(units::none, a); 17 265 : return a; 18 : }, 19 7373 : [](const units::Unit &a, const units::Unit &b) { 20 7373 : expect::equals(units::none, a); 21 7373 : expect::equals(units::none, b); 22 7373 : return units::none; 23 : }}; 24 : 25 : constexpr auto logical_and = 26 505 : overloaded{logical, [](const auto &a, const auto &b) { return a && b; }}; 27 : constexpr auto logical_or = 28 462437 : 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 2387 : overloaded{logical, [](const auto &x) { return !x; }}; 33 : 34 : constexpr auto logical_inplace = 35 252 : overloaded{arg_list<bool>, [](units::Unit &var, const units::Unit &other) { 36 252 : expect::equals(units::none, var); 37 252 : expect::equals(units::none, other); 38 252 : }}; 39 : 40 : constexpr auto logical_and_equals = 41 22903 : overloaded{logical_inplace, [](auto &&a, const auto &b) { a = a && b; }}; 42 : constexpr auto logical_or_equals = 43 7340 : 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