@@ -18,15 +18,105 @@ FIXED_POINTS_BEGIN_NAMESPACE
1818// Constructors
1919//
2020
21+ template < unsigned Integer, unsigned Fraction >
22+ constexpr SFixed<Integer, Fraction>::SFixed(const RawType & value)
23+ : value(static_cast <InternalType>(value))
24+ {
25+ }
26+
2127template < unsigned Integer, unsigned Fraction >
2228constexpr SFixed<Integer, Fraction>::SFixed(void )
23- : Base( )
29+ : value( 0 )
2430{
2531}
2632
2733template < unsigned Integer, unsigned Fraction >
2834constexpr SFixed<Integer, Fraction>::SFixed(const IntegerType & integer, const FractionType & fraction)
29- : Base(RawType((static_cast <InternalType>(integer) << FractionSize) | fraction))
35+ : value((static_cast <InternalType>(integer) << FractionSize) | fraction)
36+ {
37+ }
38+
39+ template < unsigned Integer, unsigned Fraction >
40+ constexpr SFixed<Integer, Fraction>::SFixed(const char & value)
41+ : value(static_cast <InternalType>(static_cast < FIXED_POINTS_DETAILS::LargerType<char , InternalType> >(value) << FractionSize))
42+ {
43+ }
44+
45+ template < unsigned Integer, unsigned Fraction >
46+ constexpr SFixed<Integer, Fraction>::SFixed(const unsigned char & value)
47+ : value(static_cast <InternalType>(static_cast < FIXED_POINTS_DETAILS::LargerType<unsigned char , InternalType> >(value) << FractionSize))
48+ {
49+ }
50+
51+ template < unsigned Integer, unsigned Fraction >
52+ constexpr SFixed<Integer, Fraction>::SFixed(const signed char & value)
53+ : value(static_cast <InternalType>(static_cast < FIXED_POINTS_DETAILS::LargerType<signed char , InternalType> >(value) << FractionSize))
54+ {
55+ }
56+
57+ template < unsigned Integer, unsigned Fraction >
58+ constexpr SFixed<Integer, Fraction>::SFixed(const unsigned short int & value)
59+ : value(static_cast <InternalType>(static_cast < FIXED_POINTS_DETAILS::LargerType<unsigned short int , InternalType> >(value) << FractionSize))
60+ {
61+ }
62+
63+ template < unsigned Integer, unsigned Fraction >
64+ constexpr SFixed<Integer, Fraction>::SFixed(const signed short int & value)
65+ : value(static_cast <InternalType>(static_cast < FIXED_POINTS_DETAILS::LargerType<signed short int , InternalType> >(value) << FractionSize))
66+ {
67+ }
68+
69+ template < unsigned Integer, unsigned Fraction >
70+ constexpr SFixed<Integer, Fraction>::SFixed(const unsigned int & value)
71+ : value(static_cast <InternalType>(static_cast < FIXED_POINTS_DETAILS::LargerType<unsigned int , InternalType> >(value) << FractionSize))
72+ {
73+ }
74+
75+ template < unsigned Integer, unsigned Fraction >
76+ constexpr SFixed<Integer, Fraction>::SFixed(const signed int & value)
77+ : value(static_cast <InternalType>(static_cast < FIXED_POINTS_DETAILS::LargerType<signed int , InternalType> >(value) << FractionSize))
78+ {
79+ }
80+
81+ template < unsigned Integer, unsigned Fraction >
82+ constexpr SFixed<Integer, Fraction>::SFixed(const unsigned long int & value)
83+ : value(static_cast <InternalType>(static_cast < FIXED_POINTS_DETAILS::LargerType<unsigned long int , InternalType> >(value) << FractionSize))
84+ {
85+ }
86+
87+ template < unsigned Integer, unsigned Fraction >
88+ constexpr SFixed<Integer, Fraction>::SFixed(const signed long int & value)
89+ : value(static_cast <InternalType>(static_cast < FIXED_POINTS_DETAILS::LargerType<signed long int , InternalType> >(value) << FractionSize))
90+ {
91+ }
92+
93+ template < unsigned Integer, unsigned Fraction >
94+ constexpr SFixed<Integer, Fraction>::SFixed(const unsigned long long int & value)
95+ : value(static_cast <InternalType>(static_cast < FIXED_POINTS_DETAILS::LargerType<unsigned long long int , InternalType> >(value) << FractionSize))
96+ {
97+ }
98+
99+ template < unsigned Integer, unsigned Fraction >
100+ constexpr SFixed<Integer, Fraction>::SFixed(const signed long long int & value)
101+ : value(static_cast <InternalType>(static_cast < FIXED_POINTS_DETAILS::LargerType<signed long long int , InternalType> >(value) << FractionSize))
102+ {
103+ }
104+
105+ template < unsigned Integer, unsigned Fraction >
106+ constexpr SFixed<Integer, Fraction>::SFixed(const double & value)
107+ : value(static_cast <InternalType>(value * static_cast <double >(Scale)))
108+ {
109+ }
110+
111+ template < unsigned Integer, unsigned Fraction >
112+ constexpr SFixed<Integer, Fraction>::SFixed(const float & value)
113+ : value(static_cast <InternalType>(value * static_cast <float >(Scale)))
114+ {
115+ }
116+
117+ template < unsigned Integer, unsigned Fraction >
118+ constexpr SFixed<Integer, Fraction>::SFixed(const long double & value)
119+ : value(static_cast <InternalType>(value * static_cast <long double >(Scale)))
30120{
31121}
32122
0 commit comments