Skip to content

Commit 8c59403

Browse files
committed
Closes #13.
1 parent fbb9361 commit 8c59403

File tree

1 file changed

+16
-25
lines changed

1 file changed

+16
-25
lines changed

To.cs

Lines changed: 16 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,20 @@
22
using System.Linq;
33
using System.Reflection;
44
using System.Runtime.CompilerServices;
5+
using Platform.Exceptions;
56
using Platform.Reflection;
67
using Platform.Reflection.Sigil;
78

89
namespace Platform.Converters
910
{
1011
/// <remarks>
11-
/// Shorter version of ConvertationHelpers.
12-
/// Укороченная версия от ConvertationHelpers.
13-
///
1412
/// Возможно нужно несколько разных способов разрешения конфликта.
1513
/// ExceptionConflictReation (выбрасывает исключение, если обнаружен конфликт, не предпринимая никаких действий)
1614
/// > Max: Max (если число больше его максимального размера в этом размере, то берём максимальное)
1715
/// > Max: 0 (если число больше его максимального размера в этом размере, то берём обнуляем)
1816
/// и т.п. (например определённые пользователем)
1917
///
20-
/// Текущая логика алгоритма "Closest"
18+
/// Текущая логика алгоритма "Closest value"
2119
/// </remarks>
2220
public static class To
2321
{
@@ -33,7 +31,7 @@ static SignProcessor()
3331
{
3432
ToSignedFunc = DelegateHelpers.Compile<Func<T, object>>(emiter =>
3533
{
36-
EnsureSupportedUnsignedType();
34+
Ensure.Always.IsUnsignedInteger<T>();
3735
emiter.LoadArgument(0);
3836
var method = typeof(To).GetTypeInfo().GetMethod("Signed", Types<T>.Array.ToArray());
3937
emiter.Call(method);
@@ -43,7 +41,7 @@ static SignProcessor()
4341

4442
ToUnsignedFunc = DelegateHelpers.Compile<Func<T, object>>(emiter =>
4543
{
46-
EnsureSupportedSignedType();
44+
Ensure.Always.IsSignedInteger<T>();
4745
emiter.LoadArgument(0);
4846
var method = typeof(To).GetTypeInfo().GetMethod("Unsigned", Types<T>.Array.ToArray());
4947
emiter.Call(method);
@@ -53,7 +51,7 @@ static SignProcessor()
5351

5452
ToUnsignedAsFunc = DelegateHelpers.Compile<Func<object, T>>(emiter =>
5553
{
56-
EnsureSupportedUnsignedType();
54+
Ensure.Always.IsUnsignedInteger<T>();
5755
emiter.LoadArgument(0);
5856
var signedVersion = CachedTypeInfo<T>.SignedVersion;
5957
emiter.UnboxAny(signedVersion);
@@ -62,24 +60,6 @@ static SignProcessor()
6260
emiter.Return();
6361
});
6462
}
65-
66-
private static void EnsureSupportedUnsignedType()
67-
{
68-
var type = typeof(T);
69-
if (type != typeof(ulong) && type != typeof(uint) && type != typeof(ushort) && type != typeof(byte))
70-
{
71-
throw new NotSupportedException();
72-
}
73-
}
74-
75-
private static void EnsureSupportedSignedType()
76-
{
77-
var type = typeof(T);
78-
if (type != typeof(long) && type != typeof(int) && type != typeof(short) && type != typeof(sbyte))
79-
{
80-
throw new NotSupportedException();
81-
}
82-
}
8363
}
8464

8565
[MethodImpl(MethodImplOptions.AggressiveInlining)]
@@ -136,26 +116,37 @@ private static void EnsureSupportedSignedType()
136116
[MethodImpl(MethodImplOptions.AggressiveInlining)]
137117
public static ulong UInt64(char value) => value;
138118

119+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
139120
public static long Signed(ulong value) => (long)value;
140121

122+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
141123
public static int Signed(uint value) => (int)value;
142124

125+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
143126
public static short Signed(ushort value) => (short)value;
144127

128+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
145129
public static sbyte Signed(byte value) => (sbyte)value;
146130

131+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
147132
public static object Signed<T>(T value) => SignProcessor<T>.ToSignedFunc(value);
148133

134+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
149135
public static ulong Unsigned(long value) => (ulong)value;
150136

137+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
151138
public static uint Unsigned(int value) => (uint)value;
152139

140+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
153141
public static ushort Unsigned(short value) => (ushort)value;
154142

143+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
155144
public static byte Unsigned(sbyte value) => (byte)value;
156145

146+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
157147
public static object Unsigned<T>(T value) => SignProcessor<T>.ToUnsignedFunc(value);
158148

149+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
159150
public static T UnsignedAs<T>(object value) => SignProcessor<T>.ToUnsignedAsFunc(value);
160151
}
161152
}

0 commit comments

Comments
 (0)