Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(149)

Side by Side Diff: base/numerics/safe_math_impl.h

Issue 2506093004: Protect base/numerics against change in intmax_t's underlying type (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef BASE_NUMERICS_SAFE_MATH_IMPL_H_ 5 #ifndef BASE_NUMERICS_SAFE_MATH_IMPL_H_
6 #define BASE_NUMERICS_SAFE_MATH_IMPL_H_ 6 #define BASE_NUMERICS_SAFE_MATH_IMPL_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 struct IntegerForSizeAndSign<4, false> { 50 struct IntegerForSizeAndSign<4, false> {
51 typedef uint32_t type; 51 typedef uint32_t type;
52 }; 52 };
53 template <> 53 template <>
54 struct IntegerForSizeAndSign<8, true> { 54 struct IntegerForSizeAndSign<8, true> {
55 typedef int64_t type; 55 typedef int64_t type;
56 }; 56 };
57 template <> 57 template <>
58 struct IntegerForSizeAndSign<8, false> { 58 struct IntegerForSizeAndSign<8, false> {
59 typedef uint64_t type; 59 typedef uint64_t type;
60 static_assert(sizeof(uintmax_t) == 8,
Tom Sepez 2016/11/17 17:04:54 nit: Do you want a <= or >= comparison here? Does
jschuh 2016/11/17 18:06:46 Good question. I can't really test, but I've seen
61 "Max integer size not supported for this toolchain.");
60 }; 62 };
61 63
62 // WARNING: We have no IntegerForSizeAndSign<16, *>. If we ever add one to 64 // WARNING: We have no IntegerForSizeAndSign<16, *>. If we ever add one to
63 // support 128-bit math, then the ArithmeticPromotion template below will need 65 // support 128-bit math, then the ArithmeticPromotion template below will need
64 // to be updated (or more likely replaced with a decltype expression). 66 // to be updated (or more likely replaced with a decltype expression).
65 67
66 template <typename Integer> 68 template <typename Integer>
67 struct UnsignedIntegerForSize { 69 struct UnsignedIntegerForSize {
68 typedef typename std::enable_if< 70 typedef typename std::enable_if<
69 std::numeric_limits<Integer>::is_integer, 71 std::numeric_limits<Integer>::is_integer,
(...skipping 680 matching lines...) Expand 10 before | Expand all | Expand 10 after
750 : value_(static_cast<T>(rhs.value())) {} 752 : value_(static_cast<T>(rhs.value())) {}
751 753
752 bool is_valid() const { return std::isfinite(value_); } 754 bool is_valid() const { return std::isfinite(value_); }
753 T value() const { return value_; } 755 T value() const { return value_; }
754 }; 756 };
755 757
756 } // namespace internal 758 } // namespace internal
757 } // namespace base 759 } // namespace base
758 760
759 #endif // BASE_NUMERICS_SAFE_MATH_IMPL_H_ 761 #endif // BASE_NUMERICS_SAFE_MATH_IMPL_H_
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698