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