// Copyright 2023 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef BASE_NUMERICS_WRAPPING_MATH_H_ #define BASE_NUMERICS_WRAPPING_MATH_H_ #include <type_traits> namespace base { // Returns `a + b` with overflow defined to wrap around, i.e. modulo 2^N where N // is the bit width of `T`. template <typename T> inline constexpr T WrappingAdd(T a, T b) { … } // Returns `a - b` with overflow defined to wrap around, i.e. modulo 2^N where N // is the bit width of `T`. template <typename T> inline constexpr T WrappingSub(T a, T b) { … } } // namespace base #endif // BASE_NUMERICS_WRAPPING_MATH_H_