Home | History | Annotate | Download | only in base

Lines Matching refs:Src

11 // Borrowed from Chromium's src/base/numerics/safe_conversions_impl.h.
39 template <typename Dst, typename Src,
42 SrcSign IsSrcSigned = std::numeric_limits<Src>::is_signed ?
46 template <typename Dst, typename Src>
47 struct StaticRangeCheck<Dst, Src, DST_SIGNED, SRC_SIGNED> {
49 typedef std::numeric_limits<Src> SrcLimits;
56 (sizeof(Src) * 8 - 1);
61 template <typename Dst, typename Src>
62 struct StaticRangeCheck<Dst, Src, DST_UNSIGNED, SRC_UNSIGNED> {
63 static const DstRange value = sizeof(Dst) >= sizeof(Src) ?
67 template <typename Dst, typename Src>
68 struct StaticRangeCheck<Dst, Src, DST_SIGNED, SRC_UNSIGNED> {
70 typedef std::numeric_limits<Src> SrcLimits;
75 static const size_t kSrcMaxExponent = sizeof(Src) * 8;
80 template <typename Dst, typename Src>
81 struct StaticRangeCheck<Dst, Src, DST_UNSIGNED, SRC_SIGNED> {
101 typename Src,
104 SrcSign IsSrcSigned = std::numeric_limits<Src>::is_signed ?
106 DstRange IsSrcRangeContained = StaticRangeCheck<Dst, Src>::value>
114 template <typename Dst, typename Src, DstSign IsDstSigned, SrcSign IsSrcSigned>
115 struct RangeCheckImpl<Dst, Src, IsDstSigned, IsSrcSigned, CONTAINS_RANGE> {
116 static RangeCheckResult Check(Src value) {
122 template <typename Dst, typename Src>
123 struct RangeCheckImpl<Dst, Src, DST_SIGNED, SRC_SIGNED, OVERLAPS_RANGE> {
124 static RangeCheckResult Check(Src value) {
128 value <= static_cast<Src>(DstLimits::max()),
129 value >= static_cast<Src>(DstLimits::max() * -1)) :
131 value <= static_cast<Src>(DstLimits::max()),
132 value >= static_cast<Src>(DstLimits::min()));
137 template <typename Dst, typename Src>
138 struct RangeCheckImpl<Dst, Src, DST_UNSIGNED, SRC_UNSIGNED, OVERLAPS_RANGE> {
139 static RangeCheckResult Check(Src value) {
142 value <= static_cast<Src>(DstLimits::max()), true);
147 template <typename Dst, typename Src>
148 struct RangeCheckImpl<Dst, Src, DST_SIGNED, SRC_UNSIGNED, OVERLAPS_RANGE> {
149 static RangeCheckResult Check(Src value) {
151 return sizeof(Dst) > sizeof(Src) ? TYPE_VALID :
153 value <= static_cast<Src>(DstLimits::max()), true);
158 template <typename Dst, typename Src>
159 struct RangeCheckImpl<Dst, Src, DST_UNSIGNED, SRC_SIGNED, OVERLAPS_RANGE> {
160 static RangeCheckResult Check(Src value) {
162 typedef std::numeric_limits<Src> SrcLimits;
167 (sizeof(Src) * 8 - 1);
169 BASE_NUMERIC_RANGE_CHECK_RESULT(true, value >= static_cast<Src>(0)) :
171 value <= static_cast<Src>(DstLimits::max()),
172 value >= static_cast<Src>(0));
176 template <typename Dst, typename Src>
177 inline RangeCheckResult RangeCheck(Src value) {
178 static_assert(std::numeric_limits<Src>::is_specialized,
182 return RangeCheckImpl<Dst, Src>::Check(value);