@@ -27,38 +27,30 @@ private static T ThrowOrReturnDefault<T>() where T : struct
2727#endif
2828 }
2929
30- private static TTo ToSignedNumber < TFrom , TTo > ( TFrom value )
31- where TFrom : unmanaged, IUnsignedNumber < TFrom > , IShiftOperators < TFrom , int , TFrom > , IBitwiseOperators < TFrom , TFrom , TFrom >
32- where TTo : unmanaged, ISignedNumber < TTo >
33- {
34- if ( Unsafe . SizeOf < TFrom > ( ) != Unsafe . SizeOf < TTo > ( ) )
35- {
36- return ThrowOrReturnDefault < TTo > ( ) ;
37- }
38-
39- TFrom SignBit = TFrom . One << ( Unsafe . SizeOf < TFrom > ( ) * 8 - 1 ) ;
40- TFrom converted = ( SignBit ^ value ) ;
41- return Unsafe . As < TFrom , TTo > ( ref converted ) ;
42- }
30+ private static TTo ToSignedNumber < TFrom , TTo > ( TFrom value )
31+ where TFrom : unmanaged, IUnsignedNumber < TFrom > , IShiftOperators < TFrom , int , TFrom > , IBitwiseOperators < TFrom , TFrom , TFrom >
32+ where TTo : unmanaged, ISignedNumber < TTo >
33+ {
34+ if ( Unsafe . SizeOf < TFrom > ( ) != Unsafe . SizeOf < TTo > ( ) )
35+ {
36+ return ThrowOrReturnDefault < TTo > ( ) ;
37+ }
4338
44- private static TTo ToUnsignedNumber < TFrom , TTo > ( TFrom value )
45- where TFrom : unmanaged, ISignedNumber < TFrom >
46- where TTo : unmanaged, IUnsignedNumber < TTo > , IShiftOperators < TTo , int , TTo > , IBitwiseOperators < TTo , TTo , TTo >
47- {
48- if ( Unsafe . SizeOf < TFrom > ( ) != Unsafe . SizeOf < TTo > ( ) )
49- {
50- return ThrowOrReturnDefault < TTo > ( ) ;
51- }
52-
53- TTo SignBit = TTo . One << ( Unsafe . SizeOf < TTo > ( ) * 8 - 1 ) ;
54- return SignBit ^ Unsafe . As < TFrom , TTo > ( ref value ) ;
39+ TFrom SignBit = TFrom . One << ( Unsafe . SizeOf < TFrom > ( ) * 8 - 1 ) ;
40+ TFrom converted = ( SignBit ^ value ) ;
41+ return Unsafe . As < TFrom , TTo > ( ref converted ) ;
5542 }
5643
57- private static void Test ( )
58- {
59- uint unum = default ;
60- int num = default ;
61-
62- int converted = ToSignedNumber < uint , int > ( unum ) ;
44+ private static TTo ToUnsignedNumber < TFrom , TTo > ( TFrom value )
45+ where TFrom : unmanaged, ISignedNumber < TFrom >
46+ where TTo : unmanaged, IUnsignedNumber < TTo > , IShiftOperators < TTo , int , TTo > , IBitwiseOperators < TTo , TTo , TTo >
47+ {
48+ if ( Unsafe . SizeOf < TFrom > ( ) != Unsafe . SizeOf < TTo > ( ) )
49+ {
50+ return ThrowOrReturnDefault < TTo > ( ) ;
51+ }
52+
53+ TTo SignBit = TTo . One << ( Unsafe . SizeOf < TTo > ( ) * 8 - 1 ) ;
54+ return SignBit ^ Unsafe . As < TFrom , TTo > ( ref value ) ;
6355 }
6456}
0 commit comments