Skip to content

Commit e2a69e3

Browse files
author
LoneWandererProductions
committed
Add one last needed function
1 parent 623de35 commit e2a69e3

2 files changed

Lines changed: 38 additions & 16 deletions

File tree

CommonExtendedObjectsTests/SortedKvStoreTests.cs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,16 @@ public void AddAndTryGetWorks()
3434
store.Add(5, 50);
3535
store.Add(15, 150);
3636

37-
Assert.IsTrue(store.TryGet(10, out var val10));
37+
Assert.IsTrue(store.TryTryGetValueGet(10, out var val10));
3838
Assert.AreEqual(100, val10);
3939

40-
Assert.IsTrue(store.TryGet(5, out var val5));
40+
Assert.IsTrue(store.TryTryGetValueGet(5, out var val5));
4141
Assert.AreEqual(50, val5);
4242

43-
Assert.IsTrue(store.TryGet(15, out var val15));
43+
Assert.IsTrue(store.TryTryGetValueGet(15, out var val15));
4444
Assert.AreEqual(150, val15);
4545

46-
Assert.IsFalse(store.TryGet(99, out _));
46+
Assert.IsFalse(store.TryTryGetValueGet(99, out _));
4747
}
4848

4949
/// <summary>
@@ -57,7 +57,7 @@ public void TryRemoveRemovesExisting()
5757
store.Add(2, 20);
5858

5959
Assert.IsTrue(store.TryRemove(1, out var idx));
60-
Assert.IsFalse(store.TryGet(1, out _));
60+
Assert.IsFalse(store.TryTryGetValueGet(1, out _));
6161
Assert.IsTrue(idx >= 0);
6262
}
6363

@@ -75,11 +75,11 @@ public void RemoveManyWorks()
7575

7676
store.RemoveMany(new[] { 2, 4, 6 });
7777

78-
Assert.IsFalse(store.TryGet(2, out _));
79-
Assert.IsFalse(store.TryGet(4, out _));
80-
Assert.IsFalse(store.TryGet(6, out _));
78+
Assert.IsFalse(store.TryTryGetValueGet(2, out _));
79+
Assert.IsFalse(store.TryTryGetValueGet(4, out _));
80+
Assert.IsFalse(store.TryTryGetValueGet(6, out _));
8181

82-
Assert.IsTrue(store.TryGet(3, out _));
82+
Assert.IsTrue(store.TryTryGetValueGet(3, out _));
8383
}
8484

8585
/// <summary>
@@ -99,7 +99,7 @@ public void CompactRemovesUnoccupied()
9999
store.Compact();
100100

101101
Assert.AreEqual(8, store.Count);
102-
Assert.IsFalse(store.TryGet(1, out _));
102+
Assert.IsFalse(store.TryTryGetValueGet(1, out _));
103103
}
104104

105105
/// <summary>
@@ -131,11 +131,11 @@ public void AddAndTryGetShouldReturnExpectedValues()
131131

132132
for (var i = 0; i < 1000; i++)
133133
{
134-
Assert.IsTrue(store.TryGet(i, out var value));
134+
Assert.IsTrue(store.TryTryGetValueGet(i, out var value));
135135
Assert.AreEqual(i * 10, value);
136136
}
137137

138-
Assert.IsFalse(store.TryGet(1001, out _));
138+
Assert.IsFalse(store.TryTryGetValueGet(1001, out _));
139139
}
140140

141141
/// <summary>
@@ -161,7 +161,7 @@ public void PerformanceAddAndTryGet()
161161
var hits = 0;
162162
for (var i = 0; i < ItemCount; i++)
163163
{
164-
if (store.TryGet(i, out var value) && value == i * 2)
164+
if (store.TryTryGetValueGet(i, out var value) && value == i * 2)
165165
{
166166
hits++;
167167
}

ExtendedSystemObjects/SortedKvStore.cs

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
using System;
1515
using System.Buffers;
1616
using System.Collections.Generic;
17+
using System.Collections;
1718

1819
namespace ExtendedSystemObjects
1920
{
@@ -24,7 +25,7 @@ namespace ExtendedSystemObjects
2425
/// The class supports insertion, removal, and lookup operations with dynamic storage growth.
2526
/// </summary>
2627
/// <seealso cref="T:System.IDisposable" />
27-
public sealed class SortedKvStore : IDisposable
28+
public sealed class SortedKvStore : IDisposable, IEnumerable<KeyValuePair<int, int>>
2829
{
2930
/// <summary>
3031
/// The keys
@@ -94,7 +95,7 @@ public int this[int key]
9495
{
9596
get
9697
{
97-
if (TryGet(key, out var value))
98+
if (TryTryGetValueGet(key, out var value))
9899
{
99100
return value;
100101
}
@@ -160,7 +161,7 @@ public void Add(int key, int value)
160161
/// default value.
161162
/// </param>
162163
/// <returns><c>true</c> if the key was found; otherwise, <c>false</c>.</returns>
163-
public bool TryGet(int key, out int value)
164+
public bool TryTryGetValueGet(int key, out int value)
164165
{
165166
int left = 0, right = Count - 1;
166167
var keysSpan = _keys.AsSpan()[..Count];
@@ -333,6 +334,27 @@ public void Compact()
333334
ArrayPool<int>.Shared.Return(rented);
334335
}
335336

337+
/// <summary>
338+
/// Gets the enumerator.
339+
/// </summary>
340+
/// <returns>All active elements as Key Value pair.</returns>
341+
public IEnumerator<KeyValuePair<int, int>> GetEnumerator()
342+
{
343+
for (int i = 0; i < Count; i++)
344+
{
345+
if (_occupied[i] != 0)
346+
{
347+
yield return new KeyValuePair<int, int>(_keys[i], _values[i]);
348+
}
349+
}
350+
}
351+
352+
/// <summary>
353+
/// Gets the enumerator.
354+
/// </summary>
355+
/// <returns>An enumerator to iterate though the collection.</returns>
356+
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
357+
336358
/// <summary>
337359
/// Removes all entries from the store.
338360
/// </summary>

0 commit comments

Comments
 (0)