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); }
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; 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); }
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); }