From 599ba3d72c1f0bd70cef7838d1018a2a98a41434 Mon Sep 17 00:00:00 2001 From: Stephen Toub Date: Wed, 23 Jun 2021 06:39:51 -0400 Subject: [PATCH] Avoid boxing in FrugalList All comparisons are being performed with object.Equals(object). If T is a value type, every comparison ends up boxing the argument. --- .../src/Shared/MS/Utility/FrugalList.cs | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/Microsoft.DotNet.Wpf/src/Shared/MS/Utility/FrugalList.cs b/src/Microsoft.DotNet.Wpf/src/Shared/MS/Utility/FrugalList.cs index 30c91accd9f..8398f4741bf 100644 --- a/src/Microsoft.DotNet.Wpf/src/Shared/MS/Utility/FrugalList.cs +++ b/src/Microsoft.DotNet.Wpf/src/Shared/MS/Utility/FrugalList.cs @@ -265,12 +265,12 @@ public override void Clear() public override bool Contains(T value) { - return _loneEntry.Equals(value); + return EqualityComparer.Default.Equals(_loneEntry, value); } public override int IndexOf(T value) { - if (_loneEntry.Equals(value)) + if (EqualityComparer.Default.Equals(_loneEntry, value)) { return 0; } @@ -298,7 +298,7 @@ public override void SetAt(int index, T value) public override bool Remove(T value) { // Wipe out the info in the only entry if it matches the item. - if (_loneEntry.Equals(value)) + if (EqualityComparer.Default.Equals(_loneEntry, value)) { _loneEntry = default(T); --_count; @@ -440,17 +440,17 @@ public override bool Contains(T value) public override int IndexOf(T value) { - if (_entry0.Equals(value)) + if (EqualityComparer.Default.Equals(_entry0, value)) { return 0; } if (_count > 1) { - if (_entry1.Equals(value)) + if (EqualityComparer.Default.Equals(_entry1, value)) { return 1; } - if ((3 == _count) && (_entry2.Equals(value))) + if ((3 == _count) && EqualityComparer.Default.Equals(_entry2, value)) { return 2; } @@ -516,19 +516,19 @@ public override bool Remove(T value) // If the item matches an existing entry, wipe out the last // entry and move all the other entries up. Because we only // have three entries we can just unravel all the cases. - if (_entry0.Equals(value)) + if (EqualityComparer.Default.Equals(_entry0, value)) { RemoveAt(0); return true; } else if ( _count > 1) { - if (_entry1.Equals(value)) + if (EqualityComparer.Default.Equals(_entry1, value)) { RemoveAt(1); return true; } - else if ((3 == _count) && (_entry2.Equals(value))) + else if ((3 == _count) && EqualityComparer.Default.Equals(_entry2, value)) { RemoveAt(2); return true; @@ -781,35 +781,35 @@ public override bool Contains(T value) public override int IndexOf(T value) { - if (_entry0.Equals(value)) + if (EqualityComparer.Default.Equals(_entry0, value)) { return 0; } if (_count > 1) { - if (_entry1.Equals(value)) + if (EqualityComparer.Default.Equals(_entry1, value)) { return 1; } if (_count > 2) { - if (_entry2.Equals(value)) + if (EqualityComparer.Default.Equals(_entry2, value)) { return 2; } if (_count > 3) { - if (_entry3.Equals(value)) + if (EqualityComparer.Default.Equals(_entry3, value)) { return 3; } if (_count > 4) { - if (_entry4.Equals(value)) + if (EqualityComparer.Default.Equals(_entry4, value)) { return 4; } - if ((6 == _count) && (_entry5.Equals(value))) + if ((6 == _count) && EqualityComparer.Default.Equals(_entry5, value)) { return 5; } @@ -914,40 +914,40 @@ public override bool Remove(T value) // If the item matches an existing entry, wipe out the last // entry and move all the other entries up. Because we only // have six entries we can just unravel all the cases. - if (_entry0.Equals(value)) + if (EqualityComparer.Default.Equals(_entry0, value)) { RemoveAt(0); return true; } else if (_count > 1) { - if (_entry1.Equals(value)) + if (EqualityComparer.Default.Equals(_entry1, value)) { RemoveAt(1); return true; } else if (_count > 2) { - if (_entry2.Equals(value)) + if (EqualityComparer.Default.Equals(_entry2, value)) { RemoveAt(2); return true; } else if (_count > 3) { - if (_entry3.Equals(value)) + if (EqualityComparer.Default.Equals(_entry3, value)) { RemoveAt(3); return true; } else if (_count > 4) { - if (_entry4.Equals(value)) + if (EqualityComparer.Default.Equals(_entry4, value)) { RemoveAt(4); return true; } - else if ((6 == _count) && (_entry5.Equals(value))) + else if ((6 == _count) && EqualityComparer.Default.Equals(_entry5, value)) { RemoveAt(5); return true; @@ -1392,7 +1392,7 @@ public override int IndexOf(T value) { for (int index = 0; index < _count; ++index) { - if (_entries[index].Equals(value)) + if (EqualityComparer.Default.Equals(_entries[index], value)) { return index; } @@ -1425,7 +1425,7 @@ public override bool Remove(T value) { for (int index = 0; index < _count; ++index) { - if (_entries[index].Equals(value)) + if (EqualityComparer.Default.Equals(_entries[index], value)) { RemoveAt(index); return true;