namespace Sandbox;
internal partial class BytePack
{
///
/// A value array is useful because we only have to write the header once, and it's a single
/// block of memory to read. Useful.
///
class ValueArrayPacker : Packer
{
internal override Identifier Header => Identifier.ArrayValue;
public override void Write( ref ByteStream bs, object obj )
{
if ( obj is not Array array ) throw new NotSupportedException();
bs.Write( array.Length );
var et = array.GetType().GetElementType();
var w = GetHandlerFor( et );
w.WriteTypeIdentifier( ref bs, et );
bs.WriteValueArray( array );
}
public override object Read( ref ByteStream bs )
{
var len = bs.Read();
var handler = GetHandlerFor( ref bs );
var array = Array.CreateInstance( handler.TargetType, len );
bs.ReadValueArray( array );
return array;
}
}
}