1 // 2 // Copyright (c) 2010-2024 Antmicro 3 // 4 // This file is licensed under the MIT License. 5 // Full license text is available in 'licenses/MIT.txt'. 6 // 7 using System; 8 namespace Antmicro.Renode.Core 9 { 10 public struct SymbolAddress : IComparable<SymbolAddress> 11 { MaxAntmicro.Renode.Core.SymbolAddress12 public static SymbolAddress Max(SymbolAddress a, SymbolAddress b) 13 { 14 return (a.RawValue >= b.RawValue) ? a : b; 15 } 16 MinAntmicro.Renode.Core.SymbolAddress17 public static SymbolAddress Min(SymbolAddress a, SymbolAddress b) 18 { 19 return (a.RawValue <= b.RawValue) ? a : b; 20 } 21 operator >Antmicro.Renode.Core.SymbolAddress22 public static bool operator >(SymbolAddress a, SymbolAddress b) 23 { 24 return a.RawValue > b.RawValue; 25 } 26 operator %Antmicro.Renode.Core.SymbolAddress27 public static SymbolAddress operator %(SymbolAddress a, uint b) 28 { 29 return new SymbolAddress(a.RawValue % b); 30 } 31 operator &Antmicro.Renode.Core.SymbolAddress32 public static SymbolAddress operator &(SymbolAddress a, int b) 33 { 34 return new SymbolAddress(a.RawValue & checked((uint)b)); 35 } 36 operator &Antmicro.Renode.Core.SymbolAddress37 public static SymbolAddress operator &(SymbolAddress a, uint b) 38 { 39 return new SymbolAddress(a.RawValue & b); 40 } 41 operator <Antmicro.Renode.Core.SymbolAddress42 public static bool operator <(SymbolAddress a, SymbolAddress b) 43 { 44 return a.RawValue < b.RawValue; 45 } 46 operator <=Antmicro.Renode.Core.SymbolAddress47 public static bool operator <=(SymbolAddress a, SymbolAddress b) 48 { 49 return a.RawValue <= b.RawValue; 50 } 51 operator >=Antmicro.Renode.Core.SymbolAddress52 public static bool operator >=(SymbolAddress a, SymbolAddress b) 53 { 54 return a.RawValue >= b.RawValue; 55 } 56 operator ==Antmicro.Renode.Core.SymbolAddress57 public static bool operator ==(SymbolAddress a, SymbolAddress b) 58 { 59 return a.RawValue == b.RawValue; 60 } 61 operator !=Antmicro.Renode.Core.SymbolAddress62 public static bool operator !=(SymbolAddress a, SymbolAddress b) 63 { 64 return a.RawValue != b.RawValue; 65 } 66 operator +Antmicro.Renode.Core.SymbolAddress67 public static SymbolAddress operator +(SymbolAddress a, SymbolAddress b) 68 { 69 return new SymbolAddress(a.RawValue + b.RawValue); 70 } 71 operator -Antmicro.Renode.Core.SymbolAddress72 public static SymbolAddress operator -(SymbolAddress a, SymbolAddress b) 73 { 74 return new SymbolAddress(a.RawValue - b.RawValue); 75 } 76 operator SymbolAddressAntmicro.Renode.Core.SymbolAddress77 public static implicit operator SymbolAddress(uint v) 78 { 79 return new SymbolAddress(v); 80 } 81 operator SymbolAddressAntmicro.Renode.Core.SymbolAddress82 public static implicit operator SymbolAddress(ulong v) 83 { 84 return new SymbolAddress(v); 85 } 86 operator uintAntmicro.Renode.Core.SymbolAddress87 public static explicit operator uint(SymbolAddress s) 88 { 89 return checked((uint)s.RawValue); 90 } 91 operator ulongAntmicro.Renode.Core.SymbolAddress92 public static explicit operator ulong(SymbolAddress s) 93 { 94 return s.RawValue; 95 } 96 SymbolAddressAntmicro.Renode.Core.SymbolAddress97 public SymbolAddress(ulong value) 98 { 99 RawValue = value; 100 } 101 CompareToAntmicro.Renode.Core.SymbolAddress102 public int CompareTo(SymbolAddress other) 103 { 104 return RawValue.CompareTo(other.RawValue); 105 } 106 EqualsAntmicro.Renode.Core.SymbolAddress107 public override bool Equals(object obj) 108 { 109 if(obj is SymbolAddress s) 110 { 111 return RawValue == s.RawValue; 112 } 113 return false; 114 } 115 GetHashCodeAntmicro.Renode.Core.SymbolAddress116 public override int GetHashCode() 117 { 118 return RawValue.GetHashCode(); 119 } 120 ToStringAntmicro.Renode.Core.SymbolAddress121 public override string ToString() 122 { 123 return $"0x{RawValue:x}"; 124 } 125 126 public ulong RawValue { get; private set; } 127 128 // this is added because of the MarkerComparer 129 public static SymbolAddress MaxValue; 130 SymbolAddressAntmicro.Renode.Core.SymbolAddress131 static SymbolAddress() 132 { 133 MaxValue = new SymbolAddress(ulong.MaxValue); 134 } 135 } 136 } 137