Lines Matching refs:Src
134 // A range for a given nunmeric Src type is contained for a given numeric Dst
135 // type if both numeric_limits<Src>::max() <= numeric_limits<Dst>::max() and
136 // numeric_limits<Src>::lowest() >= numeric_limits<Dst>::lowest() are true.
148 typename Src,
152 IntegerRepresentation SrcSign = std::is_signed<Src>::value
157 // Same sign: Dst is guaranteed to contain Src only if its range is equal or
159 template <typename Dst, typename Src, IntegerRepresentation Sign>
160 struct StaticDstRangeRelationToSrcRange<Dst, Src, Sign, Sign> {
162 MaxExponent<Dst>::value >= MaxExponent<Src>::value
169 template <typename Dst, typename Src>
171 Src,
175 MaxExponent<Dst>::value > MaxExponent<Src>::value
180 // Signed to unsigned: Dst cannot be statically determined to contain Src.
181 template <typename Dst, typename Src>
183 Src,
238 template <typename Dst, typename Src, template <typename> class Bounds>
240 using SrcLimits = std::numeric_limits<Src>;
245 (MaxExponent<Src>::value > MaxExponent<Dst>::value &&
277 typename Src,
283 IntegerRepresentation SrcSign = std::is_signed<Src>::value
287 StaticDstRangeRelationToSrcRange<Dst, Src>::value>
296 typename Src,
302 Src,
307 static constexpr RangeCheck Check(Src value) {
308 using SrcLimits = std::numeric_limits<Src>;
309 using DstLimits = NarrowingRange<Dst, Src, Bounds>;
320 template <typename Dst, typename Src, template <typename> class Bounds>
322 Src,
327 static constexpr RangeCheck Check(Src value) {
328 using DstLimits = NarrowingRange<Dst, Src, Bounds>;
335 template <typename Dst, typename Src, template <typename> class Bounds>
337 Src,
342 static constexpr RangeCheck Check(Src value) {
343 using DstLimits = NarrowingRange<Dst, Src, Bounds>;
351 template <typename Dst, typename Src, template <typename> class Bounds>
353 Src,
358 static constexpr RangeCheck Check(Src value) {
359 using DstLimits = NarrowingRange<Dst, Src, Bounds>;
360 using Promotion = decltype(Src() + Dst());
371 template <typename Dst, typename Src, template <typename> class Bounds>
373 Src,
378 static constexpr RangeCheck Check(Src value) {
379 using SrcLimits = std::numeric_limits<Src>;
380 using DstLimits = NarrowingRange<Dst, Src, Bounds>;
381 using Promotion = decltype(Src() + Dst());
383 value >= Src(0) && (DstLimits::lowest() == 0 ||
393 template <typename Dst, typename Src>
395 static const bool value = StaticDstRangeRelationToSrcRange<Dst, Src>::value ==
401 typename Src>
402 constexpr RangeCheck DstRangeRelationToSrcRange(Src value) {
403 static_assert(std::is_arithmetic<Src>::value, "Argument must be numeric.");
406 return DstRangeRelationToSrcRangeImpl<Dst, Src, Bounds>::Check(value);
669 template <typename Src>
671 typename base::internal::UnderlyingType<Src>::type>::type
672 as_signed(const Src value) {
681 template <typename Src>
683 typename base::internal::UnderlyingType<Src>::type>::type
684 as_unsigned(const Src value) {
811 template <typename Dst, typename Src>
813 return IsGreaterOrEqual<Dst, Src>::Test(std::numeric_limits<Dst>::max(),
814 std::numeric_limits<Src>::max());
817 template <typename Dst, typename Src>
819 return IsLessOrEqual<Dst, Src>::Test(std::numeric_limits<Dst>::lowest(),
820 std::numeric_limits<Src>::lowest());
823 template <typename Dst, typename Src>
825 return !IsMaxInRangeForNumericType<Dst, Src>()
827 : Dst(std::numeric_limits<Src>::max());
830 template <typename Dst, typename Src>
832 return !IsMinInRangeForNumericType<Dst, Src>()
834 : Dst(std::numeric_limits<Src>::lowest());
840 template <typename Dst, typename Src = Dst>
842 return is_min ? CommonMin<Dst, Src>() : CommonMax<Dst, Src>();