File tree Expand file tree Collapse file tree 2 files changed +83
-0
lines changed
YASL-Core/src/YASL/Hashing
YASL-Tests/src/Tests/Hashing Expand file tree Collapse file tree 2 files changed +83
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments