Skip to content

Commit f2c938f

Browse files
Added cached hasher generator
1 parent 6762169 commit f2c938f

File tree

2 files changed

+83
-0
lines changed

2 files changed

+83
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package YASL.Hashing;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
6+
public class ChgCached<T> implements IHashingGenerator<T> {
7+
private final IHashingGenerator<T> _gen;
8+
private final Map<CHasherParams, IHasher<T>> _cache = new HashMap<>();
9+
10+
public ChgCached(IHashingGenerator<T> gen) {
11+
this._gen = gen;
12+
}
13+
14+
@Override
15+
public IHasher<T> generate(int range, int levels) {
16+
final CHasherParams params = new CHasherParams(range, levels);
17+
IHasher<T> res = _cache.get(params);
18+
if (null == res) {
19+
res = _gen.generate(range, levels);
20+
_cache.put(params, res);
21+
}
22+
return res;
23+
}
24+
25+
private static class CHasherParams {
26+
private final int _range;
27+
private final int _levels;
28+
29+
public CHasherParams(int range, int levels) {
30+
this._range = range;
31+
this._levels = levels;
32+
}
33+
34+
@Override
35+
public int hashCode() {
36+
final int prime = 31;
37+
return prime * _levels + _range;
38+
}
39+
40+
@Override
41+
public boolean equals(Object obj) {
42+
if (this == obj)
43+
return true;
44+
if ((obj == null) || (getClass() != obj.getClass()))
45+
return false;
46+
47+
final CHasherParams other = (CHasherParams) obj;
48+
return ((_levels == other._levels) && (_range == other._range));
49+
}
50+
}
51+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package Tests.Hashing;
2+
3+
import org.junit.Assert;
4+
import org.junit.Test;
5+
6+
import YASL.Hashing.ChgBasic;
7+
import YASL.Hashing.ChgCached;
8+
import YASL.Hashing.IHasher;
9+
import YASL.Hashing.IHashingGenerator;
10+
11+
public class Test_hgCached {
12+
13+
@Test
14+
public void sameHasherWhenSameParams() {
15+
final IHashingGenerator<Integer> gen = new ChgCached<>( //
16+
new ChgBasic<>() //
17+
);
18+
19+
final IHasher<Integer> first = gen.generate(1, 1);
20+
Assert.assertEquals(first, gen.generate(1, 1));
21+
}
22+
23+
@Test
24+
public void diffHasherWhenDiffParams() {
25+
final IHashingGenerator<Integer> gen = new ChgCached<>( //
26+
new ChgBasic<>() //
27+
);
28+
29+
final IHasher<Integer> first = gen.generate(1, 1);
30+
Assert.assertNotEquals(first, gen.generate(2, 2));
31+
}
32+
}

0 commit comments

Comments
 (0)