/
WolfCachedEntityCollection.cs
89 lines (76 loc) · 2.86 KB
/
WolfCachedEntityCollection.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
using System;
using System.Collections.Generic;
using System.Linq;
namespace TehGM.Wolfringo.Caching.Internal
{
/// <inheritdoc/>
public class WolfCachedEntityCollection<TEntity> : IWolfCachedEntityCollection<TEntity> where TEntity : IWolfEntity
{
private readonly IDictionary<uint, TEntity> _items = new Dictionary<uint, TEntity>();
/// <inheritdoc/>
public void AddOrReplace(TEntity item)
=> _items[item.ID] = item;
/// <inheritdoc/>
public TEntity Get(uint id)
{
_items.TryGetValue(id, out TEntity result);
return result;
}
/// <inheritdoc/>
public IEnumerable<TEntity> Find(Func<TEntity, bool> selector)
=> _items.Values.Where(selector);
/// <inheritdoc/>
public void Remove(uint id)
=> _items.Remove(id);
/// <inheritdoc/>
public void Clear()
=> _items.Clear();
}
/// <inheritdoc/>
public class WolfCachedEntityCollection<TKey, TEntity> : IWolfCachedEntityCollection<TKey, TEntity> where TEntity : IWolfEntity
{
private readonly IDictionary<TKey, IWolfCachedEntityCollection<TEntity>> _items = new Dictionary<TKey, IWolfCachedEntityCollection<TEntity>>();
/// <inheritdoc/>
public void AddOrReplace(TKey key, TEntity item)
{
if (!_items.TryGetValue(key, out IWolfCachedEntityCollection<TEntity> subCache))
{
subCache = new WolfCachedEntityCollection<TEntity>();
_items.Add(key, subCache);
}
subCache.AddOrReplace(item);
}
/// <inheritdoc/>
public void Clear(TKey key)
{
if (_items.TryGetValue(key, out IWolfCachedEntityCollection<TEntity> subCache))
subCache?.Clear();
}
/// <inheritdoc/>
public void ClearAll()
{
foreach (IWolfCachedEntityCollection<TEntity> subCache in _items.Values)
subCache?.Clear();
}
/// <inheritdoc/>
public TEntity Get(TKey key, uint id)
{
if (_items.TryGetValue(key, out IWolfCachedEntityCollection<TEntity> subCache) && subCache != null)
return subCache.Get(id);
return default;
}
/// <inheritdoc/>
public IEnumerable<TEntity> Find(TKey key, Func<TEntity, bool> selector)
{
if (_items.TryGetValue(key, out IWolfCachedEntityCollection<TEntity> subCache) && subCache != null)
return subCache.Find(selector);
return Enumerable.Empty<TEntity>();
}
/// <inheritdoc/>
public void Remove(TKey key, uint id)
{
if (_items.TryGetValue(key, out IWolfCachedEntityCollection<TEntity> subCache) && subCache != null)
subCache.Remove(id);
}
}
}