MultiByteCodec.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Core / CSharp / MS / Internal / Ink / InkSerializedFormat / MultiByteCodec.cs / 1 / MultiByteCodec.cs

                            using MS.Utility; 
using System;
using System.Runtime.InteropServices;
using System.Security;
using System.Globalization; 
using System.Windows;
using System.Windows.Input; 
using System.Windows.Ink; 
using System.Collections.Generic;
using MS.Internal.Ink.InkSerializedFormat; 
using System.Diagnostics;

using SR = MS.Internal.PresentationCore.SR;
using SRID = MS.Internal.PresentationCore.SRID; 

namespace MS.Internal.Ink.InkSerializedFormat 
{ 
    /// 
    /// MultiByteCodec 
    /// 
    internal class MultiByteCodec
    {
        ///  
        /// MultiByteCodec
        ///  
        internal MultiByteCodec() 
        {
 
        }

        /// 
        /// Encode 
        /// 
        ///  
        ///  
        internal void Encode(uint data, List output)
        { 
            if (output == null)
            {
                throw new ArgumentNullException("output");
            } 
            while (data > 0x7f)
            { 
                byte byteToAdd = (byte)(0x80 | (byte)data & 0x7f); 
                output.Add(byteToAdd);
                data >>= 7; 
            }
            byte finalByteToAdd = (byte)(data & 0x7f);
            output.Add(finalByteToAdd);
        } 

        ///  
        /// SignEncode 
        /// 
        ///  
        /// 
        internal void SignEncode(int data, List output)
        {
            uint xfData = 0; 
            if (data < 0)
            { 
                xfData = (uint)( (-data << 1) | 0x01 ); 
            }
            else 
            {
                xfData = (uint)data << 1;
            }
            Encode(xfData, output); 
        }
 
        ///  
        /// Decode
        ///  
        /// 
        /// 
        /// 
        ///  
        internal uint Decode(byte[] input, int inputIndex, ref uint data)
        { 
            Debug.Assert(input != null); 
            Debug.Assert(inputIndex < input.Length);
 
            // We care about first 5 bytes
            uint cb = (input.Length - inputIndex > 5) ? 5 : (uint)(input.Length - inputIndex);
            uint index = 0;
            data = 0; 
            while ((index < cb) && (input[index] > 0x7f))
            { 
                int leftShift = (int)(index * 7); 
                data |= (uint)((input[index] & 0x7f) << leftShift);
                ++index; 
            }
            if (index < cb)
            {
                int leftShift = (int)(index * 7); 
                data |= (uint)((input[index] & 0x7f) << leftShift);
            } 
            else 
            {
                throw new ArgumentException(StrokeCollectionSerializer.ISFDebugMessage("invalid input in MultiByteCodec.Decode")); 
            }
            return (index + 1);
        }
 

        ///  
        /// SignDecode 
        /// 
        ///  
        /// 
        /// 
        /// 
        internal uint SignDecode(byte[] input, int inputIndex, ref int data) 
        {
            Debug.Assert(input != null); //already validated at the AlgoModule level 
            if (inputIndex >= input.Length) 
            {
                throw new ArgumentOutOfRangeException("inputIndex"); 
            }
            uint xfData = 0;
            uint cb = Decode(input, inputIndex, ref xfData);
            data = (0 != (0x01 & xfData)) ? -(int)(xfData >> 1) : (int)(xfData >> 1); 
            return cb;
        } 
 
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
using MS.Utility; 
using System;
using System.Runtime.InteropServices;
using System.Security;
using System.Globalization; 
using System.Windows;
using System.Windows.Input; 
using System.Windows.Ink; 
using System.Collections.Generic;
using MS.Internal.Ink.InkSerializedFormat; 
using System.Diagnostics;

using SR = MS.Internal.PresentationCore.SR;
using SRID = MS.Internal.PresentationCore.SRID; 

namespace MS.Internal.Ink.InkSerializedFormat 
{ 
    /// 
    /// MultiByteCodec 
    /// 
    internal class MultiByteCodec
    {
        ///  
        /// MultiByteCodec
        ///  
        internal MultiByteCodec() 
        {
 
        }

        /// 
        /// Encode 
        /// 
        ///  
        ///  
        internal void Encode(uint data, List output)
        { 
            if (output == null)
            {
                throw new ArgumentNullException("output");
            } 
            while (data > 0x7f)
            { 
                byte byteToAdd = (byte)(0x80 | (byte)data & 0x7f); 
                output.Add(byteToAdd);
                data >>= 7; 
            }
            byte finalByteToAdd = (byte)(data & 0x7f);
            output.Add(finalByteToAdd);
        } 

        ///  
        /// SignEncode 
        /// 
        ///  
        /// 
        internal void SignEncode(int data, List output)
        {
            uint xfData = 0; 
            if (data < 0)
            { 
                xfData = (uint)( (-data << 1) | 0x01 ); 
            }
            else 
            {
                xfData = (uint)data << 1;
            }
            Encode(xfData, output); 
        }
 
        ///  
        /// Decode
        ///  
        /// 
        /// 
        /// 
        ///  
        internal uint Decode(byte[] input, int inputIndex, ref uint data)
        { 
            Debug.Assert(input != null); 
            Debug.Assert(inputIndex < input.Length);
 
            // We care about first 5 bytes
            uint cb = (input.Length - inputIndex > 5) ? 5 : (uint)(input.Length - inputIndex);
            uint index = 0;
            data = 0; 
            while ((index < cb) && (input[index] > 0x7f))
            { 
                int leftShift = (int)(index * 7); 
                data |= (uint)((input[index] & 0x7f) << leftShift);
                ++index; 
            }
            if (index < cb)
            {
                int leftShift = (int)(index * 7); 
                data |= (uint)((input[index] & 0x7f) << leftShift);
            } 
            else 
            {
                throw new ArgumentException(StrokeCollectionSerializer.ISFDebugMessage("invalid input in MultiByteCodec.Decode")); 
            }
            return (index + 1);
        }
 

        ///  
        /// SignDecode 
        /// 
        ///  
        /// 
        /// 
        /// 
        internal uint SignDecode(byte[] input, int inputIndex, ref int data) 
        {
            Debug.Assert(input != null); //already validated at the AlgoModule level 
            if (inputIndex >= input.Length) 
            {
                throw new ArgumentOutOfRangeException("inputIndex"); 
            }
            uint xfData = 0;
            uint cb = Decode(input, inputIndex, ref xfData);
            data = (0 != (0x01 & xfData)) ? -(int)(xfData >> 1) : (int)(xfData >> 1); 
            return cb;
        } 
 
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK