diff --git a/bin/Lib/PABCSystem.pas b/bin/Lib/PABCSystem.pas index 1eeb615f3..a1a5cd7cb 100644 --- a/bin/Lib/PABCSystem.pas +++ b/bin/Lib/PABCSystem.pas @@ -2334,8 +2334,10 @@ function Pred(x: uint64): uint64; ///-- function Pred(x: boolean): boolean; -/// Возвращает True, если значение val находится между a и b включительно (a ≤ val ≤ b) +/// Возвращает True, если значение val находится между a и b включительно function InRange(val, a, b: T): boolean; where T: IComparable; +/// Возвращает True, если значение val находится между a и b (включительно) независимо от порядка a и b +function Between(val, a, b: T): boolean; where T: IComparable; /// Меняет местами значения двух переменных procedure Swap(var a, b: T); /// Возвращает True, если достигнут конец строки @@ -10684,12 +10686,21 @@ begin Result := char(integer(x)-n); end; -/// Возвращает True, если значение val находится между a и b включительно (a ≤ val ≤ b) +/// Возвращает True, если значение val находится между a и b включительно function InRange(val, a, b: T): boolean; where T: IComparable; begin Result := (val.CompareTo(a) >= 0) and (val.CompareTo(b) <= 0); end; +/// Возвращает True, если значение val находится между a и b (включительно) независимо от порядка a и b +function Between(val, a, b: T): boolean; where T: IComparable; +begin + if a.CompareTo(b) > 0 then + Result := (val.CompareTo(b) >= 0) and (val.CompareTo(a) <= 0) + else + Result := (val.CompareTo(a) >= 0) and (val.CompareTo(b) <= 0); +end; + procedure Swap(var a, b: T); begin var v := a; @@ -14487,7 +14498,7 @@ begin Result := Self.Split(|oldStr|, count+1, System.StringSplitOptions.None).JoinToString(newStr); end; -/// Возвращает True если значение находится между двумя другими +/// Возвращает True если строка находится между двумя другими (лексикографическое сравнение) function Between(Self: string; a, b: string): boolean; extensionmethod; begin Result := (a <= Self) and (Self <= b) or (b <= Self) and (Self <= a);