1
0
mirror of https://github.com/chylex/Brotli-Builder.git synced 2025-03-15 02:15:46 +01:00

Make most marker values lazy

This commit is contained in:
chylex 2019-07-08 23:46:26 +02:00
parent c3b66b50e9
commit 50035519f8
5 changed files with 19 additions and 20 deletions

View File

@ -34,16 +34,15 @@ namespace BrotliLib.Brotli.Components.Header{
void AddMarkedSymbol(HuffmanGenerator<T>.Entry entry){
symbolEntries.Add(entry);
reader.MarkOne(new ValueMarker("entry", entry));
reader.MarkStart();
reader.MarkEnd(new ValueMarker("entry", entry));
}
while(bitSpaceRemaining > 0 && symbolIndex < symbolCount){
byte nextCode;
if (nextForcedCode == NoForcedCode){
reader.MarkStart();
nextCode = lengthCodes.LookupValue(reader).Code;
reader.MarkEnd(new ValueMarker("code", nextCode));
nextCode = reader.ReadValue(lengthCodes, "code", code => code.Code);
}
else{
nextCode = nextForcedCode;

View File

@ -4,22 +4,9 @@ using BrotliLib.Brotli.Markers.Data;
using BrotliLib.Brotli.Markers.Reader;
using BrotliLib.Huffman;
using BrotliLib.IO;
using BrotliLib.Markers;
namespace BrotliLib.Brotli.Markers{
static class MarkedBitExtensions{
public static void MarkOne(this IMarkedBitReader reader, IMarkerInfo info){
reader.MarkStart();
reader.MarkEnd(info);
}
public static T MarkCall<T>(this IMarkedBitReader reader, Func<T> supplier, Func<T, IMarkerInfo> marker){
reader.MarkStart();
T result = supplier();
reader.MarkEnd(marker(result));
return result;
}
public static T MarkTitle<T>(this IMarkedBitReader reader, string title, Func<T> action){
return reader.MarkCall(action, _ => new TitleMarker(title));
}

View File

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

View File

@ -1,4 +1,5 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using BrotliLib.Brotli.Markers.Data;
using BrotliLib.IO.Reader;
using BrotliLib.Markers;
@ -38,6 +39,13 @@ namespace BrotliLib.Brotli.Markers.Reader{
nodes.Pop().Marker = new Marker(start, end, info);
}
public T MarkCall<T>(Func<T> supplier, Func<T, IMarkerInfo> marker){
MarkStart();
T result = supplier();
MarkEnd(marker(result));
return result;
}
// Wrapper
public int Index => wrapped.Index;

View File

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