@@ -117,16 +117,26 @@ private void Push<T>(T b)
117117 public void WriteLong ( long l ) => Push ( ZigZagEncode ( l , 8 ) ) ;
118118 public void WriteString ( string s ) => Push ( s ) ;
119119 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 ) ;
130140 public void WriteBits ( byte value , int bits ) => Push ( new Partial ( ReadNBits ( value , 0 , bits % 8 ) , ( byte ) ( bits % 8 ) ) ) ; // Suggestion: store (bits % 8) result?
131141 public void WriteWriter ( BitWriter writer )
132142 {
@@ -144,6 +154,14 @@ private void PushArray<T>(T[] t, bool knownSize = false)
144154 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 ) ;
145155 }
146156
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+
147165 /// <summary>
148166 /// Serializes data, allocates an array and returns it
149167 /// </summary>
0 commit comments