mirror of
https://github.com/chylex/Brotli-Builder.git
synced 2024-12-22 16:42:46 +01:00
38 lines
1.2 KiB
C#
38 lines
1.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace BrotliLib.Brotli.Utils{
|
|
/// <summary>
|
|
/// Three main types of codes in the insert&copy command whose symbols are represented by Huffman coding trees.
|
|
/// </summary>
|
|
public enum Category{
|
|
Literal,
|
|
InsertCopy,
|
|
Distance
|
|
}
|
|
|
|
public static class Categories{
|
|
public static readonly IReadOnlyList<Category> LID = new Category[]{
|
|
Category.Literal, Category.InsertCopy, Category.Distance
|
|
};
|
|
|
|
public static char Id(this Category category){
|
|
return category switch{
|
|
Category.Literal => 'L',
|
|
Category.InsertCopy => 'I',
|
|
Category.Distance => 'D',
|
|
_ => throw new InvalidOperationException("Invalid category: " + category)
|
|
};
|
|
}
|
|
|
|
public static int Contexts(this Category category){
|
|
return category switch{
|
|
Category.Literal => 64,
|
|
Category.InsertCopy => 1,
|
|
Category.Distance => 4,
|
|
_ => throw new InvalidOperationException("Invalid category: " + category)
|
|
};
|
|
}
|
|
}
|
|
}
|