@@ -5,58 +5,110 @@ namespace Enyim.Caching.Memcached.Protocol.Binary
5
5
{
6
6
public static class BinaryConverter
7
7
{
8
- public static ushort DecodeUInt16 ( Span < byte > buffer , int offset )
8
+ public static unsafe ushort DecodeUInt16 ( byte [ ] buffer , int offset )
9
9
{
10
10
return ( ushort ) ( ( buffer [ offset ] << 8 ) + buffer [ offset + 1 ] ) ;
11
11
}
12
12
13
- public static int DecodeInt32 ( Span < byte > buffer , int offset )
13
+ public static unsafe ushort DecodeUInt16 ( byte * buffer , int offset )
14
14
{
15
- var slice = buffer . Slice ( offset ) ;
15
+ return ( ushort ) ( ( buffer [ offset ] << 8 ) + buffer [ offset + 1 ] ) ;
16
+ }
17
+
18
+ public static unsafe int DecodeInt32 ( ArraySegment < byte > segment , int offset )
19
+ {
20
+ fixed ( byte * buffer = segment . Array )
21
+ {
22
+ byte * ptr = buffer + segment . Offset + offset ;
23
+
24
+ return DecodeInt32 ( buffer , 0 ) ;
25
+ }
26
+ }
27
+
28
+ public static unsafe int DecodeInt32 ( byte * buffer , int offset )
29
+ {
30
+ buffer += offset ;
31
+
32
+ return ( buffer [ 0 ] << 24 ) | ( buffer [ 1 ] << 16 ) | ( buffer [ 2 ] << 8 ) | buffer [ 3 ] ;
33
+ }
34
+
35
+ public static unsafe int DecodeInt32 ( byte [ ] buffer , int offset )
36
+ {
37
+ return ( buffer [ offset ] << 24 ) | ( buffer [ offset + 1 ] << 16 ) | ( buffer [ offset + 2 ] << 8 ) | buffer [ offset + 3 ] ;
38
+ }
16
39
17
- return ( slice [ 0 ] << 24 ) | ( slice [ 1 ] << 16 ) | ( slice [ 2 ] << 8 ) | slice [ 3 ] ;
40
+ public static unsafe ulong DecodeUInt64 ( byte [ ] buffer , int offset )
41
+ {
42
+ fixed ( byte * ptr = buffer )
43
+ {
44
+ return DecodeUInt64 ( ptr , offset ) ;
45
+ }
18
46
}
19
47
20
- public static unsafe ulong DecodeUInt64 ( Span < byte > buffer , int offset )
48
+ public static unsafe ulong DecodeUInt64 ( byte * buffer , int offset )
21
49
{
22
- var slice = buffer . Slice ( offset ) ;
50
+ buffer += offset ;
23
51
24
- var part1 = ( uint ) ( ( slice [ 0 ] << 24 ) | ( slice [ 1 ] << 16 ) | ( slice [ 2 ] << 8 ) | slice [ 3 ] ) ;
25
- var part2 = ( uint ) ( ( slice [ 4 ] << 24 ) | ( slice [ 5 ] << 16 ) | ( slice [ 6 ] << 8 ) | slice [ 7 ] ) ;
52
+ var part1 = ( uint ) ( ( buffer [ 0 ] << 24 ) | ( buffer [ 1 ] << 16 ) | ( buffer [ 2 ] << 8 ) | buffer [ 3 ] ) ;
53
+ var part2 = ( uint ) ( ( buffer [ 4 ] << 24 ) | ( buffer [ 5 ] << 16 ) | ( buffer [ 6 ] << 8 ) | buffer [ 7 ] ) ;
26
54
27
55
return ( ( ulong ) part1 << 32 ) | part2 ;
28
56
}
29
57
30
- public static unsafe void EncodeUInt16 ( uint value , Span < byte > buffer , int offset )
58
+ public static unsafe void EncodeUInt16 ( uint value , byte [ ] buffer , int offset )
59
+ {
60
+ fixed ( byte * bufferPtr = buffer )
61
+ {
62
+ EncodeUInt16 ( value , bufferPtr , offset ) ;
63
+ }
64
+ }
65
+
66
+ public static unsafe void EncodeUInt16 ( uint value , byte * buffer , int offset )
31
67
{
32
- var slice = buffer . Slice ( offset ) ;
68
+ byte * ptr = buffer + offset ;
33
69
34
- slice [ 0 ] = ( byte ) ( value >> 8 ) ;
35
- slice [ 1 ] = ( byte ) ( value & 255 ) ;
70
+ ptr [ 0 ] = ( byte ) ( value >> 8 ) ;
71
+ ptr [ 1 ] = ( byte ) ( value & 255 ) ;
36
72
}
37
73
38
- public static unsafe void EncodeUInt32 ( uint value , Span < byte > buffer , int offset )
74
+ public static unsafe void EncodeUInt32 ( uint value , byte [ ] buffer , int offset )
39
75
{
40
- var slice = buffer . Slice ( offset ) ;
76
+ fixed ( byte * bufferPtr = buffer )
77
+ {
78
+ EncodeUInt32 ( value , bufferPtr , offset ) ;
79
+ }
80
+ }
81
+
82
+ public static unsafe void EncodeUInt32 ( uint value , byte * buffer , int offset )
83
+ {
84
+ byte * ptr = buffer + offset ;
41
85
42
- slice [ 0 ] = ( byte ) ( value >> 24 ) ;
43
- slice [ 1 ] = ( byte ) ( value >> 16 ) ;
44
- slice [ 2 ] = ( byte ) ( value >> 8 ) ;
45
- slice [ 3 ] = ( byte ) ( value & 255 ) ;
86
+ ptr [ 0 ] = ( byte ) ( value >> 24 ) ;
87
+ ptr [ 1 ] = ( byte ) ( value >> 16 ) ;
88
+ ptr [ 2 ] = ( byte ) ( value >> 8 ) ;
89
+ ptr [ 3 ] = ( byte ) ( value & 255 ) ;
46
90
}
47
91
48
- public static unsafe void EncodeUInt64 ( ulong value , Span < byte > buffer , int offset )
92
+ public static unsafe void EncodeUInt64 ( ulong value , byte [ ] buffer , int offset )
49
93
{
50
- var slice = buffer . Slice ( offset ) ;
94
+ fixed ( byte * bufferPtr = buffer )
95
+ {
96
+ EncodeUInt64 ( value , bufferPtr , offset ) ;
97
+ }
98
+ }
51
99
52
- slice [ 0 ] = ( byte ) ( value >> 56 ) ;
53
- slice [ 1 ] = ( byte ) ( value >> 48 ) ;
54
- slice [ 2 ] = ( byte ) ( value >> 40 ) ;
55
- slice [ 3 ] = ( byte ) ( value >> 32 ) ;
56
- slice [ 4 ] = ( byte ) ( value >> 24 ) ;
57
- slice [ 5 ] = ( byte ) ( value >> 16 ) ;
58
- slice [ 6 ] = ( byte ) ( value >> 8 ) ;
59
- slice [ 7 ] = ( byte ) ( value & 255 ) ;
100
+ public static unsafe void EncodeUInt64 ( ulong value , byte * buffer , int offset )
101
+ {
102
+ byte * ptr = buffer + offset ;
103
+
104
+ ptr [ 0 ] = ( byte ) ( value >> 56 ) ;
105
+ ptr [ 1 ] = ( byte ) ( value >> 48 ) ;
106
+ ptr [ 2 ] = ( byte ) ( value >> 40 ) ;
107
+ ptr [ 3 ] = ( byte ) ( value >> 32 ) ;
108
+ ptr [ 4 ] = ( byte ) ( value >> 24 ) ;
109
+ ptr [ 5 ] = ( byte ) ( value >> 16 ) ;
110
+ ptr [ 6 ] = ( byte ) ( value >> 8 ) ;
111
+ ptr [ 7 ] = ( byte ) ( value & 255 ) ;
60
112
}
61
113
62
114
public static byte [ ] EncodeKey ( string key )
0 commit comments