We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent b2424c2 commit 976ca88Copy full SHA for 976ca88
Cargo.toml
@@ -32,6 +32,6 @@ opt-level = 3
32
debug = true
33
34
[features]
35
-default = ["hashbrown", "ttl"]
+default = ["ttl"]
36
hashbrown = []
37
ttl = []
examples/zset.rs
@@ -1,7 +1,27 @@
1
-use algorithm::ZSet;
+use std::borrow::Borrow;
2
+
3
+use algorithm::{KeyRef, KeyWrapper, ZSet};
4
fn main() {
5
let mut val = ZSet::new();
- val.add_or_update("key", 1);
- assert_eq!(val.len(), 1);
6
- println!("ok!!!!!!!!!!");
7
+ // let wrap = KeyWrapper::from_ref(&"bb");
8
+ // let key_ref = KeyRef::new(&"bb");
9
+ // println!("aaaaaaaaaaaaaa = {}", wrap.eq(key_ref.borrow()));
10
11
+ // val.add_or_update(11, 10);
12
+ // val.add_or_update(22, 12);
13
+ // assert_eq!(val.score(&22), 12);
14
+ // assert_eq!(val.len(), 2);
15
+ // assert_eq!(val.rank(&22), 0);
16
+ // val.add_or_update(22, 9);
17
+ // assert_eq!(val.rank(&22), 1);
18
19
+ // val.add_or_update("aa", 10);
20
+ val.add_or_update("xxx", 12);
21
+ assert_eq!(val.score(&"xxx"), 12);
22
+ assert_eq!(val.len(), 2);
23
+ assert_eq!(val.rank(&"bb"), 0);
24
+ val.add_or_update("bb", 9);
25
+ assert_eq!(val.rank(&"bb"), 1);
26
27
}
src/key.rs
@@ -1,3 +1,4 @@
+use std::any::{type_name, TypeId};
use std::borrow::Borrow;
use std::hash::Hash;
use std::ptr;
@@ -71,7 +72,10 @@ impl<Q: ?Sized + Hash> Hash for KeyWrapper<Q> {
71
72
73
impl<Q: ?Sized + PartialEq> PartialEq for KeyWrapper<Q> {
74
fn eq(&self, other: &Self) -> bool {
- (self.0).eq(&other.0)
75
+ println!("aaa = {}", (self.0).eq(&other.0));
76
+ println!("aaabbb = {}", (&self.0).eq(&other.0));
77
+ println!("aaabbbccccc = {}", self.0 == other.0);
78
+ (&self.0).eq(&other.0)
79
80
81
@@ -83,6 +87,7 @@ where
83
87
Q: ?Sized,
84
88
{
85
89
fn borrow(&self) -> &KeyWrapper<Q> {
90
+ println!("tttttttt = {} vv = {}", type_name::<K>(), type_name::<Q>());
86
91
let key = unsafe { &*self.k }.borrow();
92
KeyWrapper::from_ref(key)
93
src/map/zset.rs
@@ -4,7 +4,7 @@ use std::{
mem, usize,
};
-use hashbrown::HashMap;
+use std::collections::HashMap;
use crate::{KeyRef, KeyWrapper, SkipList, SkipNode};
@@ -41,6 +41,23 @@ impl<K: Hash> PartialOrd for Context<K> {
41
42
43
44
+/// 一种可排序的Set类型
45
+///
46
+/// # Examples
47
48
+/// ```
49
+/// use algorithm::ZSet;
50
+/// fn main() {
51
+/// let mut val = ZSet::new();
52
+/// val.add_or_update("aa", 10);
53
+/// val.add_or_update("bb", 12);
54
+/// assert_eq!(val.len(), 2);
55
+/// assert_eq!(val.rank(&"bb"), 0);
56
+/// val.add_or_update("bb", 9);
57
+/// assert_eq!(val.rank(&"bb"), 1);
58
59
+/// }
60
61
pub struct ZSet<K: Hash + Eq> {
62
max_count: usize,
63
reverse: bool,
@@ -125,6 +142,7 @@ impl<K: Hash + Eq> ZSet<K> {
125
142
126
143
let key_ref = KeyRef::new(unsafe { &*context.key.as_ptr() });
127
144
145
128
146
if let Some(v) = self.dict.remove(&key_ref) {
129
147
let ret = self.zsl.update(unsafe { &(*v).score }, context);
130
148
self.dict.insert(key_ref, ret);
0 commit comments