/// <summary>
/// Filter forItem Infos.
/// </summary>
public abstract class ItemInfoFilterBase : ItemInfoFilterSorterBase
{
/// <summary>
/// Filter the item info.
/// </summary>
/// <param name="itemInfo">The item info.</param>
/// <returns>True if the list can contain the item info.</returns>
public abstract bool Filter(ItemInfo itemInfo);
/// <summary>
/// Filter the list.
/// </summary>
/// <param name="input">The input list.</param>
/// <param name="outputPooledArray">The reference to an output array.</param>
/// <returns>The filtered/sorted list.</returns>
public override ListSlice<ItemInfo> Filter(ListSlice<ItemInfo> input, ref ItemInfo[] outputPooledArray
{
outputPooledArray.ResizeIfNecessary(ref outputPooledArray, input.Count);
var count = 0;
for (int i = 0; i < input.Count; i++) {
if (Filter(input[i]) == false) { continue; }
outputPooledArray[count] = input[i];
count++;
}
return (outputPooledArray, 0, count);
}
/// <summary>
/// Filter the item info.
/// </summary>
/// <param name="itemInfo">The item info.</param>
/// <returns>True if the list can contain the item info.</returns>
public override bool CanContain(ItemInfo input)
{
return Filter(input);
}
}
public abstract class ItemInfoSorterBase : ItemInfoFilterSorterBase
{
public abstract Comparer<ItemInfo> Comparer { get; }
/// <summary>
/// Virtual awake is overriden.
/// </summary>
protected virtual void Awake()
{ }
/// <summary>
/// Filter the list.
/// </summary>
/// <param name="input">The input list.</param>
/// <param name="outputPooledArray">The reference to an output array.</param>
/// <returns>The filtered/sorted list.</returns>
public override ListSlice<ItemInfo> Filter(ListSlice<ItemInfo> input, ref ItemInfo[] outputPooledArray
{
outputPooledArray.ResizeIfNecessary(ref outputPooledArray, input.Count);
var count = input.Count;
for (int i = 0; i < input.Count; i++) {
outputPooledArray[i] = input[i];
}
Array.Sort(outputPooledArray, 0, count, Comparer);
return (outputPooledArray, 0, count);
}
/// <summary>
/// Filter the item info.
/// </summary>
/// <param name="itemInfo">The item info.</param>
/// <returns>True if the list can contain the item info.</returns>
public override bool CanContain(ItemInfo input)
{
return true;
}
}