| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 | 
							- using System;
 
- using System.Collections.Generic;
 
- using System.Collections.Immutable;
 
- using System.Linq;
 
- using System.Runtime.CompilerServices;
 
- namespace InABox.Core
 
- {
 
-     
 
-     public class EventSuppressor : IDisposable
 
-     {
 
-         private static Dictionary<Enum, int> _cache = new Dictionary<Enum, int>();
 
-         private Enum[] _scopes;
 
-         public static ImmutableDictionary<Enum, int> Cache() => _cache.ToImmutableDictionary();
 
-         
 
-         public EventSuppressor(params Enum[] scopes)
 
-         {
 
-             _scopes = scopes;
 
-             foreach (var scope in scopes)
 
-             {
 
-                 _cache.TryGetValue(scope, out int count);
 
-                 _cache[scope] = count + 1;
 
-             }
 
-         }
 
-         
 
-         public void Dispose()
 
-         {
 
-             foreach (var scope in _scopes)
 
-             {
 
-                 if (_cache.TryGetValue(scope, out int count))
 
-                 {
 
-                     if (count <= 1)
 
-                         _cache.Remove(scope);
 
-                     else
 
-                         _cache[scope] = count - 1;
 
-                 }
 
-             }
 
-         }
 
-         public static bool IsSet(Enum scope) => _cache.TryGetValue(scope, out int count) && (count > 0);
 
-         public static EventSuppressor All<T>() where T : Enum
 
-         {
 
-             var scopes = Enum.GetValues(typeof(T)).Cast<Enum>().ToArray();
 
-             return new EventSuppressor(scopes);
 
-         }
 
-         
 
-     }
 
- }
 
 
  |