@@ -36,7 +36,10 @@ class Node
3636 public ulong Key ;
3737 public TKey SubKey ;
3838 public T Data ;
39- public Node Next ;
39+ public object next ;
40+ public Node Next {
41+ get { return ( Node ) next ; }
42+ }
4043
4144 public Node Init ( ulong key , TKey subKey , T data )
4245 {
@@ -45,7 +48,7 @@ public Node Init (ulong key, TKey subKey, T data)
4548 this . Data = data ;
4649
4750 this . Marked = false ;
48- this . Next = null ;
51+ this . next = null ;
4952
5053 return this ;
5154 }
@@ -56,7 +59,7 @@ public Node Init (ulong key)
5659 this . Key = key ;
5760 this . Data = default ( T ) ;
5861
59- this . Next = null ;
62+ this . next = null ;
6063 this . Marked = false ;
6164 this . SubKey = default ( TKey ) ;
6265
@@ -67,7 +70,7 @@ public Node Init (ulong key)
6770 public Node Init ( Node wrapped )
6871 {
6972 this . Marked = true ;
70- this . Next = wrapped ;
73+ this . next = wrapped ;
7174
7275 this . Key = 0 ;
7376 this . Data = default ( T ) ;
@@ -83,7 +86,7 @@ public Node Init (Node wrapped)
8386 Node head ;
8487 Node tail ;
8588
86- Node [ ] buckets = new Node [ BucketSize ] ;
89+ object [ ] buckets = new object [ BucketSize ] ;
8790 int count ;
8891 int size = 2 ;
8992
@@ -96,7 +99,7 @@ public SplitOrderedList (IEqualityComparer<TKey> comparer)
9699 this . comparer = comparer ;
97100 head = new Node ( ) . Init ( 0 ) ;
98101 tail = new Node ( ) . Init ( ulong . MaxValue ) ;
99- head . Next = tail ;
102+ head . next = tail ;
100103 SetBucket ( 0 , head ) ;
101104 }
102105
@@ -280,7 +283,7 @@ Node GetBucket (uint index)
280283 {
281284 if ( index >= buckets . Length )
282285 return null ;
283- return buckets [ index ] ;
286+ return ( Node ) buckets [ index ] ;
284287 }
285288
286289 Node SetBucket ( uint index , Node node )
@@ -289,8 +292,8 @@ Node SetBucket (uint index, Node node)
289292 slim . EnterReadLock ( ) ;
290293 CheckSegment ( index , true ) ;
291294
292- Interlocked . CompareExchange ( ref buckets [ index ] , node , null ) ;
293- return buckets [ index ] ;
295+ Interlocked . CompareExchange ( ref buckets [ index ] , node , null ) ;
296+ return ( Node ) buckets [ index ] ;
294297 } finally {
295298 slim . ExitReadLock ( ) ;
296299 }
@@ -343,7 +346,7 @@ Node ListSearch (ulong key, TKey subKey, ref Node left, Node h)
343346 return rightNode ;
344347 }
345348
346- if ( Interlocked . CompareExchange ( ref left . Next , rightNode , leftNodeNext ) == leftNodeNext ) {
349+ if ( Interlocked . CompareExchange ( ref left . next , rightNode , leftNodeNext ) == leftNodeNext ) {
347350 if ( rightNode != tail && rightNode . Next . Marked )
348351 continue ;
349352 else
@@ -371,12 +374,12 @@ bool ListDelete (Node startPoint, ulong key, TKey subKey, out T data)
371374 markedNode = new Node ( ) ;
372375 markedNode . Init ( rightNodeNext ) ;
373376
374- if ( Interlocked . CompareExchange ( ref rightNode . Next , markedNode , rightNodeNext ) == rightNodeNext )
377+ if ( Interlocked . CompareExchange ( ref rightNode . next , markedNode , rightNodeNext ) == rightNodeNext )
375378 break ;
376379 }
377380 } while ( true ) ;
378381
379- if ( Interlocked . CompareExchange ( ref leftNode . Next , rightNodeNext , rightNode ) != rightNode )
382+ if ( Interlocked . CompareExchange ( ref leftNode . next , rightNodeNext , rightNode ) != rightNode )
380383 ListSearch ( rightNode . Key , subKey , ref leftNode , startPoint ) ;
381384
382385 return true ;
@@ -392,10 +395,10 @@ bool ListInsert (Node newNode, Node startPoint, out Node current, Func<T> dataCr
392395 if ( rightNode != tail && rightNode . Key == key && comparer . Equals ( newNode . SubKey , rightNode . SubKey ) )
393396 return false ;
394397
395- newNode . Next = rightNode ;
398+ newNode . next = rightNode ;
396399 if ( dataCreator != null )
397400 newNode . Data = dataCreator ( ) ;
398- if ( Interlocked . CompareExchange ( ref leftNode . Next , newNode , rightNode ) == rightNode )
401+ if ( Interlocked . CompareExchange ( ref leftNode . next , newNode , rightNode ) == rightNode )
399402 return true ;
400403 } while ( true ) ;
401404 }
0 commit comments