|
8 | 8 |
|
9 | 9 | namespace ReClassNET.MemoryScanner |
10 | 10 | { |
| 11 | + public enum PatternFormat |
| 12 | + { |
| 13 | + Code, |
| 14 | + Combined |
| 15 | + } |
| 16 | + |
11 | 17 | public class BytePattern |
12 | 18 | { |
13 | 19 | private struct PatternByte |
@@ -104,15 +110,25 @@ public bool Equals(byte b) |
104 | 110 | return matched == 2; |
105 | 111 | } |
106 | 112 |
|
107 | | - public override string ToString() |
| 113 | + public Tuple<string, string> ToString(PatternFormat format) |
108 | 114 | { |
109 | | - var sb = new StringBuilder(); |
110 | | - if (nibble1.IsWildcard) sb.Append('?'); |
111 | | - else sb.AppendFormat("{0:X}", nibble1.Value); |
112 | | - if (nibble2.IsWildcard) sb.Append('?'); |
113 | | - else sb.AppendFormat("{0:X}", nibble2.Value); |
114 | | - return sb.ToString(); |
| 115 | + switch (format) |
| 116 | + { |
| 117 | + case PatternFormat.Code: |
| 118 | + return HasWildcard ? Tuple.Create("\\x00", "?") : Tuple.Create($"\\x{ByteValue:X02}", "x"); |
| 119 | + case PatternFormat.Combined: |
| 120 | + var sb = new StringBuilder(); |
| 121 | + if (nibble1.IsWildcard) sb.Append('?'); |
| 122 | + else sb.AppendFormat("{0:X}", nibble1.Value); |
| 123 | + if (nibble2.IsWildcard) sb.Append('?'); |
| 124 | + else sb.AppendFormat("{0:X}", nibble2.Value); |
| 125 | + return Tuple.Create<string, string>(sb.ToString(), null); |
| 126 | + default: |
| 127 | + throw new ArgumentOutOfRangeException(nameof(format), format, null); |
| 128 | + } |
115 | 129 | } |
| 130 | + |
| 131 | + public override string ToString() => ToString(PatternFormat.Combined).Item1; |
116 | 132 | } |
117 | 133 |
|
118 | 134 | private readonly List<PatternByte> pattern = new List<PatternByte>(); |
@@ -218,9 +234,28 @@ public byte[] ToByteArray() |
218 | 234 | return pattern.Select(pb => pb.ByteValue).ToArray(); |
219 | 235 | } |
220 | 236 |
|
221 | | - public override string ToString() |
| 237 | + public Tuple<string, string> ToString(PatternFormat format) |
222 | 238 | { |
223 | | - return string.Join(" ", pattern.Select(p => p.ToString())); |
| 239 | + switch (format) |
| 240 | + { |
| 241 | + case PatternFormat.Code: |
| 242 | + var sb1 = new StringBuilder(); |
| 243 | + var sb2 = new StringBuilder(); |
| 244 | + pattern |
| 245 | + .Select(p => p.ToString(PatternFormat.Code)) |
| 246 | + .ForEach(t => |
| 247 | + { |
| 248 | + sb1.Append(t.Item1); |
| 249 | + sb2.Append(t.Item2); |
| 250 | + }); |
| 251 | + return Tuple.Create(sb1.ToString(), sb2.ToString()); |
| 252 | + case PatternFormat.Combined: |
| 253 | + return Tuple.Create<string, string>(string.Join(" ", pattern.Select(p => p.ToString(PatternFormat.Combined).Item1)), null); |
| 254 | + default: |
| 255 | + throw new ArgumentOutOfRangeException(nameof(format), format, null); |
| 256 | + } |
224 | 257 | } |
| 258 | + |
| 259 | + public override string ToString() => ToString(PatternFormat.Combined).Item1; |
225 | 260 | } |
226 | 261 | } |
0 commit comments