Example #1
0
        static ContextCompress ProduceW(ContextCompress context)
        {
            if (context.DictionaryToCreate.ContainsKey(context.W))
            {
                if (context.W[0] < 256)
                {
                    context.Data = WriteBits(context.NumBits, 0, context.Data);
                    context.Data = WriteBits(8, context.W[0], context.Data);
                }
                else
                {
                    context.Data = WriteBits(context.NumBits, 1, context.Data);
                    context.Data = WriteBits(16, context.W[0], context.Data);
                }

                context = DecrementEnlargeIn(context);
                context.DictionaryToCreate.Remove(context.W);
            }
            else
            {
                context.Data = WriteBits(context.NumBits, context.Dictionary[context.W], context.Data);
            }

            return(context);
        }
Example #2
0
 static ContextCompress DecrementEnlargeIn(ContextCompress context)
 {
     context.EnlargeIn--;
     if (context.EnlargeIn == 0)
     {
         context.EnlargeIn = (int)Math.Pow(2, context.NumBits);
         context.NumBits++;
     }
     return(context);
 }
Example #3
0
        public static string Compress(string uncompressed)
        {
            var context = new ContextCompress();
            var data    = new ContextCompressData();

            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;

            foreach (char c in uncompressed)
            {
                context.C = c.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++;
                }
            }

            return(context.Data.Str);
        }
        private static ContextCompress ProduceW(ContextCompress context)
        {
            if (context.dictionaryToCreate.ContainsKey(context.w))
            {
                if (context.w[0] < 256)
                {
                    context.data = WriteBits(context.numBits, 0, context.data);
                    context.data = WriteBits(8, context.w[0], context.data);
                }
                else
                {
                    context.data = WriteBits(context.numBits, 1, context.data);
                    context.data = WriteBits(16, context.w[0], context.data);
                }

                context = DecrementEnlargeIn(context);
                context.dictionaryToCreate.Remove(context.w);
            }
            else
            {
                context.data = WriteBits(context.numBits, context.dictionary[context.w], context.data);
            }

            return context;
        }
 private static ContextCompress DecrementEnlargeIn(ContextCompress context)
 {
     context.enlargeIn--;
     if (context.enlargeIn == 0)
     {
         context.enlargeIn = (int)Math.Pow(2, context.numBits);
         context.numBits++;
     }
     return context;
 }
        public static string Compress(string uncompressed)
        {
            var context = new ContextCompress();
            var data = new ContextCompressData();

            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 (var 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;
                    }
                    context.data.position++;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return context.data.str;
        }
        public static string Compress(string uncompressed)
        {
            var context = new ContextCompress();
            var data    = new ContextCompressData();

            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 (var 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;
                    }
                    context.data.position++;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return(context.data.str);
        }
Example #8
0
        public static string Compress(string uncompressed)
        {
            var context = new ContextCompress();
            var data    = new ContextCompressData();

            context.Dictionary         = new Dictionary <string, int>();
            context.DictionaryToCreate = new Dictionary <string, bool>();
            context.C         = String.Empty;
            context.Wc        = String.Empty;
            context.W         = String.Empty;
            context.EnlargeIn = 2;
            context.DictSize  = 3;
            context.NumBits   = 2;
            data.Str          = String.Empty;
            data.Val          = 0;
            data.Position     = 0;
            context.Data      = data;

            try
            {
                for (var 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;
                    }

                    context.Data.Position++;
                }
            }
            catch (Exception ex)
            {
                return(ex.Message);
            }

            return(context.Data.Str);
        }