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