public override PConstrianResult test(object newValue) { ci = -1; var bc = int.MinValue; result = null; for (int i = 0; i < list.Length; i++) { var av = list[i]; if (newValue.Equals(av)) { result = new PConstrianResult(PCostrainStatus.PASSED); bc = int.MaxValue; ci = i; break; } else { var c = -Math.Abs((double)newValue - (double)(object)av); if (bc < c) { bc = (int)c; ci = i; } } } if (!result) { result = new PConstrianResult(PCostrainStatus.CORRECTED); } result.setCore(bc); return(result); }
public void Add(PConstrianResult r) { all.Add(r); if ( //_status != PCostrainStatus.REFUSED && r.status == PCostrainStatus.CORRECTED) { _status = r.status; _info = "Corrected by inner constrian."; } else if (r.status == PCostrainStatus.REFUSED) { _status = r.status; _info = "Refused by inner constrian."; } }
//public override PConstrianResult test(object nv) { // var md = (dynamic)max - (dynamic)nv; // var maxOk = ((dynamic)nv < (dynamic)max) || // (includeMax && ((dynamic)nv == (dynamic)max)); // if (!maxOk) { result = toBig; return toBig; } // var minOk = ((dynamic)nv > (dynamic)min) || // (includeMin && ((dynamic)nv == (dynamic)min)); // if (!minOk) { result = toSmall; return toSmall; } // result = inRange; return inRange; //} public override PConstrianResult correct <M>(M value, ref M c) { if (!result) { test(value); } if (result == inRange) { c = value; } else if (result == toBig) { c = (includeMax) ? max : Math.Round((dynamic)max - sub); } else if (result == toSmall) { c = (includeMin) ? min : Math.Round((dynamic)min + add); } var r = result; result = null; return(r); }
public override PConstrianResult test(object nv) { var xd = (dynamic)max - (dynamic)nv; var maxOk = xd > 0 || (includeMax && xd == 0); if (!maxOk) { result = toBig.setCore((int)xd); return(toBig); } var nd = (dynamic)nv - (dynamic)min; var minOk = nd > 0 || (includeMin && nd == 0); if (!minOk) { result = toSmall.setCore((int)nd); return(toSmall); } result = inRange; return(inRange); }
public PConstrianResult(PCostrainStatus status, PConstrianResult cause = null, string info = null) { this._status = status; this._cause = cause; this._info = info; }