static void MergeNodeSequenceUntilStrategyFails <T>( WorkList <T> dst, WorkList <T> src, Position popPos, Func <T, T, bool> merge) where T : class { while (!dst.IsEmpty && !src.IsEmpty) { var srcNode = src.Peek(popPos); var dstNode = dst.Peek(popPos); if (merge(dstNode, srcNode)) { dst.Pop(popPos); src.Pop(popPos); } else { break; } } }