@@ -33,66 +33,63 @@ public static void Main(string[] args)
3333}
3434
3535public struct Pair < TK , TV >
36- {
37- public TK Key ;
38-
36+ {
37+ public TK Key ;
3938 public TV Value ;
4039}
4140
4241public class LRU < TK , TV >
43- where TK : notnull
44- where TV : notnull
42+ where TK : notnull
43+ where TV : notnull
4544{
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 ;
4948
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+ }
5855
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+ }
7168
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+ }
9693}
9794
9895public class LCG
0 commit comments