コード例 #1
0
        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);
            }
            //-----------------------------------------------------------------
        }
コード例 #2
0
        //---------------------------------------------------------------------
        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);
        }
コード例 #3
0
 object IConvertible.ToType(Type conversionType, IFormatProvider provider)
 {
     return(TcpConvert.DefaultToType(this, conversionType, provider));
 }