Пример #1
0
        private static Context_Compress_Data writeBits(int numbits, int value, Context_Compress_Data data)
        {
            for (var i = 0; i < numbits; i++)
            {
                data  = writeBit(value & 1, data);
                value = value >> 1;
            }

            return(data);
        }
Пример #2
0
        private static Context_Compress_Data writeBits(int numbits, int value, Context_Compress_Data data)
        {

            for (var i = 0; i < numbits; i++)
            {
                data = writeBit(value & 1, data);
                value = value >> 1;
            }

            return data;
        }
Пример #3
0
        private static Context_Compress_Data writeBit(int value, Context_Compress_Data data)
        {
            data.val = (data.val << 1) | value;

            if (data.position == 15)
            {
                data.position = 0;
                data.str += (char)data.val;
                data.val = 0;
            }
            else
                data.position++;

            return data;
        }
Пример #4
0
        private static Context_Compress_Data writeBit(int value, Context_Compress_Data data)
        {
            data.val = (data.val << 1) | value;

            if (data.position == 15)
            {
                data.position = 0;
                data.str     += (char)data.val;
                data.val      = 0;
            }
            else
            {
                data.position++;
            }

            return(data);
        }
Пример #5
0
        public static string compress(string uncompressed)
        {
            Context_Compress      context = new Context_Compress();
            Context_Compress_Data data    = new Context_Compress_Data();

            context.dictionary         = new Dictionary <string, int>();
            context.dictionaryToCreate = new Dictionary <string, bool>();
            context.c         = "";
            context.wc        = "";
            context.w         = "";
            context.enlargeIn = 2;
            context.dictSize  = 3;
            context.numBits   = 2;

            data.str      = "";
            data.val      = 0;
            data.position = 0;

            context.data = data;

            try
            {
                for (int i = 0; i < uncompressed.Length; i++)
                {
                    context.c = uncompressed[i].ToString();

                    if (!context.dictionary.ContainsKey(context.c))
                    {
                        context.dictionary[context.c]         = context.dictSize++;
                        context.dictionaryToCreate[context.c] = true;
                    }
                    ;

                    context.wc = context.w + context.c;

                    if (context.dictionary.ContainsKey(context.wc))
                    {
                        context.w = context.wc;
                    }
                    else
                    {
                        context = produceW(context);
                        context = decrementEnlargeIn(context);
                        context.dictionary[context.wc] = context.dictSize++;
                        context.w = context.c;
                    }
                }

                if (context.w != "")
                {
                    context = produceW(context);
                }

                // Mark the end of the stream
                context.data = writeBits(context.numBits, 2, context.data);

                // Flush the last char
                while (true)
                {
                    context.data.val = (context.data.val << 1);
                    if (context.data.position == 15)
                    {
                        context.data.str += (char)context.data.val;
                        break;
                    }
                    else
                    {
                        context.data.position++;
                    }
                }
            }
            catch (Exception ex)
            {
                return(ex.Message);
            }

            return(context.data.str);
        }
Пример #6
0
        public static string compress(string uncompressed)
        {

            Context_Compress context = new Context_Compress();
            Context_Compress_Data data = new Context_Compress_Data();

            context.dictionary = new Dictionary<string, int>();
            context.dictionaryToCreate = new Dictionary<string, bool>();
            context.c = "";
            context.wc = "";
            context.w = "";
            context.enlargeIn = 2;
            context.dictSize = 3;
            context.numBits = 2;

            data.str = "";
            data.val = 0;
            data.position = 0;

            context.data = data;

            try
            {
                for (int i = 0; i < uncompressed.Length; i++)
                {
                    context.c = uncompressed[i].ToString();

                    if (!context.dictionary.ContainsKey(context.c))
                    {
                        context.dictionary[context.c] = context.dictSize++;
                        context.dictionaryToCreate[context.c] = true;
                    };

                    context.wc = context.w + context.c;

                    if (context.dictionary.ContainsKey(context.wc))
                    {
                        context.w = context.wc;
                    }
                    else
                    {
                        context = produceW(context);
                        context = decrementEnlargeIn(context);
                        context.dictionary[context.wc] = context.dictSize++;
                        context.w = context.c;
                    }
                }

                if (context.w != "")
                {
                    context = produceW(context);
                }

                // Mark the end of the stream
                context.data = writeBits(context.numBits, 2, context.data);

                // Flush the last char
                while (true)
                {
                    context.data.val = (context.data.val << 1);
                    if (context.data.position == 15)
                    {
                        context.data.str += (char)context.data.val;
                        break;
                    }
                    else
                        context.data.position++;
                }

            }
            catch (Exception ex)
            {
                return ex.Message;
            }

            return context.data.str;
        }