Skip to content

Commit 11a27c6

Browse files
committed
Added Parsers Templates in LZ77&RLE
1 parent b81ed8e commit 11a27c6

2 files changed

Lines changed: 30 additions & 10 deletions

File tree

AlgorithmsLibrary/LZ77Algm/LZ77Algm.cs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,16 +104,25 @@ private static double CalculateCompressionRatio(string sourceString, List<CodeBl
104104
return Math.Round(countBitsSourceString / countBitsCompressionString, 3);
105105
}
106106

107+
private static List<CodeBlock> ParseEncodedString(string encodedString)
108+
{
109+
List<CodeBlock> encodedStringParsed = new List<CodeBlock>();
110+
111+
return encodedStringParsed;
112+
}
113+
107114
/// <summary>
108115
/// Decoding strings compressed by the LZ77 algorithm
109116
/// </summary>
110117
/// <param name="encodedString">Compressed (encoded) string</param>
111118
/// <returns>Decoded string</returns>
112-
public static IAlgmEncoded<string> Decode(List<CodeBlock> encodedString)
119+
public static IAlgmEncoded<string> Decode(string encodedString)
113120
{
121+
var encodedStringParsed = ParseEncodedString(encodedString);
122+
114123
StringBuilder resultDecoding = new StringBuilder(string.Empty);
115124

116-
foreach (CodeBlock codeBlock in encodedString)
125+
foreach (CodeBlock codeBlock in encodedStringParsed)
117126
{
118127
if (codeBlock.Length > 0)
119128
{
@@ -128,7 +137,7 @@ public static IAlgmEncoded<string> Decode(List<CodeBlock> encodedString)
128137
resultDecoding.Remove(resultDecoding.Length - 1, 1);
129138

130139
var decodedString = resultDecoding.ToString();
131-
return new EncodedMessage<string>(decodedString, CalculateCompressionRatio(decodedString, encodedString));
140+
return new EncodedMessage<string>(decodedString, CalculateCompressionRatio(decodedString, encodedStringParsed));
132141
}
133142
}
134143

AlgorithmsLibrary/RLEAlgmBWT/RLEAlgmBWT.cs

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,23 +37,34 @@ public static IAlgmEncoded<List<RLECodeBlock>> Encode(string inputString)
3737
return new EncodedMessage<List<RLECodeBlock>>(result, CalculateCompressionRatio(inputString, result));
3838
}
3939

40-
public static IAlgmEncoded<string> Decode(List<RLECodeBlock> encodedString)
40+
private static List<RLECodeBlock> ParseEncodedString(string encodedString)
4141
{
42-
if (encodedString.Count < 2)
42+
List<RLECodeBlock> encodedStringParsed = new List<RLECodeBlock>();
43+
44+
return encodedStringParsed;
45+
}
46+
47+
public static IAlgmEncoded<string> Decode(string encodedString)
48+
{
49+
var encodedStringParsed = ParseEncodedString(encodedString);
50+
51+
//0 блок хранит номер строки в матрице BWT
52+
//1 блок хранит хотя бы один символ
53+
if (encodedStringParsed.Count < 2)
4354
{
4455
throw new ArgumentNullException("string for decoding is null or empty");
4556
}
4657

4758
StringBuilder decompressedString = new StringBuilder(string.Empty);
4859

49-
for (int i = 1; i < encodedString.Count; i++)
60+
for (int i = 1; i < encodedStringParsed.Count; i++)
5061
{
51-
for (int j = 0; j < encodedString[i].Repeats; j++)
52-
decompressedString.Append(encodedString[i].Symbol);
62+
for (int j = 0; j < encodedStringParsed[i].Repeats; j++)
63+
decompressedString.Append(encodedStringParsed[i].Symbol);
5364
}
5465

55-
var result = BurrowsWheelerTransform.Decode(decompressedString.ToString(), encodedString[0].Repeats);
56-
return new EncodedMessage<string>(result, CalculateCompressionRatio(result, encodedString));
66+
var result = BurrowsWheelerTransform.Decode(decompressedString.ToString(), encodedStringParsed[0].Repeats);
67+
return new EncodedMessage<string>(result, CalculateCompressionRatio(result, encodedStringParsed));
5768
}
5869

5970
private static double CalculateCompressionRatio(string sourceString, List<RLECodeBlock> compressionString)

0 commit comments

Comments
 (0)