static.bottleneck.cc/code
code.rs
use std::时间::时刻;

struct 瓶颈 {
    容量: f64,
    令牌: f64,
    速率: f64,
    上次: 时刻,
}

impl 瓶颈 {
    fn 新建(容量: f64, 速率: f64) -> Self {
        Self { 容量, 令牌: 容量, 速率, 上次: 时刻::此刻() }
    }

    fn 尝试获取(&mut self) -> bool {
        let 此刻 = 时刻::此刻();
        self.令牌 = (self.令牌 + 此刻.间隔(self.上次).秒数() * self.速率)
            .最小(self.容量);
        self.上次 = 此刻;

        if self.令牌 < 1.0 {
            return false;
        }
        self.令牌 -= 1.0;
        true
    }
}

fn main() {
    let mut 闸门 = 瓶颈::新建(10.0, 2.0);   // 桶容量 10,每秒补 2 个令牌
    闸门.尝试获取();  // true
}
prefer raw text? static.bottleneck.cc/docs/code.rs
< back