mirror of
https://github.com/chylex/Brotli-Builder.git
synced 2024-12-22 16:42:46 +01:00
45 lines
1.3 KiB
C#
45 lines
1.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using BrotliLib.Collections;
|
|
|
|
namespace BrotliLib.Brotli.Utils{
|
|
/// <summary>
|
|
/// Utility class to map values of type <typeparamref name="T"/> to the categories.
|
|
/// </summary>
|
|
public sealed class CategoryMap<T>{
|
|
public T this[Category cat]{
|
|
get => values[(int)cat];
|
|
private set => values[(int)cat] = value;
|
|
}
|
|
|
|
public IEnumerable<T> Values{
|
|
get{
|
|
foreach(Category category in Categories.LID){
|
|
yield return this[category];
|
|
}
|
|
}
|
|
}
|
|
|
|
private readonly T[] values = new T[Categories.LID.Count];
|
|
|
|
public CategoryMap(Func<Category, T> mapper){
|
|
foreach(Category category in Categories.LID){
|
|
this[category] = mapper(category);
|
|
}
|
|
}
|
|
|
|
public CategoryMap<U> Select<U>(Func<T, U> mapper){
|
|
return new CategoryMap<U>(category => mapper(this[category]));
|
|
}
|
|
|
|
public override bool Equals(object obj){
|
|
return obj is CategoryMap<T> map &&
|
|
CollectionHelper.Equal(values, map.values);
|
|
}
|
|
|
|
public override int GetHashCode(){
|
|
return CollectionHelper.HashCode(values);
|
|
}
|
|
}
|
|
}
|