Skip to content

Commit 92b5d08

Browse files
committed
Enforce sorted values.
1 parent efdf372 commit 92b5d08

File tree

2 files changed

+13
-17
lines changed

2 files changed

+13
-17
lines changed

ReClass.NET/Nodes/EnumNode.cs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -87,13 +87,13 @@ private string GetStringRepresentation(long value)
8787
{
8888
if (!MetaData.UseFlagsMode)
8989
{
90-
var index = MetaData.Values.FindIndex(v => v == value);
90+
var index = MetaData.Values.FindIndex(kv => kv.Key == value);
9191
if (index == -1)
9292
{
9393
return value.ToString();
9494
}
9595

96-
return MetaData.Names[index];
96+
return MetaData.Values[index].Value;
9797
}
9898

9999
return GetFlagsStringRepresentation(value);
@@ -103,19 +103,16 @@ private string GetFlagsStringRepresentation(long value)
103103
{
104104
var result = (ulong)value;
105105

106-
var names = MetaData.Names;
107106
var values = MetaData.Values;
108107

109-
Contract.Assert(names.Count == values.Count);
110-
111108
var index = values.Count - 1;
112109
var retval = new StringBuilder();
113110
var firstTime = true;
114111
var saveResult = result;
115112

116113
while (index >= 0)
117114
{
118-
var temp = (ulong)values[index];
115+
var temp = (ulong)values[index].Key;
119116
if (index == 0 && temp == 0)
120117
{
121118
break;
@@ -129,7 +126,7 @@ private string GetFlagsStringRepresentation(long value)
129126
retval.Prepend(" | ");
130127
}
131128

132-
retval.Prepend(names[index]);
129+
retval.Prepend(values[index].Value);
133130
firstTime = false;
134131
}
135132

@@ -143,9 +140,9 @@ private string GetFlagsStringRepresentation(long value)
143140

144141
if (saveResult == 0)
145142
{
146-
if (values.Count > 0 && values[0] == 0)
143+
if (values.Count > 0 && values[0].Key == 0)
147144
{
148-
return names[0];
145+
return values[0].Value;
149146
}
150147

151148
return "0";

ReClass.NET/Project/EnumMetaData.cs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,16 @@ public class EnumMetaData
1414

1515
public int UnderlyingTypeSize { get; private set; } = sizeof(int);
1616

17-
public IReadOnlyList<long> Values { get; private set; }
17+
public IReadOnlyList<KeyValuePair<long, string>> Values { get; private set; }
1818

19-
public IReadOnlyList<string> Names { get; private set; }
20-
21-
public void SetData(bool useFlagsMode, int underlyingTypeSize, IDictionary<long, string> values)
19+
public void SetData(bool useFlagsMode, int underlyingTypeSize, IEnumerable<KeyValuePair<long, string>> values)
2220
{
2321
if (!(underlyingTypeSize == 1 || underlyingTypeSize == 2 || underlyingTypeSize == 4 || underlyingTypeSize == 8))
2422
{
2523
throw new ArgumentOutOfRangeException(nameof(underlyingTypeSize));
2624
}
25+
26+
var temp = values.OrderBy(t => t.Key).ToList();
2727

2828
if (useFlagsMode)
2929
{
@@ -41,7 +41,7 @@ public void SetData(bool useFlagsMode, int underlyingTypeSize, IDictionary<long,
4141
break;
4242
}
4343

44-
if (values.Keys.Select(v => (ulong)v).Max() > maxPossibleValue)
44+
if (temp.Select(kv => (ulong)kv.Key).Max() > maxPossibleValue)
4545
{
4646
throw new ArgumentOutOfRangeException();
4747
}
@@ -66,15 +66,14 @@ public void SetData(bool useFlagsMode, int underlyingTypeSize, IDictionary<long,
6666
break;
6767
}
6868

69-
if (values.Keys.Max() > maxPossibleValue || values.Keys.Min() < minPossibleValue)
69+
if (temp.Max(kv => kv.Key) > maxPossibleValue || temp.Min(kv => kv.Key) < minPossibleValue)
7070
{
7171
throw new ArgumentOutOfRangeException();
7272
}
7373
}
7474

7575
UseFlagsMode = useFlagsMode;
76-
Values = values.Keys.ToList();
77-
Names = values.Values.ToList();
76+
Values = temp;
7877
}
7978
}
8079
}

0 commit comments

Comments
 (0)