Skip to content

Commit dab9b8e

Browse files
committed
fix timer wheel
1 parent 6951c0a commit dab9b8e

File tree

6 files changed

+55
-33
lines changed

6 files changed

+55
-33
lines changed

Cargo.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ members = ["algorithm-macro"]
33

44
[package]
55
name = "algorithm"
6-
version = "0.1.17"
6+
version = "0.1.18"
77
edition = "2021"
88
authors = ["tickbh <tickdream125@hotmail.com>"]
99
description = "about algorithm data structure, now has ttl with lru/lru-k/lfu/arc and slab/rbtree/roaring_bitmap/timer_wheelss, 关于算法常用的数据结构"
@@ -16,7 +16,7 @@ keywords = ["arc", "lru", "lfu", "timerwheel", "slab"]
1616
[dependencies]
1717
lazy_static = "1.5.0"
1818
hashbrown = "0.15.2"
19-
log = "0.4.25"
19+
log = "0.4.26"
2020

2121
[dependencies.algorithm-macro]
2222
# path = "algorithm-macro"

examples/timer.rs

Lines changed: 41 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,49 @@
11
use algorithm::TimerWheel;
22

33
fn main() {
4+
// let mut timer = TimerWheel::new();
5+
// timer.append_timer_wheel(60, "SecondWheel");
6+
// timer.append_timer_wheel(60, "MinuteWheel");
7+
// timer.append_timer_wheel(12, "HourWheel");
8+
9+
// timer.add_timer(30);
10+
// assert_eq!(timer.get_delay_id(), 30);
11+
// timer.add_timer(149);
12+
// assert_eq!(timer.get_delay_id(), 30);
13+
// let t = timer.add_timer(600);
14+
// assert_eq!(timer.get_delay_id(), 30);
15+
// timer.add_timer(1);
16+
// assert_eq!(timer.get_delay_id(), 1);
17+
// timer.del_timer(t);
18+
// timer.add_timer(150);
19+
// assert_eq!(timer.get_delay_id(), 1);
20+
21+
// let val = timer.update_deltatime(30).unwrap();
22+
// assert_eq!(val.iter().map(|(_, v)| *v).collect::<Vec<usize>>(), vec![1, 30]);
23+
24+
// timer.add_timer(2);
25+
26+
// let val = timer.update_deltatime(119).unwrap();
27+
// assert_eq!(val.iter().map(|(_, v)| *v).collect::<Vec<usize>>(), vec![2, 149]);
28+
29+
// let val = timer.update_deltatime(1).unwrap();
30+
// assert_eq!(val.iter().map(|(_, v)| *v).collect::<Vec<usize>>(), vec![150]);
31+
32+
// assert!(timer.is_empty());
33+
434
let mut timer = TimerWheel::new();
35+
timer.set_one_step(5);
36+
timer.append_timer_wheel(200, "MillisWheel");
537
timer.append_timer_wheel(60, "SecondWheel");
638
timer.append_timer_wheel(60, "MinuteWheel");
7-
timer.append_timer_wheel(12, "HourWheel");
8-
9-
timer.add_timer(30);
10-
assert_eq!(timer.get_delay_id(), 30);
11-
timer.add_timer(149);
12-
assert_eq!(timer.get_delay_id(), 30);
13-
let t = timer.add_timer(600);
14-
assert_eq!(timer.get_delay_id(), 30);
15-
timer.add_timer(1);
16-
assert_eq!(timer.get_delay_id(), 1);
17-
timer.del_timer(t);
18-
timer.add_timer(150);
19-
assert_eq!(timer.get_delay_id(), 1);
20-
21-
let val = timer.update_deltatime(30).unwrap();
22-
assert_eq!(val.iter().map(|(_, v)| *v).collect::<Vec<usize>>(), vec![1, 30]);
23-
24-
timer.add_timer(2);
25-
26-
let val = timer.update_deltatime(119).unwrap();
27-
assert_eq!(val.iter().map(|(_, v)| *v).collect::<Vec<usize>>(), vec![2, 149]);
28-
29-
let val = timer.update_deltatime(1).unwrap();
30-
assert_eq!(val.iter().map(|(_, v)| *v).collect::<Vec<usize>>(), vec![150]);
39+
40+
timer.add_timer(1000);
41+
42+
let val = timer.update_deltatime(2000).unwrap();
43+
println!("val = {:?}", val);
44+
45+
46+
let val = timer.update_deltatime(2000);
47+
println!("val = {:?}", val);
3148

32-
assert!(timer.is_empty());
3349
}

src/map/mod.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11

22
mod bitmap;
33
mod roaring_bitmap;
4+
mod ttl_hashmap;
45

56
pub use bitmap::BitMap;
6-
pub use roaring_bitmap::RoaringBitMap;
7+
pub use roaring_bitmap::RoaringBitMap;
8+
pub use ttl_hashmap::TtlHashMap;

src/map/ttl_hashmap.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
2+
pub struct TtlHashMap {
3+
4+
}

src/timer/timer_wheel.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,13 +128,13 @@ impl<T: Timer> OneTimerWheel<T> {
128128
if offset > self.capation {
129129
let index = (self.index + self.num - 1) % self.num;
130130
self.slots[index as usize].push(entry);
131-
} else if offset < self.fix_step && !self.child.is_null() {
131+
} else if offset <= self.fix_step && !self.child.is_null() {
132132
unsafe {
133133
(*self.child).add_timer_with_offset(entry, offset);
134134
}
135135
} else {
136136
// 当前偏差值还在自己的容纳范围之前,做容错,排在最后处理位
137-
let index = (offset - 1) / self.step;
137+
let index = (offset - 1) / self.fix_step;
138138
let index = (index + self.index) % self.num;
139139
self.slots[index as usize].push(entry);
140140
}

0 commit comments

Comments
 (0)