static ContextCompressData WriteBits(int numbits, int value, ContextCompressData data) { for (var i = 0; i < numbits; i++) { data = WriteBit(value & 1, data); value = value >> 1; } return(data); }
static ContextCompressData WriteBit(int value, ContextCompressData 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); }
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 ContextCompressData WriteBits(int numbits, int value, ContextCompressData data) { for (var i = 0; i < numbits; i++) { data = WriteBit(value & 1, data); value = value >> 1; } return data; }
private static ContextCompressData WriteBit(int value, ContextCompressData 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; }
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); }