@@ -33,66 +33,63 @@ public static void Main(string[] args)
33
33
}
34
34
35
35
public struct Pair < TK , TV >
36
- {
37
- public TK Key ;
38
-
36
+ {
37
+ public TK Key ;
39
38
public TV Value ;
40
39
}
41
40
42
41
public class LRU < TK , TV >
43
- where TK : notnull
44
- where TV : notnull
42
+ where TK : notnull
43
+ where TV : notnull
45
44
{
46
- public int Size { get ; private set ; }
47
-
48
- private readonly Dictionary < TK , LinkedListNode < Pair < TK , TV > > > _key_lookup ;
45
+ public int Size { get ; private set ; }
46
+ private readonly Dictionary < TK , LinkedListNode < Pair < TK , TV > > > _key_lookup ;
47
+ private readonly LinkedList < Pair < TK , TV > > _entries ;
49
48
50
- private readonly LinkedList < Pair < TK , TV > > _entries ;
51
-
52
- public LRU ( int size )
53
- {
54
- Size = size ;
55
- _key_lookup = new Dictionary < TK , LinkedListNode < Pair < TK , TV > > > ( size ) ;
56
- _entries = new LinkedList < Pair < TK , TV > > ( ) ;
57
- }
49
+ public LRU ( int size )
50
+ {
51
+ Size = size ;
52
+ _key_lookup = new Dictionary < TK , LinkedListNode < Pair < TK , TV > > > ( size ) ;
53
+ _entries = new LinkedList < Pair < TK , TV > > ( ) ;
54
+ }
58
55
59
- public bool TryGet ( TK key , out TV value )
60
- {
61
- if ( _key_lookup . TryGetValue ( key , out var node ) )
62
- {
63
- value = node . ValueRef . Value ;
64
- _entries . Remove ( node ) ;
65
- _entries . AddLast ( node ) ;
66
- return true ;
67
- }
68
- value = default ;
69
- return false ;
70
- }
56
+ public bool TryGet ( TK key , out TV value )
57
+ {
58
+ if ( _key_lookup . TryGetValue ( key , out var node ) )
59
+ {
60
+ value = node . ValueRef . Value ;
61
+ _entries . Remove ( node ) ;
62
+ _entries . AddLast ( node ) ;
63
+ return true ;
64
+ }
65
+ value = default ;
66
+ return false ;
67
+ }
71
68
72
- public void Put ( TK key , TV value )
73
- {
74
- if ( _key_lookup . TryGetValue ( key , out var node ) )
75
- {
76
- node . ValueRef . Value = value ;
77
- _entries . Remove ( node ) ;
78
- _entries . AddLast ( node ) ;
79
- }
80
- else if ( _entries . Count == Size )
81
- {
82
- var first = _entries . First ;
83
- _key_lookup . Remove ( first ! . Value . Key ) ;
84
- _entries . RemoveFirst ( ) ;
85
- first . ValueRef . Key = key ;
86
- first . ValueRef . Value = value ;
87
- _entries . AddLast ( first ) ;
88
- _key_lookup [ key ] = first ;
89
- }
90
- else
91
- {
92
- _entries . AddLast ( new Pair < TK , TV > { Key = key , Value = value } ) ;
93
- _key_lookup [ key ] = _entries . Last ;
94
- }
95
- }
69
+ public void Put ( TK key , TV value )
70
+ {
71
+ if ( _key_lookup . TryGetValue ( key , out var node ) )
72
+ {
73
+ node . ValueRef . Value = value ;
74
+ _entries . Remove ( node ) ;
75
+ _entries . AddLast ( node ) ;
76
+ }
77
+ else if ( _entries . Count == Size )
78
+ {
79
+ var first = _entries . First ;
80
+ _key_lookup . Remove ( first ! . Value . Key ) ;
81
+ _entries . RemoveFirst ( ) ;
82
+ first . ValueRef . Key = key ;
83
+ first . ValueRef . Value = value ;
84
+ _entries . AddLast ( first ) ;
85
+ _key_lookup [ key ] = first ;
86
+ }
87
+ else
88
+ {
89
+ _entries . AddLast ( new Pair < TK , TV > { Key = key , Value = value } ) ;
90
+ _key_lookup [ key ] = _entries . Last ;
91
+ }
92
+ }
96
93
}
97
94
98
95
public class LCG
0 commit comments