public Eval addMove(Move moveFound, List <GoodMove> goodMoves, Depth wDepth, Eval mValueFound, Eval mAlpha, Eval mBeta, EvalType etFound, Boolean bFilterEvalUndefined = false) { var mValue = adjustValue(mAlpha, mBeta, mValueFound, etFound, SearchPly); // Note: Adjusted mValue may be EvalUndefined var bAllowValue = EvalUndefined < mValue || !bFilterEvalUndefined; if (bAllowValue && goodMoves is not null && isDefinite(moveFound)) { #if DedupeGoodMoves // // Duplicates should be avoided; but will be filtered from SiftedMoves // if (goodMoves.Exists(gm => equalMoves(gm.Move, moveFound))) { #if DEBUG var sb = new StringBuilder() .AppendFormat("Filtering ") .AppendAN(moveFound, State.Rule.IsChess960); LogLine(sb.ToString()); #endif return(mValue); } #endif // DedupeKillers // moveFound may be either annotated or abbreviated var good = new GoodMove(moveFound, wDepth, mValue, etFound); #if LoadMRU goodMoves.Insert(0, good); // MRU order #else goodMoves.Add(good); // LRU works best #endif } return(mValue); }