summaryrefslogtreecommitdiff
path: root/src/StardewModdingAPI/Framework/Utilities/ContextHash.cs
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <github@jplamondonw.com>2017-10-07 23:07:10 -0400
committerJesse Plamondon-Willard <github@jplamondonw.com>2017-10-07 23:07:10 -0400
commit929dccb75a1405737975d76648e015a3e7c00177 (patch)
tree659fe16509327e694555db363caf7f47f326443b /src/StardewModdingAPI/Framework/Utilities/ContextHash.cs
parent926894f8f52c2a5cf104fcac2f7f34b637f7b531 (diff)
downloadSMAPI-929dccb75a1405737975d76648e015a3e7c00177.tar.gz
SMAPI-929dccb75a1405737975d76648e015a3e7c00177.tar.bz2
SMAPI-929dccb75a1405737975d76648e015a3e7c00177.zip
reorganise repo structure
Diffstat (limited to 'src/StardewModdingAPI/Framework/Utilities/ContextHash.cs')
-rw-r--r--src/StardewModdingAPI/Framework/Utilities/ContextHash.cs61
1 files changed, 0 insertions, 61 deletions
diff --git a/src/StardewModdingAPI/Framework/Utilities/ContextHash.cs b/src/StardewModdingAPI/Framework/Utilities/ContextHash.cs
deleted file mode 100644
index 6c0fdc90..00000000
--- a/src/StardewModdingAPI/Framework/Utilities/ContextHash.cs
+++ /dev/null
@@ -1,61 +0,0 @@
-using System;
-using System.Collections.Generic;
-
-namespace StardewModdingAPI.Framework.Utilities
-{
- /// <summary>A <see cref="HashSet{T}"/> wrapper meant for tracking recursive contexts.</summary>
- /// <typeparam name="T">The key type.</typeparam>
- internal class ContextHash<T> : HashSet<T>
- {
- /*********
- ** Public methods
- *********/
- /// <summary>Construct an instance.</summary>
- public ContextHash() { }
-
- /// <summary>Construct an instance.</summary>
- /// <param name="comparer">The <see cref="IEqualityComparer{T}"/> implementation to use when comparing values in the set, or <c>null</c> to use the default comparer for the set type.</param>
- public ContextHash(IEqualityComparer<T> comparer)
- : base(comparer) { }
-
- /// <summary>Add a key while an action is in progress, and remove it when it completes.</summary>
- /// <param name="key">The key to add.</param>
- /// <param name="action">The action to perform.</param>
- /// <exception cref="InvalidOperationException">The specified key is already added.</exception>
- public void Track(T key, Action action)
- {
- if (this.Contains(key))
- throw new InvalidOperationException($"Can't track context for key {key} because it's already added.");
-
- this.Add(key);
- try
- {
- action();
- }
- finally
- {
- this.Remove(key);
- }
- }
-
- /// <summary>Add a key while an action is in progress, and remove it when it completes.</summary>
- /// <typeparam name="TResult">The value type returned by the method.</typeparam>
- /// <param name="key">The key to add.</param>
- /// <param name="action">The action to perform.</param>
- public TResult Track<TResult>(T key, Func<TResult> action)
- {
- if (this.Contains(key))
- throw new InvalidOperationException($"Can't track context for key {key} because it's already added.");
-
- this.Add(key);
- try
- {
- return action();
- }
- finally
- {
- this.Remove(key);
- }
- }
- }
-}