1
0
mirror of https://github.com/chylex/Brotli-Builder.git synced 2025-04-23 02:15:43 +02:00

Avoid creating unnecessary marker objects & tweak TitleMarker

This commit is contained in:
chylex 2019-11-01 17:46:41 +01:00
parent 4e7c08879c
commit 4c029e4676
11 changed files with 21 additions and 16 deletions

View File

@ -134,7 +134,7 @@ namespace BrotliLib.Brotli.Components.Contents{
icCommands.Add(InsertCopyCommand.Deserialize(reader, dataContext));
}while(dataContext.NeedsMoreData);
reader.MarkEnd(new TitleMarker("Command List"));
reader.MarkEnd(() => new TitleMarker("Command List"));
return new CompressedMetaBlockContents(header, icCommands, dataContext.BlockSwitchCommands);
}

View File

@ -71,7 +71,7 @@ namespace BrotliLib.Brotli.Components.Contents{
bytes[index] = reader.NextAlignedByte("byte");
}
reader.MarkEnd(new TitleMarker("Skipped Bytes"));
reader.MarkEnd(() => new TitleMarker("Skipped Bytes"));
return new PaddedEmptyMetaBlockContents(bytes);
}

View File

@ -42,7 +42,7 @@ namespace BrotliLib.Brotli.Components.Contents{
bytes[index] = reader.NextAlignedByte("byte");
}
reader.MarkEnd(new TitleMarker("Uncompressed Bytes"));
reader.MarkEnd(() => new TitleMarker("Uncompressed Bytes"));
context.State.OutputBytes(bytes);
return new UncompressedMetaBlockContents(bytes);

View File

@ -191,7 +191,7 @@ namespace BrotliLib.Brotli.Components.Header{
if (code <= runLengthCodeCount){
index += (1 << code) - 1 + reader.NextChunk(code);
reader.MarkEnd(new TextMarker("skip to index " + (index + 1)));
reader.MarkEnd(() => new TextMarker("skip to index " + (index + 1)));
continue;
}
else{
@ -199,7 +199,7 @@ namespace BrotliLib.Brotli.Components.Header{
}
}
reader.MarkEnd(new ValueMarker("CMAP" + context.Category.Id() + "[" + index + "]", contextMap[index]));
reader.MarkEnd(() => new ValueMarker("CMAP" + context.Category.Id() + "[" + index + "]", contextMap[index]));
}
if (reader.NextBit("IMTF")){

View File

@ -36,8 +36,7 @@ namespace BrotliLib.Brotli.Components.Header{
void AddMarkedSymbol(HuffmanGenerator<T>.Entry entry){
symbolEntries.Add(entry);
reader.MarkStart();
reader.MarkEnd(new ValueMarker("entry", entry));
reader.MarkValue("entry", () => entry);
}
while(bitSpaceRemaining > 0 && symbolIndex < symbolCount){
@ -61,7 +60,7 @@ namespace BrotliLib.Brotli.Components.Header{
skipCount = 8 * (skipCount - 2) + NextSkipData();
}
reader.MarkEnd(new ValueMarker("skip count", skipCount));
reader.MarkEnd(() => new ValueMarker("skip count", skipCount));
symbolIndex += skipCount;
}
@ -78,7 +77,7 @@ namespace BrotliLib.Brotli.Components.Header{
repeatCount = 4 * (repeatCount - 2) + NextRepeatData();
}
reader.MarkEnd(new ValueMarker("repeat count", repeatCount));
reader.MarkEnd(() => new ValueMarker("repeat count", repeatCount));
bitSpaceRemaining -= sumPerRepeat * repeatCount;
@ -95,7 +94,7 @@ namespace BrotliLib.Brotli.Components.Header{
}
}
reader.MarkEnd(new TitleMarker("Symbols"));
reader.MarkEnd(() => new TitleMarker("Symbols"));
return new HuffmanTree<T>(HuffmanGenerator<T>.FromBitCountsCanonical(symbolEntries));
}

View File

@ -124,11 +124,11 @@ namespace BrotliLib.Brotli.Components.Header{
if (type == 1){
tree = Simple.Deserialize(reader, context);
reader.MarkEnd(new TitleMarker("Simple Huffman Tree"));
reader.MarkEnd(() => new TitleMarker("Simple Huffman Tree"));
}
else{
tree = Complex.Deserialize(reader, context.ForComplexDeserialization(type));
reader.MarkEnd(new TitleMarker("Complex Huffman Tree"));
reader.MarkEnd(() => new TitleMarker("Complex Huffman Tree"));
}
return tree;

View File

@ -212,9 +212,9 @@ namespace BrotliLib.Brotli.Components{
reader.MarkStart();
mb.DeserializeContents(reader, context);
reader.MarkEnd(new TitleMarker("Contents"));
reader.MarkEnd(() => new TitleMarker("Contents"));
reader.MarkEnd(new TitleMarker("Meta-Block (" + mb.GetType().Name + ")"));
reader.MarkEnd(() => new TitleMarker("Meta-Block (" + mb.GetType().Name + ")"));
return mb;
}
);

View File

@ -8,11 +8,11 @@ namespace BrotliLib.Brotli.Markers.Data{
private readonly string title;
public TitleMarker(string title){
this.title = string.Intern("[" + title + "]");
this.title = string.Intern(title);
}
public void ToString(StringBuilder build, int length){
build.Append(title).Append(" · ").Append(length).Append(length == 1 ? " bit" : " bits");
build.Append('[').Append(title).Append("] · ").Append(length).Append(length == 1 ? " bit" : " bits");
}
public override string ToString(){

View File

@ -8,6 +8,7 @@ namespace BrotliLib.Brotli.Markers.Reader{
void MarkStart();
void MarkEnd(IMarkerInfo info);
void MarkEnd(Func<IMarkerInfo> info);
T MarkCall<T>(Func<T> supplier, Func<T, IMarkerInfo> marker);
}

View File

@ -39,6 +39,10 @@ namespace BrotliLib.Brotli.Markers.Reader{
nodes.Pop().Marker = new Marker(start, end, info);
}
public void MarkEnd(Func<IMarkerInfo> info){
MarkEnd(info());
}
public T MarkCall<T>(Func<T> supplier, Func<T, IMarkerInfo> marker){
MarkStart();
T result = supplier();

View File

@ -14,6 +14,7 @@ namespace BrotliLib.Brotli.Markers.Reader{
public void MarkStart(){}
public void MarkEnd(IMarkerInfo info){}
public void MarkEnd(Func<IMarkerInfo> info){}
public T MarkCall<T>(Func<T> supplier, Func<T, IMarkerInfo> marker) => supplier();
public int Index => wrapped.Index;