@@ -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