1- use crate :: ids :: Slot ;
1+ #! [ allow ( clippy :: missing_panics_doc ) ]
22
33#[ derive( Clone , Copy , Debug , Eq , PartialEq ) ]
4- pub ( crate ) struct RetireEntry < K > {
4+ pub struct RetireEntry < K , S > {
55 pub key : K ,
6- pub retire_after_slot : Slot ,
6+ pub retire_after_slot : S ,
77}
88
99#[ derive( Clone , Copy , Debug , Eq , PartialEq ) ]
10- pub ( crate ) enum RetireQueueError {
10+ pub enum RetireQueueError {
1111 Full ,
1212}
1313
1414#[ derive( Debug ) ]
15- pub ( crate ) struct RetireQueue < K > {
16- entries : Vec < Option < RetireEntry < K > > > ,
15+ pub struct RetireQueue < K , S > {
16+ entries : Vec < Option < RetireEntry < K , S > > > ,
1717 head : usize ,
1818 len : usize ,
1919}
2020
21- impl < K : Copy > RetireQueue < K > {
21+ impl < K : Copy , S : Copy > RetireQueue < K , S > {
2222 #[ must_use]
23- pub ( crate ) fn with_capacity ( capacity : usize ) -> Self {
23+ pub fn with_capacity ( capacity : usize ) -> Self {
2424 let mut entries = Vec :: with_capacity ( capacity. max ( 1 ) ) ;
2525 entries. resize_with ( capacity. max ( 1 ) , || None ) ;
2626 Self {
@@ -30,7 +30,10 @@ impl<K: Copy> RetireQueue<K> {
3030 }
3131 }
3232
33- pub ( crate ) fn push ( & mut self , entry : RetireEntry < K > ) -> Result < ( ) , RetireQueueError > {
33+ /// # Errors
34+ ///
35+ /// Returns [`RetireQueueError::Full`] when the queue has no free slot for another entry.
36+ pub fn push ( & mut self , entry : RetireEntry < K , S > ) -> Result < ( ) , RetireQueueError > {
3437 if self . len == self . entries . len ( ) {
3538 return Err ( RetireQueueError :: Full ) ;
3639 }
@@ -41,15 +44,16 @@ impl<K: Copy> RetireQueue<K> {
4144 Ok ( ( ) )
4245 }
4346
44- pub ( crate ) fn front ( & self ) -> Option < RetireEntry < K > > {
47+ #[ must_use]
48+ pub fn front ( & self ) -> Option < RetireEntry < K , S > > {
4549 if self . len == 0 {
4650 None
4751 } else {
4852 self . entries [ self . head ]
4953 }
5054 }
5155
52- pub ( crate ) fn pop_front ( & mut self ) -> Option < RetireEntry < K > > {
56+ pub fn pop_front ( & mut self ) -> Option < RetireEntry < K , S > > {
5357 if self . len == 0 {
5458 return None ;
5559 }
@@ -63,8 +67,6 @@ impl<K: Copy> RetireQueue<K> {
6367
6468#[ cfg( test) ]
6569mod tests {
66- use crate :: ids:: Slot ;
67-
6870 use super :: { RetireEntry , RetireQueue , RetireQueueError } ;
6971
7072 #[ test]
@@ -73,22 +75,22 @@ mod tests {
7375 queue
7476 . push ( RetireEntry {
7577 key : 1_u64 ,
76- retire_after_slot : Slot ( 7 ) ,
78+ retire_after_slot : 7_u64 ,
7779 } )
7880 . unwrap ( ) ;
7981
8082 assert_eq ! (
8183 queue. front( ) ,
8284 Some ( RetireEntry {
8385 key: 1 ,
84- retire_after_slot: Slot ( 7 )
86+ retire_after_slot: 7 ,
8587 } )
8688 ) ;
8789 assert_eq ! (
8890 queue. pop_front( ) ,
8991 Some ( RetireEntry {
9092 key: 1 ,
91- retire_after_slot: Slot ( 7 )
93+ retire_after_slot: 7 ,
9294 } )
9395 ) ;
9496 assert_eq ! ( queue. pop_front( ) , None ) ;
@@ -100,19 +102,19 @@ mod tests {
100102 queue
101103 . push ( RetireEntry {
102104 key : 1_u64 ,
103- retire_after_slot : Slot ( 1 ) ,
105+ retire_after_slot : 1_u64 ,
104106 } )
105107 . unwrap ( ) ;
106108 queue
107109 . push ( RetireEntry {
108110 key : 2_u64 ,
109- retire_after_slot : Slot ( 2 ) ,
111+ retire_after_slot : 2_u64 ,
110112 } )
111113 . unwrap ( ) ;
112114 assert_eq ! (
113115 queue. push( RetireEntry {
114116 key: 3_u64 ,
115- retire_after_slot: Slot ( 3 ) ,
117+ retire_after_slot: 3_u64 ,
116118 } ) ,
117119 Err ( RetireQueueError :: Full )
118120 ) ;
@@ -121,7 +123,7 @@ mod tests {
121123 queue
122124 . push ( RetireEntry {
123125 key : 3_u64 ,
124- retire_after_slot : Slot ( 3 ) ,
126+ retire_after_slot : 3_u64 ,
125127 } )
126128 . unwrap ( ) ;
127129
0 commit comments