diff --git a/ArchiSteamFarm/ConcurrentHashSet.cs b/ArchiSteamFarm/ConcurrentHashSet.cs index a35071a12..c5eb05faf 100644 --- a/ArchiSteamFarm/ConcurrentHashSet.cs +++ b/ArchiSteamFarm/ConcurrentHashSet.cs @@ -25,7 +25,6 @@ using System; using System.Collections; using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; using System.Threading; namespace ArchiSteamFarm { @@ -36,6 +35,9 @@ namespace ArchiSteamFarm { public bool IsReadOnly => false; public IEnumerator GetEnumerator() => new ConcurrentEnumerator(HashSet, Lock); + IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); + void ICollection.Add(T item) => Add(item); + public int Count { get { Lock.EnterReadLock(); @@ -48,17 +50,6 @@ namespace ArchiSteamFarm { } } - [SuppressMessage("ReSharper", "UnusedMethodReturnValue.Global")] - public bool Add(T item) { - Lock.EnterWriteLock(); - - try { - return HashSet.Add(item); - } finally { - Lock.ExitWriteLock(); - } - } - public void Clear() { Lock.EnterWriteLock(); @@ -69,17 +60,6 @@ namespace ArchiSteamFarm { } } - public void ClearAndTrim() { - Lock.EnterWriteLock(); - - try { - HashSet.Clear(); - HashSet.TrimExcess(); - } finally { - Lock.ExitWriteLock(); - } - } - public bool Contains(T item) { Lock.EnterReadLock(); @@ -100,16 +80,6 @@ namespace ArchiSteamFarm { } } - public void TrimExcess() { - Lock.EnterWriteLock(); - - try { - HashSet.TrimExcess(); - } finally { - Lock.ExitWriteLock(); - } - } - public void Dispose() => Lock.Dispose(); public void CopyTo(T[] array, int arrayIndex) { @@ -122,8 +92,47 @@ namespace ArchiSteamFarm { } } - void ICollection.Add(T item) => Add(item); + internal void Add(T item) { + Lock.EnterWriteLock(); - IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); + try { + HashSet.Add(item); + } finally { + Lock.ExitWriteLock(); + } + } + + internal void AddRange(IEnumerable items) { + Lock.EnterWriteLock(); + + try { + foreach (T item in items) { + HashSet.Add(item); + } + } finally { + Lock.ExitWriteLock(); + } + } + + internal void ClearAndTrim() { + Lock.EnterWriteLock(); + + try { + HashSet.Clear(); + HashSet.TrimExcess(); + } finally { + Lock.ExitWriteLock(); + } + } + + internal void TrimExcess() { + Lock.EnterWriteLock(); + + try { + HashSet.TrimExcess(); + } finally { + Lock.ExitWriteLock(); + } + } } }