コード例 #1
0
        /// <summary>
        /// Send bytes through noisy channel
        /// </summary>
        /// <param name="bytes">Text to send</param>
        /// <param name="channel">Noisy channel</param>
        /// <returns>Resulting bytes together with error information</returns>
        public static async Task <ByteArrayResult> SendBytes(byte[] bytes, ICommunicationChannel channel)
        {
            var bits = new BitStream(bytes);
            var bitsAfterTransmission = await Task.FromResult(channel.Transmit(bits));

            var result = await Task.FromResult(bitsAfterTransmission.ToByteArray());

            return(new ByteArrayResult
            {
                Errors = bits.Difference(bitsAfterTransmission),
                Result = result
            });
        }
コード例 #2
0
        /// <summary>
        /// Sends text through noisy channel
        /// </summary>
        /// <param name="text">A text to send</param>
        /// <param name="channel">Noisy channel</param>
        /// <returns>Resulting text together with error information</returns>
        public static async Task <StringResult> SendText(string text, ICommunicationChannel channel)
        {
            var bits = await Task.FromResult(textConverter.ToBitStream(text));

            var bitsAfterTransmission = await Task.FromResult(channel.Transmit(bits));

            var result = await Task.FromResult(textConverter.FromBitStream(bitsAfterTransmission));


            return(new StringResult
            {
                Errors = bits.Difference(bitsAfterTransmission),
                Result = result
            });
        }
コード例 #3
0
        /// <summary>
        /// Encodes a given vector
        /// </summary>
        /// <param name="vector">A vector to encode</param>
        /// <param name="encoder">Encoder to encode vector with</param>
        /// <returns>Resulting text</returns>
        public static async Task <StringResultWithErrorPositions> EncodeAndSendVector(string vector, IEncoder encoder, ICommunicationChannel channel)
        {
            var bits = vectorConverter.ToBitStream(vector);

            var encodedBits = await Task.FromResult(encoder.Encode(bits));

            var bitsAfterTransmission = await Task.FromResult(channel.Transmit(encodedBits));

            var errors = encodedBits.DifferenceWithPositions(bitsAfterTransmission);

            var encodedVector = vectorConverter.FromBitStream(encodedBits);

            return(new StringResultWithErrorPositions
            {
                ErrorPositions = errors,
                Errors = errors.Count,
                Result = encodedVector
            });
        }