int IComparer <SymbolAndPower> .Compare(SymbolAndPower x, SymbolAndPower y) { if (Math.Sign(x.Power) != Math.Sign(y.Power)) { return(-1 * x.Power.CompareTo(y.Power)); } var indexOfX = Array.IndexOf(Order, x.Symbol); var indexOfY = Array.IndexOf(Order, y.Symbol); if (indexOfX < 0 && indexOfY < 0) { return(string.Compare(x.Symbol, y.Symbol, StringComparison.Ordinal)); } return(indexOfX.CompareTo(indexOfY)); }
internal static ErrorCase <IReadOnlyList <SymbolAndPower> > CreateForSymbol(string text) { IReadOnlyList <SymbolAndPower> expected = new SymbolAndPower[0]; return(new ErrorCase <IReadOnlyList <SymbolAndPower> >(text, 0, expected, 0, null)); }
internal void Append(SymbolAndPower symbolAndPower, SymbolFormat symbolFormat) { this.Append(symbolAndPower.Symbol); if (symbolAndPower.Power == 1) { return; } switch (symbolFormat) { case SymbolFormat.SignedHatPowers: this.Append('^'); this.Append(symbolAndPower.Power.ToString(CultureInfo.InvariantCulture)); break; case SymbolFormat.FractionHatPowers: { var power = Math.Abs(symbolAndPower.Power); if (power == 1) { return; } this.Append('^'); this.Append(power.ToString(CultureInfo.InvariantCulture)); break; } case SymbolFormat.SignedSuperScript: { if (symbolAndPower.Power == 1) { return; } if (symbolAndPower.Power < 0) { this.Append(SuperScript.Minus); } this.Append(SuperScript.GetChar(Math.Abs(symbolAndPower.Power))); break; } case SymbolFormat.Default: case SymbolFormat.FractionSuperScript: { var power = Math.Abs(symbolAndPower.Power); if (power == 1) { return; } this.Append(SuperScript.GetChar(Math.Abs(symbolAndPower.Power))); break; } default: throw new ArgumentOutOfRangeException(nameof(symbolFormat), symbolFormat, null); } }