1- use std:: {
2- borrow:: Borrow ,
3- hash:: { Hash , Hasher } ,
4- mem, usize,
5- } ;
6-
71use std:: collections:: HashMap ;
2+ use std:: marker:: PhantomData ;
3+ use std:: { borrow:: Borrow , hash:: Hash , mem, usize} ;
84
5+ use crate :: arr:: SkipIter ;
96use crate :: { KeyRef , KeyWrapper , SkipList , SkipNode } ;
107
118struct Context < K : Hash > {
@@ -52,7 +49,7 @@ impl<K: Hash> PartialOrd for Context<K> {
5249/// val.add_or_update("aa", 10);
5350/// val.add_or_update("bb", 12);
5451/// assert_eq!(val.len(), 2);
55- /// assert_eq!(val.rank(&"bb"), 0 );
52+ /// assert_eq!(val.rank(&"bb"), 2 );
5653/// val.add_or_update("bb", 9);
5754/// assert_eq!(val.rank(&"bb"), 1);
5855/// assert_eq!(val.len(), 2);
@@ -89,11 +86,42 @@ impl<K: Hash + Eq> ZSet<K> {
8986 self . dict . len ( )
9087 }
9188
89+
90+ /// 清除集合
91+ ///
92+ /// # Examples
93+ ///
94+ /// ```
95+ /// use algorithm::ZSet;
96+ /// fn main() {
97+ /// let mut val = ZSet::new();
98+ /// val.add_or_update("aa", 10);
99+ /// val.add_or_update("bb", 12);
100+ /// assert_eq!(val.len(), 2);
101+ /// val.clear();
102+ /// assert_eq!(val.len(), 0);
103+ /// }
104+ /// ```
105+ ///
92106 pub fn clear ( & mut self ) {
93107 self . dict . clear ( ) ;
94108 self . zsl . clear ( ) ;
95109 }
96110
111+ /// 包含键值
112+ ///
113+ /// # Examples
114+ ///
115+ /// ```
116+ /// use algorithm::ZSet;
117+ /// fn main() {
118+ /// let mut val = ZSet::new();
119+ /// val.add_or_update("aa", 10);
120+ /// val.add_or_update("bb", 12);
121+ /// assert_eq!(val.contains_key(&"aa"), true);
122+ /// }
123+ /// ```
124+ ///
97125 pub fn contains_key < Q > ( & mut self , k : & Q ) -> bool
98126 where
99127 K : Borrow < Q > ,
@@ -102,6 +130,21 @@ impl<K: Hash + Eq> ZSet<K> {
102130 self . dict . contains_key ( KeyWrapper :: from_ref ( k) )
103131 }
104132
133+
134+ /// 获取排序值
135+ ///
136+ /// # Examples
137+ ///
138+ /// ```
139+ /// use algorithm::ZSet;
140+ /// fn main() {
141+ /// let mut val = ZSet::new();
142+ /// val.add_or_update("aa", 10);
143+ /// val.add_or_update("bb", 12);
144+ /// assert_eq!(val.len(), 2);
145+ ///
146+ /// }
147+ /// ```
105148 pub fn rank < Q > ( & mut self , k : & Q ) -> usize
106149 where
107150 K : Borrow < Q > ,
@@ -113,7 +156,22 @@ impl<K: Hash + Eq> ZSet<K> {
113156 0
114157 }
115158
116- pub fn erase < Q > ( & mut self , k : & Q ) -> bool
159+ /// 删除元素
160+ ///
161+ /// # Examples
162+ ///
163+ /// ```
164+ /// use algorithm::ZSet;
165+ /// fn main() {
166+ /// let mut val = ZSet::new();
167+ /// val.add_or_update("aa", 10);
168+ /// val.add_or_update("bb", 12);
169+ /// assert_eq!(val.len(), 2);
170+ /// assert!(val.remove(&"bb"));
171+ /// assert_eq!(val.len(), 1);
172+ /// }
173+ /// ```
174+ pub fn remove < Q > ( & mut self , k : & Q ) -> bool
117175 where
118176 K : Borrow < Q > ,
119177 Q : Hash + Eq + ?Sized ,
@@ -125,6 +183,23 @@ impl<K: Hash + Eq> ZSet<K> {
125183 }
126184 }
127185
186+ /// 添加或者更新值
187+ ///
188+ /// # Examples
189+ ///
190+ /// ```
191+ /// use algorithm::ZSet;
192+ /// fn main() {
193+ /// let mut val = ZSet::new();
194+ /// val.add_or_update("aa", 10);
195+ /// val.add_or_update("bb", 12);
196+ /// assert_eq!(val.len(), 2);
197+ /// val.add_or_update("bb", 14);
198+ /// assert_eq!(val.len(), 2);
199+ /// assert_eq!(val.score(&"bb"), 14);
200+ ///
201+ /// }
202+ /// ```
128203 pub fn add_or_update ( & mut self , key : K , mut score : isize ) {
129204 if self . max_count == 0 || self . max_count == self . dict . len ( ) {
130205 return ;
@@ -140,18 +215,32 @@ impl<K: Hash + Eq> ZSet<K> {
140215 timestamp : 0 ,
141216 } ;
142217
143- let key_ref = KeyRef :: new ( unsafe { & * context. key . as_ptr ( ) } ) ;
144-
145-
218+ let key_ref = KeyRef :: new ( context. key . as_ptr ( ) ) ;
146219 if let Some ( v) = self . dict . remove ( & key_ref) {
147220 let ret = self . zsl . update ( unsafe { & ( * v) . score } , context) ;
221+ let key_ref = KeyRef :: new ( unsafe { ( * ret) . score . key . as_ptr ( ) } ) ;
148222 self . dict . insert ( key_ref, ret) ;
149223 } else {
150224 let ret = self . zsl . insert ( context) ;
225+ let key_ref = KeyRef :: new ( unsafe { ( * ret) . score . key . as_ptr ( ) } ) ;
151226 self . dict . insert ( key_ref, ret) ;
152227 }
153228 }
154229
230+ /// 获取score值
231+ ///
232+ /// # Examples
233+ ///
234+ /// ```
235+ /// use algorithm::ZSet;
236+ /// fn main() {
237+ /// let mut val = ZSet::new();
238+ /// val.add_or_update("aa", 10);
239+ /// val.add_or_update("bb", 12);
240+ /// assert_eq!(val.score(&"bb"), 12);
241+ ///
242+ /// }
243+ /// ```
155244 pub fn score < Q > ( & mut self , k : & Q ) -> isize
156245 where
157246 K : Borrow < Q > ,
@@ -169,3 +258,10 @@ impl<K: Hash + Eq> Drop for ZSet<K> {
169258 self . clear ( ) ;
170259 }
171260}
261+
262+
263+ // pub struct Iter<'a, K: 'a + Default + PartialEq + PartialOrd> {
264+ // len: usize,
265+ // iter: SkipIter<&'a K>,
266+ // data: PhantomData<&'a ()>,
267+ // }
0 commit comments