namespace Fusion.Addons.InterestManagement
{
using System.Collections.Generic;
///
/// Custom collection for tracking set of unique interest providers and some additional features.
///
public sealed class InterestProviderSet
{
// PUBLIC MEMBERS
public List ReadOnlyValues => _values;
// PRIVATE MEMBERS
private List _values = new List();
private HashSet _hashes = new HashSet();
private bool _isSorted = false;
private bool _hasOverrideIndex = false;
private int _lastOverrideIndex = -1;
// PUBLIC METHODS
public bool Add(IInterestProvider provider)
{
if (_hashes.Add(provider.GetHashCode()) == true)
{
_values.Add(provider);
_isSorted = false;
_hasOverrideIndex = false;
return true;
}
return false;
}
public void Clear()
{
_values.Clear();
_hashes.Clear();
_isSorted = true;
_hasOverrideIndex = false;
}
public void Sort()
{
if (_isSorted == true)
return;
InterestUtility.SortInterestProviders(_values);
_isSorted = true;
_hasOverrideIndex = false;
}
public bool HasOverrideProvider()
{
return GetLastOverrideProviderIndex() >= 0;
}
public int GetLastOverrideProviderIndex()
{
if (_hasOverrideIndex == false)
{
_lastOverrideIndex = -1;
for (int i = _values.Count - 1; i >= 0; --i)
{
if (_values[i].InterestMode == EInterestMode.Override)
{
_lastOverrideIndex = i;
break;
}
}
_hasOverrideIndex = true;
}
return _lastOverrideIndex;
}
}
}