Skip to content

Commit 5d0229b

Browse files
author
kr-2003
committed
added all fixed-points explicitly
1 parent ce28db0 commit 5d0229b

File tree

2 files changed

+138
-50
lines changed

2 files changed

+138
-50
lines changed

libc/src/__support/CPP/type_traits/is_signed.h

Lines changed: 66 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -29,33 +29,75 @@ struct is_signed : bool_constant<(is_arithmetic_v<T> && (T(-1) < T(0)))> {
2929
// Specializations for unsigned fixed-point types
3030
template <typename T, bool IsSigned>
3131
struct fixed_point_is_signed : bool_constant<IsSigned> {
32-
LIBC_INLINE constexpr operator bool() const { return fixed_point_is_signed::value; }
33-
LIBC_INLINE constexpr bool operator()() const { return fixed_point_is_signed::value; }
32+
LIBC_INLINE constexpr operator bool() const {
33+
return fixed_point_is_signed::value;
34+
}
35+
LIBC_INLINE constexpr bool operator()() const {
36+
return fixed_point_is_signed::value;
37+
}
3438
};
3539
template <> struct is_signed<fract> : fixed_point_is_signed<fract, true> {};
36-
template <> struct is_signed<unsigned short fract> : fixed_point_is_signed<unsigned short fract, false> {};
37-
template <> struct is_signed<unsigned fract> : fixed_point_is_signed<unsigned fract, false> {};
38-
template <> struct is_signed<unsigned long fract> : fixed_point_is_signed<unsigned long fract, false> {};
39-
template <> struct is_signed<short fract> : fixed_point_is_signed<short fract, true> {};
40-
template <> struct is_signed<long fract> : fixed_point_is_signed<long fract, true> {};
40+
template <>
41+
struct is_signed<unsigned short fract>
42+
: fixed_point_is_signed<unsigned short fract, false> {};
43+
template <>
44+
struct is_signed<unsigned fract>
45+
: fixed_point_is_signed<unsigned fract, false> {};
46+
template <>
47+
struct is_signed<unsigned long fract>
48+
: fixed_point_is_signed<unsigned long fract, false> {};
49+
template <>
50+
struct is_signed<short fract> : fixed_point_is_signed<short fract, true> {};
51+
template <>
52+
struct is_signed<long fract> : fixed_point_is_signed<long fract, true> {};
4153
template <> struct is_signed<accum> : fixed_point_is_signed<accum, true> {};
42-
template <> struct is_signed<unsigned short accum> : fixed_point_is_signed<unsigned short accum, false> {};
43-
template <> struct is_signed<unsigned accum> : fixed_point_is_signed<unsigned accum, false> {};
44-
template <> struct is_signed<unsigned long accum> : fixed_point_is_signed<unsigned long accum, false> {};
45-
template <> struct is_signed<short accum> : fixed_point_is_signed<short accum, true> {};
46-
template <> struct is_signed<long accum> : fixed_point_is_signed<long accum, true> {};
47-
template <> struct is_signed<sat fract> : fixed_point_is_signed<sat fract, true> {};
48-
template <> struct is_signed<unsigned short sat fract> : fixed_point_is_signed<unsigned short sat fract, false> {};
49-
template <> struct is_signed<unsigned sat fract> : fixed_point_is_signed<unsigned sat fract, false> {};
50-
template <> struct is_signed<unsigned long sat fract> : fixed_point_is_signed<unsigned long sat fract, false> {};
51-
template <> struct is_signed<short sat fract> : fixed_point_is_signed<short sat fract, true> {};
52-
template <> struct is_signed<long sat fract> : fixed_point_is_signed<long sat fract, true> {};
53-
template <> struct is_signed<sat accum> : fixed_point_is_signed<sat accum, true> {};
54-
template <> struct is_signed<unsigned short sat accum> : fixed_point_is_signed<unsigned short sat accum, false> {};
55-
template <> struct is_signed<unsigned sat accum> : fixed_point_is_signed<unsigned sat accum, false> {};
56-
template <> struct is_signed<unsigned long sat accum> : fixed_point_is_signed<unsigned long sat accum, false> {};
57-
template <> struct is_signed<short sat accum> : fixed_point_is_signed<short sat accum, true> {};
58-
template <> struct is_signed<long sat accum> : fixed_point_is_signed<long sat accum, true> {};
54+
template <>
55+
struct is_signed<unsigned short accum>
56+
: fixed_point_is_signed<unsigned short accum, false> {};
57+
template <>
58+
struct is_signed<unsigned accum>
59+
: fixed_point_is_signed<unsigned accum, false> {};
60+
template <>
61+
struct is_signed<unsigned long accum>
62+
: fixed_point_is_signed<unsigned long accum, false> {};
63+
template <>
64+
struct is_signed<short accum> : fixed_point_is_signed<short accum, true> {};
65+
template <>
66+
struct is_signed<long accum> : fixed_point_is_signed<long accum, true> {};
67+
template <>
68+
struct is_signed<sat fract> : fixed_point_is_signed<sat fract, true> {};
69+
template <>
70+
struct is_signed<unsigned short sat fract>
71+
: fixed_point_is_signed<unsigned short sat fract, false> {};
72+
template <>
73+
struct is_signed<unsigned sat fract>
74+
: fixed_point_is_signed<unsigned sat fract, false> {};
75+
template <>
76+
struct is_signed<unsigned long sat fract>
77+
: fixed_point_is_signed<unsigned long sat fract, false> {};
78+
template <>
79+
struct is_signed<short sat fract>
80+
: fixed_point_is_signed<short sat fract, true> {};
81+
template <>
82+
struct is_signed<long sat fract> : fixed_point_is_signed<long sat fract, true> {
83+
};
84+
template <>
85+
struct is_signed<sat accum> : fixed_point_is_signed<sat accum, true> {};
86+
template <>
87+
struct is_signed<unsigned short sat accum>
88+
: fixed_point_is_signed<unsigned short sat accum, false> {};
89+
template <>
90+
struct is_signed<unsigned sat accum>
91+
: fixed_point_is_signed<unsigned sat accum, false> {};
92+
template <>
93+
struct is_signed<unsigned long sat accum>
94+
: fixed_point_is_signed<unsigned long sat accum, false> {};
95+
template <>
96+
struct is_signed<short sat accum>
97+
: fixed_point_is_signed<short sat accum, true> {};
98+
template <>
99+
struct is_signed<long sat accum> : fixed_point_is_signed<long sat accum, true> {
100+
};
59101
#endif // LIBC_COMPILER_HAS_FIXED_POINT
60102

61103
template <typename T>

libc/src/__support/CPP/type_traits/is_unsigned.h

Lines changed: 72 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -29,33 +29,79 @@ struct is_unsigned : bool_constant<(is_arithmetic_v<T> && (T(-1) > T(0)))> {
2929
// Specializations for unsigned fixed-point types
3030
template <typename T, bool IsUnsigned>
3131
struct fixed_point_is_unsigned : bool_constant<IsUnsigned> {
32-
LIBC_INLINE constexpr operator bool() const { return fixed_point_is_unsigned::value; }
33-
LIBC_INLINE constexpr bool operator()() const { return fixed_point_is_unsigned::value; }
32+
LIBC_INLINE constexpr operator bool() const {
33+
return fixed_point_is_unsigned::value;
34+
}
35+
LIBC_INLINE constexpr bool operator()() const {
36+
return fixed_point_is_unsigned::value;
37+
}
3438
};
35-
template <> struct is_unsigned<fract> : fixed_point_is_unsigned<fract, false> {};
36-
template <> struct is_unsigned<unsigned short fract> : fixed_point_is_unsigned<unsigned short fract, true> {};
37-
template <> struct is_unsigned<unsigned fract> : fixed_point_is_unsigned<unsigned fract, true> {};
38-
template <> struct is_unsigned<unsigned long fract> : fixed_point_is_unsigned<unsigned long fract, true> {};
39-
template <> struct is_unsigned<short fract> : fixed_point_is_unsigned<short fract, false> {};
40-
template <> struct is_unsigned<long fract> : fixed_point_is_unsigned<long fract, false> {};
41-
template <> struct is_unsigned<accum> : fixed_point_is_unsigned<accum, false> {};
42-
template <> struct is_unsigned<unsigned short accum> : fixed_point_is_unsigned<unsigned short accum, true> {};
43-
template <> struct is_unsigned<unsigned accum> : fixed_point_is_unsigned<unsigned accum, true> {};
44-
template <> struct is_unsigned<unsigned long accum> : fixed_point_is_unsigned<unsigned long accum, true> {};
45-
template <> struct is_unsigned<short accum> : fixed_point_is_unsigned<short accum, false> {};
46-
template <> struct is_unsigned<long accum> : fixed_point_is_unsigned<long accum, false> {};
47-
template <> struct is_unsigned<sat fract> : fixed_point_is_unsigned<sat fract, false> {};
48-
template <> struct is_unsigned<unsigned short sat fract> : fixed_point_is_unsigned<unsigned short sat fract, true> {};
49-
template <> struct is_unsigned<unsigned sat fract> : fixed_point_is_unsigned<unsigned sat fract, true> {};
50-
template <> struct is_unsigned<unsigned long sat fract> : fixed_point_is_unsigned<unsigned long sat fract, true> {};
51-
template <> struct is_unsigned<short sat fract> : fixed_point_is_unsigned<short sat fract, false> {};
52-
template <> struct is_unsigned<long sat fract> : fixed_point_is_unsigned<long sat fract, false> {};
53-
template <> struct is_unsigned<sat accum> : fixed_point_is_unsigned<sat accum, false> {};
54-
template <> struct is_unsigned<unsigned short sat accum> : fixed_point_is_unsigned<unsigned short sat accum, true> {};
55-
template <> struct is_unsigned<unsigned sat accum> : fixed_point_is_unsigned<unsigned sat accum, true> {};
56-
template <> struct is_unsigned<unsigned long sat accum> : fixed_point_is_unsigned<unsigned long sat accum, true> {};
57-
template <> struct is_unsigned<short sat accum> : fixed_point_is_unsigned<short sat accum, false> {};
58-
template <> struct is_unsigned<long sat accum> : fixed_point_is_unsigned<long sat accum, false> {};
39+
template <>
40+
struct is_unsigned<fract> : fixed_point_is_unsigned<fract, false> {};
41+
template <>
42+
struct is_unsigned<unsigned short fract>
43+
: fixed_point_is_unsigned<unsigned short fract, true> {};
44+
template <>
45+
struct is_unsigned<unsigned fract>
46+
: fixed_point_is_unsigned<unsigned fract, true> {};
47+
template <>
48+
struct is_unsigned<unsigned long fract>
49+
: fixed_point_is_unsigned<unsigned long fract, true> {};
50+
template <>
51+
struct is_unsigned<short fract> : fixed_point_is_unsigned<short fract, false> {
52+
};
53+
template <>
54+
struct is_unsigned<long fract> : fixed_point_is_unsigned<long fract, false> {};
55+
template <>
56+
struct is_unsigned<accum> : fixed_point_is_unsigned<accum, false> {};
57+
template <>
58+
struct is_unsigned<unsigned short accum>
59+
: fixed_point_is_unsigned<unsigned short accum, true> {};
60+
template <>
61+
struct is_unsigned<unsigned accum>
62+
: fixed_point_is_unsigned<unsigned accum, true> {};
63+
template <>
64+
struct is_unsigned<unsigned long accum>
65+
: fixed_point_is_unsigned<unsigned long accum, true> {};
66+
template <>
67+
struct is_unsigned<short accum> : fixed_point_is_unsigned<short accum, false> {
68+
};
69+
template <>
70+
struct is_unsigned<long accum> : fixed_point_is_unsigned<long accum, false> {};
71+
template <>
72+
struct is_unsigned<sat fract> : fixed_point_is_unsigned<sat fract, false> {};
73+
template <>
74+
struct is_unsigned<unsigned short sat fract>
75+
: fixed_point_is_unsigned<unsigned short sat fract, true> {};
76+
template <>
77+
struct is_unsigned<unsigned sat fract>
78+
: fixed_point_is_unsigned<unsigned sat fract, true> {};
79+
template <>
80+
struct is_unsigned<unsigned long sat fract>
81+
: fixed_point_is_unsigned<unsigned long sat fract, true> {};
82+
template <>
83+
struct is_unsigned<short sat fract>
84+
: fixed_point_is_unsigned<short sat fract, false> {};
85+
template <>
86+
struct is_unsigned<long sat fract>
87+
: fixed_point_is_unsigned<long sat fract, false> {};
88+
template <>
89+
struct is_unsigned<sat accum> : fixed_point_is_unsigned<sat accum, false> {};
90+
template <>
91+
struct is_unsigned<unsigned short sat accum>
92+
: fixed_point_is_unsigned<unsigned short sat accum, true> {};
93+
template <>
94+
struct is_unsigned<unsigned sat accum>
95+
: fixed_point_is_unsigned<unsigned sat accum, true> {};
96+
template <>
97+
struct is_unsigned<unsigned long sat accum>
98+
: fixed_point_is_unsigned<unsigned long sat accum, true> {};
99+
template <>
100+
struct is_unsigned<short sat accum>
101+
: fixed_point_is_unsigned<short sat accum, false> {};
102+
template <>
103+
struct is_unsigned<long sat accum>
104+
: fixed_point_is_unsigned<long sat accum, false> {};
59105
#endif // LIBC_COMPILER_HAS_FIXED_POINT
60106

61107
template <typename T>

0 commit comments

Comments
 (0)