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