Skip to content

Commit ba0dbeb

Browse files
committed
refactor: Reimplement the API interface
* Discarded generic Fitler in favor of iBloomFilter * Fix the Murmur2 algorithm * Optimize the batch API interface
1 parent e76192b commit ba0dbeb

21 files changed

+820
-884
lines changed

src/BloomFilter.Redis/FilterRedis.T.cs

Lines changed: 34 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Collections.Generic;
1+
using System;
2+
using System.Collections.Generic;
23
using System.Linq;
34
using System.Threading.Tasks;
45

@@ -9,6 +10,7 @@ namespace BloomFilter.Redis
910
/// </summary>
1011
/// <typeparam name="T"></typeparam>
1112
/// <seealso cref="Filter{T}" />
13+
[Obsolete("Use non-generic FilterRedis")]
1214
public class FilterRedis<T> : Filter<T>
1315
{
1416
private readonly IRedisBitOperate _redisBitOperate;
@@ -63,17 +65,12 @@ public override async Task<bool> AddAsync(byte[] element)
6365
return results.Any(a => !a);
6466
}
6567

66-
/// <summary>
67-
/// Adds the specified elements.
68-
/// </summary>
69-
/// <param name="elements">The elements.</param>
70-
/// <returns></returns>
71-
public override IList<bool> Add(IEnumerable<T> elements)
68+
public override IList<bool> Add(IEnumerable<byte[]> elements)
7269
{
7370
var addHashs = new List<int>();
7471
foreach (var element in elements)
7572
{
76-
addHashs.AddRange(ComputeHash(ToBytes(element)));
73+
addHashs.AddRange(ComputeHash(element));
7774
}
7875

7976
IList<bool> results = new List<bool>();
@@ -95,12 +92,12 @@ public override IList<bool> Add(IEnumerable<T> elements)
9592
return results;
9693
}
9794

98-
public override async Task<IList<bool>> AddAsync(IEnumerable<T> elements)
95+
public async override Task<IList<bool>> AddAsync(IEnumerable<byte[]> elements)
9996
{
10097
var addHashs = new List<int>();
10198
foreach (var element in elements)
10299
{
103-
addHashs.AddRange(ComputeHash(ToBytes(element)));
100+
addHashs.AddRange(ComputeHash(element));
104101
}
105102

106103
IList<bool> results = new List<bool>();
@@ -122,19 +119,6 @@ public override async Task<IList<bool>> AddAsync(IEnumerable<T> elements)
122119
return results;
123120
}
124121

125-
/// <summary>
126-
/// Removes all elements from the filter
127-
/// </summary>
128-
public override void Clear()
129-
{
130-
_redisBitOperate.Clear(_name);
131-
}
132-
133-
public override Task ClearAsync()
134-
{
135-
return _redisBitOperate.ClearAsync(_name);
136-
}
137-
138122
/// <summary>
139123
/// Tests whether an element is present in the filter
140124
/// </summary>
@@ -158,17 +142,12 @@ public override async Task<bool> ContainsAsync(byte[] element)
158142
return results.All(a => a);
159143
}
160144

161-
/// <summary>
162-
/// Tests whether an elements is present in the filter
163-
/// </summary>
164-
/// <param name="elements"></param>
165-
/// <returns></returns>
166-
public override IList<bool> Contains(IEnumerable<T> elements)
145+
public override IList<bool> Contains(IEnumerable<byte[]> elements)
167146
{
168147
var addHashs = new List<int>();
169148
foreach (var element in elements)
170149
{
171-
addHashs.AddRange(ComputeHash(ToBytes(element)));
150+
addHashs.AddRange(ComputeHash(element));
172151
}
173152

174153
IList<bool> results = new List<bool>();
@@ -190,12 +169,12 @@ public override IList<bool> Contains(IEnumerable<T> elements)
190169
return results;
191170
}
192171

193-
public override async Task<IList<bool>> ContainsAsync(IEnumerable<T> elements)
172+
public async override Task<IList<bool>> ContainsAsync(IEnumerable<byte[]> elements)
194173
{
195174
var addHashs = new List<int>();
196175
foreach (var element in elements)
197176
{
198-
addHashs.AddRange(ComputeHash(ToBytes(element)));
177+
addHashs.AddRange(ComputeHash(element));
199178
}
200179

201180
IList<bool> results = new List<bool>();
@@ -217,6 +196,29 @@ public override async Task<IList<bool>> ContainsAsync(IEnumerable<T> elements)
217196
return results;
218197
}
219198

199+
public override bool All(IEnumerable<byte[]> elements)
200+
{
201+
return Contains(elements).All(e => e);
202+
}
203+
204+
public async override Task<bool> AllAsync(IEnumerable<byte[]> elements)
205+
{
206+
return (await ContainsAsync(elements)).All(e => e);
207+
}
208+
209+
/// <summary>
210+
/// Removes all elements from the filter
211+
/// </summary>
212+
public override void Clear()
213+
{
214+
_redisBitOperate.Clear(_name);
215+
}
216+
217+
public override Task ClearAsync()
218+
{
219+
return _redisBitOperate.ClearAsync(_name);
220+
}
221+
220222
public override void Dispose()
221223
{
222224
_redisBitOperate.Dispose();

src/BloomFilter.Redis/FilterRedis.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
/// <summary>
44
/// Bloom Filter Redis Implement
55
/// </summary>
6+
#pragma warning disable CS0618
67
public class FilterRedis : FilterRedis<byte[]>
8+
#pragma warning restore CS0618
79
{
810
/// <summary>
911
/// Initializes a new instance of the <see cref="FilterRedis"/> class.

0 commit comments

Comments
 (0)