Forge
csharpdeeb25a2
1#nullable enable
2
3namespace CascadeIDE.Models.Editor;
4
5/// <summary>Номер колонки в терминах редактора и IDE-команд: <b>1-based</b>, минимум 1 (перед первым символом строки = 1).</summary>
6public readonly struct ColumnNumber : IEquatable<ColumnNumber>, IComparable<ColumnNumber>
7{
8 public const int MinimumOneBasedInclusive = 1;
9
10 public int Value { get; }
11
12 private ColumnNumber(int value) => Value = value;
13
14 /// <summary>Создать из сырого int; отказ, если значение &lt; <see cref="MinimumOneBasedInclusive"/>.</summary>
15 public static bool TryCreate(int raw, out ColumnNumber columnNumber)
16 {
17 if (raw < MinimumOneBasedInclusive)
18 {
19 columnNumber = default;
20 return false;
21 }
22
23 columnNumber = new ColumnNumber(raw);
24 return true;
25 }
26
27 public bool Equals(ColumnNumber other) => Value == other.Value;
28
29 public override bool Equals(object? obj) => obj is ColumnNumber other && Equals(other);
30
31 public override int GetHashCode() => Value;
32
33 public int CompareTo(ColumnNumber other) => Value.CompareTo(other.Value);
34
35 public static bool operator ==(ColumnNumber left, ColumnNumber right) => left.Equals(right);
36
37 public static bool operator !=(ColumnNumber left, ColumnNumber right) => !left.Equals(right);
38
39 public static bool operator <(ColumnNumber left, ColumnNumber right) => left.CompareTo(right) < 0;
40
41 public static bool operator <=(ColumnNumber left, ColumnNumber right) => left.CompareTo(right) <= 0;
42
43 public static bool operator >(ColumnNumber left, ColumnNumber right) => left.CompareTo(right) > 0;
44
45 public static bool operator >=(ColumnNumber left, ColumnNumber right) => left.CompareTo(right) >= 0;
46}
47
View only · write via MCP/CIDE