aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/AbstractMap.cs
diff options
context:
space:
mode:
authorLuke <luke.pulverenti@gmail.com>2017-08-18 02:04:21 -0400
committerGitHub <noreply@github.com>2017-08-18 02:04:21 -0400
commitc58db90c950c766321615eca236557d87b8d1b74 (patch)
tree80f1823f901bdadad6af4fce8d36d9b73f79c0fb /Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/AbstractMap.cs
parentd5a9db3af77b06a355558165a984328e35555279 (diff)
parent883399caeba54da4c9f3e15e639f8fd72f5b559e (diff)
Merge pull request #2827 from MediaBrowser/dev
Dev
Diffstat (limited to 'Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/AbstractMap.cs')
-rw-r--r--Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/AbstractMap.cs151
1 files changed, 151 insertions, 0 deletions
diff --git a/Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/AbstractMap.cs b/Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/AbstractMap.cs
new file mode 100644
index 000000000..2868a840a
--- /dev/null
+++ b/Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/AbstractMap.cs
@@ -0,0 +1,151 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace SharpCifs.Util.Sharpen
+{
+ public abstract class AbstractMap<T, TU> : IDictionary<T, TU>
+ {
+ public virtual void Clear ()
+ {
+ EntrySet ().Clear ();
+ }
+
+ public virtual bool ContainsKey (object name)
+ {
+ return EntrySet ().Any (p => p.Key.Equals ((T)name));
+ }
+
+ public abstract ICollection<KeyValuePair<T, TU>> EntrySet ();
+
+ public virtual TU Get (object key)
+ {
+ return EntrySet ().Where (p => p.Key.Equals (key)).Select (p => p.Value).FirstOrDefault ();
+ }
+
+ protected virtual IEnumerator<KeyValuePair<T, TU>> InternalGetEnumerator ()
+ {
+ return EntrySet ().GetEnumerator ();
+ }
+
+ public virtual bool IsEmpty ()
+ {
+ return !EntrySet ().Any ();
+ }
+
+ public virtual TU Put (T key, TU value)
+ {
+ throw new NotSupportedException ();
+ }
+
+ public virtual TU Remove (object key)
+ {
+ Iterator<TU> iterator = EntrySet () as Iterator<TU>;
+ if (iterator == null) {
+ throw new NotSupportedException ();
+ }
+ while (iterator.HasNext ()) {
+ TU local = iterator.Next ();
+ if (local.Equals ((T)key)) {
+ iterator.Remove ();
+ return local;
+ }
+ }
+ return default(TU);
+ }
+
+ void ICollection<KeyValuePair<T, TU>>.Add (KeyValuePair<T, TU> item)
+ {
+ Put (item.Key, item.Value);
+ }
+
+ bool ICollection<KeyValuePair<T, TU>>.Contains (KeyValuePair<T, TU> item)
+ {
+ throw new NotImplementedException ();
+ }
+
+ void ICollection<KeyValuePair<T, TU>>.CopyTo (KeyValuePair<T, TU>[] array, int arrayIndex)
+ {
+ EntrySet ().CopyTo (array, arrayIndex);
+ }
+
+ bool ICollection<KeyValuePair<T, TU>>.Remove (KeyValuePair<T, TU> item)
+ {
+ Remove (item.Key);
+ return true;
+ }
+
+ void IDictionary<T, TU>.Add (T key, TU value)
+ {
+ Put (key, value);
+ }
+
+ bool IDictionary<T, TU>.ContainsKey (T key)
+ {
+ return ContainsKey (key);
+ }
+
+ bool IDictionary<T, TU>.Remove (T key)
+ {
+ if (ContainsKey (key)) {
+ Remove (key);
+ return true;
+ }
+ return false;
+ }
+
+ bool IDictionary<T, TU>.TryGetValue (T key, out TU value)
+ {
+ if (ContainsKey (key)) {
+ value = Get (key);
+ return true;
+ }
+ value = default(TU);
+ return false;
+ }
+
+ IEnumerator<KeyValuePair<T, TU>> IEnumerable<KeyValuePair<T, TU>>.GetEnumerator ()
+ {
+ return InternalGetEnumerator ();
+ }
+
+ IEnumerator IEnumerable.GetEnumerator ()
+ {
+ return InternalGetEnumerator ();
+ }
+
+ public virtual int Count {
+ get { return EntrySet ().Count; }
+ }
+
+ public TU this[T key] {
+ get { return Get (key); }
+ set { Put (key, value); }
+ }
+
+ public virtual IEnumerable<T> Keys {
+ get { return EntrySet ().Select (p => p.Key); }
+ }
+
+ int ICollection<KeyValuePair<T, TU>>.Count {
+ get { return Count; }
+ }
+
+ bool ICollection<KeyValuePair<T, TU>>.IsReadOnly {
+ get { return false; }
+ }
+
+ ICollection<T> IDictionary<T, TU>.Keys {
+ get { return Keys.ToList (); }
+ }
+
+ ICollection<TU> IDictionary<T, TU>.Values {
+ get { return Values.ToList (); }
+ }
+
+ public virtual IEnumerable<TU> Values {
+ get { return EntrySet ().Select (p => p.Value); }
+ }
+ }
+}