public TResult GetValue(TInput key) { TResult value; bool found; #if !SALTARELLE rwl.EnterReadLock(); try { found = data.TryGetValue(key, out value); } finally { rwl.ExitReadLock(); } #else value = data[key]; found = !Script.IsNullOrUndefined(value); #endif if (!found) { value = evalutor(key); } #if !SALTARELLE rwl.EnterWriteLock(); #endif try { if (found) { lruList.Remove(key); lruList.Add(key); } else { data[key] = value; lruList.Add(key); if (data.Count > capacity) { data.Remove(lruList.First); lruList.RemoveFirst(); } } } finally { #if !SALTARELLE rwl.ExitWriteLock(); #endif } return(value); }
public TResult GetValue(TInput key) { TResult value; bool found; _rwl.EnterReadLock(); try { found = _data.TryGetValue(key, out value); } finally { _rwl.ExitReadLock(); } if (!found) { value = _evalutor(key); } _rwl.EnterWriteLock(); try { if (found) { _lruList.Remove(key); _lruList.Add(key); } else { _data[key] = value; _lruList.Add(key); if (_data.Count > _capacity) { Remove(_lruList.First); _lruList.RemoveFirst(); } } } finally { _rwl.ExitWriteLock(); } return(value); }
public void AddTest() { var list = new IndexedLinkedList<int> { 1, 0, -1 }; Assert.AreEqual(3, list.Count, "Did not add the items"); list.Add(1); Assert.AreEqual(4, list.Count, "Did not add the item"); }
public TResult GetValue(TInput key) { TResult value; bool found; lock (_rwl) { found = _data.TryGetValue(key, out value); } if (!found) { value = _evalutor(key); } lock (_rwl) { if (found) { _lruList.Remove(key); _lruList.Add(key); } else { _data[key] = value; _lruList.Add(key); if (_data.Count > _capacity) { Remove(_lruList.First); _lruList.RemoveFirst(); } } } return(value); }
public void AddMove(IMove move) { var newItem = new MoveSequenceItem(NextMoveSequenceNumber(), move); movesSequence.Add(newItem); }