public override void Write(ITcpTypeData dataSource, ref int startPositionInDataSource) { if (dataSource == null) { throw new ArgumentNullException(nameof(dataSource)); } if (startPositionInDataSource < 0 || startPositionInDataSource > dataSource.Length) { throw new ArgumentOutOfRangeException(nameof(startPositionInDataSource)); } //----------------------------------------------------------------- var count = CreateCount(_bigEndian); count.Write(dataSource, ref startPositionInDataSource); var dataLength = TcpConvert.ToInt32(count); //----------------------------------------------------------------- if (dataSource.Length < (startPositionInDataSource + dataLength)) { throw new ArgumentException(string.Empty, nameof(dataSource)); } //----------------------------------------------------------------- ClearChilds(); //----------------------------------------------------------------- for (var i = 0; i < dataLength; i++) { var item = CreateItem(_bigEndian, _encoding); item.Write(dataSource, ref startPositionInDataSource); AddChild(item); } //----------------------------------------------------------------- }
//--------------------------------------------------------------------- public override void Read(byte[] dataTarget, ref int startPositionInDataTarget) { if (dataTarget == null) { throw new ArgumentNullException(nameof(dataTarget)); } if (startPositionInDataTarget < 0 || startPositionInDataTarget > dataTarget.Length) { throw new ArgumentOutOfRangeException(nameof(startPositionInDataTarget)); } if (dataTarget.Length < (startPositionInDataTarget + DataLength)) { throw new ArgumentException(string.Empty, nameof(startPositionInDataTarget)); } //----------------------------------------------------------------- var count = CreateCount(_bigEndian); TcpConvert.ToValueTcpType(count, GetCount); count.Read(dataTarget, ref startPositionInDataTarget); //----------------------------------------------------------------- base.Read(dataTarget, ref startPositionInDataTarget); }
object IConvertible.ToType(Type conversionType, IFormatProvider provider) { return(TcpConvert.DefaultToType(this, conversionType, provider)); }