@@ -5,58 +5,110 @@ namespace Enyim.Caching.Memcached.Protocol.Binary
55{
66 public static class BinaryConverter
77 {
8- public static ushort DecodeUInt16 ( Span < byte > buffer , int offset )
8+ public static unsafe ushort DecodeUInt16 ( byte [ ] buffer , int offset )
99 {
1010 return ( ushort ) ( ( buffer [ offset ] << 8 ) + buffer [ offset + 1 ] ) ;
1111 }
1212
13- public static int DecodeInt32 ( Span < byte > buffer , int offset )
13+ public static unsafe ushort DecodeUInt16 ( byte * buffer , int offset )
1414 {
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+ }
1639
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+ }
1846 }
1947
20- public static unsafe ulong DecodeUInt64 ( Span < byte > buffer , int offset )
48+ public static unsafe ulong DecodeUInt64 ( byte * buffer , int offset )
2149 {
22- var slice = buffer . Slice ( offset ) ;
50+ buffer += offset ;
2351
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 ] ) ;
2654
2755 return ( ( ulong ) part1 << 32 ) | part2 ;
2856 }
2957
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 )
3167 {
32- var slice = buffer . Slice ( offset ) ;
68+ byte * ptr = buffer + offset ;
3369
34- slice [ 0 ] = ( byte ) ( value >> 8 ) ;
35- slice [ 1 ] = ( byte ) ( value & 255 ) ;
70+ ptr [ 0 ] = ( byte ) ( value >> 8 ) ;
71+ ptr [ 1 ] = ( byte ) ( value & 255 ) ;
3672 }
3773
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 )
3975 {
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 ;
4185
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 ) ;
4690 }
4791
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 )
4993 {
50- var slice = buffer . Slice ( offset ) ;
94+ fixed ( byte * bufferPtr = buffer )
95+ {
96+ EncodeUInt64 ( value , bufferPtr , offset ) ;
97+ }
98+ }
5199
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 ) ;
60112 }
61113
62114 public static byte [ ] EncodeKey ( string key )
0 commit comments