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:
parent
4e7c08879c
commit
4c029e4676
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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")){
|
||||
|
@ -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));
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
);
|
||||
|
@ -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(){
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user