123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- using System.Collections.Generic;
- namespace SharpCifs.Util.Sharpen
- {
- internal class ConcurrentHashMap<T, TU> : AbstractMap<T, TU>, IConcurrentMap<T, TU>
- {
- private Dictionary<T, TU> _table;
- public ConcurrentHashMap()
- {
- _table = new Dictionary<T, TU>();
- }
- public ConcurrentHashMap(int initialCapacity, float loadFactor, int concurrencyLevel)
- {
- _table = new Dictionary<T, TU>(initialCapacity);
- }
- public override void Clear()
- {
- lock (_table)
- {
- _table = new Dictionary<T, TU>();
- }
- }
- public override bool ContainsKey(object name)
- {
- return _table.ContainsKey((T)name);
- }
- public override ICollection<KeyValuePair<T, TU>> EntrySet()
- {
- return this;
- }
- public override TU Get(object key)
- {
- TU local;
- _table.TryGetValue((T)key, out local);
- return local;
- }
- protected override IEnumerator<KeyValuePair<T, TU>> InternalGetEnumerator()
- {
- return _table.GetEnumerator();
- }
- public override bool IsEmpty()
- {
- return _table.Count == 0;
- }
- public override TU Put(T key, TU value)
- {
- lock (_table)
- {
- TU old = Get(key);
- Dictionary<T, TU> newTable = new Dictionary<T, TU>(_table);
- newTable[key] = value;
- _table = newTable;
- return old;
- }
- }
- public TU PutIfAbsent(T key, TU value)
- {
- lock (_table)
- {
- if (!ContainsKey(key))
- {
- Dictionary<T, TU> newTable = new Dictionary<T, TU>(_table);
- newTable[key] = value;
- _table = newTable;
- return value;
- }
- return Get(key);
- }
- }
- public override TU Remove(object key)
- {
- lock (_table)
- {
- TU old = Get((T)key);
- Dictionary<T, TU> newTable = new Dictionary<T, TU>(_table);
- newTable.Remove((T)key);
- _table = newTable;
- return old;
- }
- }
- public bool Remove(object key, object value)
- {
- lock (_table)
- {
- if (ContainsKey(key) && value.Equals(Get(key)))
- {
- Dictionary<T, TU> newTable = new Dictionary<T, TU>(_table);
- newTable.Remove((T)key);
- _table = newTable;
- return true;
- }
- return false;
- }
- }
- public bool Replace(T key, TU oldValue, TU newValue)
- {
- lock (_table)
- {
- if (ContainsKey(key) && oldValue.Equals(Get(key)))
- {
- Dictionary<T, TU> newTable = new Dictionary<T, TU>(_table);
- newTable[key] = newValue;
- _table = newTable;
- return true;
- }
- return false;
- }
- }
- public override IEnumerable<T> Keys
- {
- get { return _table.Keys; }
- }
- public override IEnumerable<TU> Values
- {
- get { return _table.Values; }
- }
- }
- }
|