@@ -116,16 +116,26 @@ private void Push<T>(T b)
116
116
public void WriteLong ( long l ) => Push ( ZigZagEncode ( l , 8 ) ) ;
117
117
public void WriteString ( string s ) => Push ( s ) ;
118
118
public void WriteAlignBits ( ) => Push < object > ( null ) ;
119
- public void WriteFloatArray ( float [ ] f , bool known = false ) => PushArray ( f , known ) ;
120
- public void WriteDoubleArray ( double [ ] d , bool known = false ) => PushArray ( d , known ) ;
121
- public void WriteByteArray ( byte [ ] b , bool known = false ) => PushArray ( b , known ) ;
122
- public void WriteUShortArray ( ushort [ ] s , bool known = false ) => PushArray ( s , known ) ;
123
- public void WriteUIntArray ( uint [ ] i , bool known = false ) => PushArray ( i , known ) ;
124
- public void WriteULongArray ( ulong [ ] l , bool known = false ) => PushArray ( l , known ) ;
125
- public void WriteSByteArray ( sbyte [ ] b , bool known = false ) => PushArray ( b , known ) ;
126
- public void WriteShortArray ( short [ ] s , bool known = false ) => PushArray ( s , known ) ;
127
- public void WriteIntArray ( int [ ] i , bool known = false ) => PushArray ( i , known ) ;
128
- public void WriteLongArray ( long [ ] l , bool known = false ) => PushArray ( l , known ) ;
119
+ public void WriteFloatArray ( float [ ] f , bool known = false ) => PushArray ( f , known ) ;
120
+ public void WriteFloatArray ( float [ ] f , int startIndex , int length , bool known = false ) => PushArray ( f , startIndex , length , known ) ;
121
+ public void WriteDoubleArray ( double [ ] d , bool known = false ) => PushArray ( d , known ) ;
122
+ public void WriteDoubleArray ( double [ ] d , int startIndex , int length , bool known = false ) => PushArray ( d , startIndex , length , known ) ;
123
+ public void WriteByteArray ( byte [ ] b , bool known = false ) => PushArray ( b , known ) ;
124
+ public void WriteByteArray ( byte [ ] b , int startIndex , int length , bool known = false ) => PushArray ( b , startIndex , length , known ) ;
125
+ public void WriteUShortArray ( ushort [ ] s , bool known = false ) => PushArray ( s , known ) ;
126
+ public void WriteUShortArray ( ushort [ ] s , int startIndex , int length , bool known = false ) => PushArray ( s , startIndex , length , known ) ;
127
+ public void WriteUIntArray ( uint [ ] i , bool known = false ) => PushArray ( i , known ) ;
128
+ public void WriteUIntArray ( uint [ ] i , int startIndex , int length , bool known = false ) => PushArray ( i , startIndex , length , known ) ;
129
+ public void WriteULongArray ( ulong [ ] l , bool known = false ) => PushArray ( l , known ) ;
130
+ public void WriteULongArray ( ulong [ ] l , int startIndex , int length , bool known = false ) => PushArray ( l , startIndex , length , known ) ;
131
+ public void WriteSByteArray ( sbyte [ ] b , bool known = false ) => PushArray ( b , known ) ;
132
+ public void WriteSByteArray ( sbyte [ ] b , int startIndex , int length , bool known = false ) => PushArray ( b , startIndex , length , known ) ;
133
+ public void WriteShortArray ( short [ ] s , bool known = false ) => PushArray ( s , known ) ;
134
+ public void WriteShortArray ( short [ ] s , int startIndex , int length , bool known = false ) => PushArray ( s , startIndex , length , known ) ;
135
+ public void WriteIntArray ( int [ ] i , bool known = false ) => PushArray ( i , known ) ;
136
+ public void WriteIntArray ( int [ ] i , int startIndex , int length , bool known = false ) => PushArray ( i , startIndex , length , known ) ;
137
+ public void WriteLongArray ( long [ ] l , bool known = false ) => PushArray ( l , known ) ;
138
+ public void WriteLongArray ( long [ ] l , int startIndex , int length , bool known = false ) => PushArray ( l , startIndex , length , known ) ;
129
139
public void WriteBits ( byte value , int bits ) => Push ( new Partial ( ReadNBits ( value , 0 , bits % 8 ) , ( byte ) ( bits % 8 ) ) ) ; // Suggestion: store (bits % 8) result?
130
140
public void WriteWriter ( BitWriter writer )
131
141
{
@@ -143,6 +153,14 @@ private void PushArray<T>(T[] t, bool knownSize = false)
143
153
foreach ( T t1 in t ) Push ( signed ? ( object ) ZigZagEncode ( t1 as long ? ?? t1 as int ? ?? t1 as short ? ?? t1 as sbyte ? ?? 0 , size ) : ( object ) t1 ) ;
144
154
}
145
155
156
+ private void PushArray < T > ( T [ ] t , int startIndex , int length , bool knownSize = false )
157
+ {
158
+ if ( ! knownSize ) Push ( ( uint ) t . Length ) ;
159
+ bool signed = IsSigned ( t . GetType ( ) . GetElementType ( ) ) ;
160
+ int size = Marshal . SizeOf ( t . GetType ( ) . GetElementType ( ) ) ;
161
+ for ( int i = startIndex ; i < length ; i ++ ) Push ( signed ? ( object ) ZigZagEncode ( t [ i ] as long ? ?? t [ i ] as int ? ?? t [ i ] as short ? ?? t [ i ] as sbyte ? ?? 0 , size ) : ( object ) t [ i ] ) ;
162
+ }
163
+
146
164
/// <summary>
147
165
/// Serializes data, allocates an array and returns it
148
166
/// </summary>
0 commit comments