private void IterateNodes(Func <DoubleLinkedListNode, bool?> doWork) { ModuleProc PROC = new ModuleProc(this.DYN_MODULE_NAME, "IterateNodes"); try { DoubleLinkedListNode node = _head; if (node != null) { do { bool?result = doWork(node); if (result == null) { DoubleLinkedListNode oldNode = node; node = node.Next; oldNode.Dispose(); _count--; } else { if (result.Value) { break; } node = node.Next; } } while (node != _head); } } catch (Exception ex) { Log.Exception(PROC, ex); } }
private bool RemoveNode(DoubleLinkedListNode node, out T value) { value = default(T); ModuleProc PROC = new ModuleProc(this.DYN_MODULE_NAME, "RemoveNode"); if (node == null) { return(false); } try { value = node.Value; if (node.Next == node) { _head = null; } else { node.Next.Prev = node.Prev; node.Prev.Next = node.Next; if (node == _head) { _head = node.Next; } } } catch (Exception ex) { Log.Exception(PROC, ex); } finally { node.Dispose(); _count--; } return(true); }