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:
parent
c3b66b50e9
commit
50035519f8
BrotliLib/Brotli
Components/Header
Markers
@ -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;
|
||||
|
@ -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));
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user