aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/IO/SharpCifs/Util/Sharpen/AbstractMap.cs
diff options
context:
space:
mode:
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); }
+ }
+ }
+}