dscale 0.7.1

A fast & deterministic simulation framework for benchmarking and testing distributed systems
Documentation
// DScale: deterministic distributed systems simulator
// Copyright (C) 2026  Konstantin Shprenger

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.

use std::sync::Arc;

use crate::Pid;
use crate::jiffy::Jiffies;
use crate::random::Randomizer;
use crate::topology::Topology;

pub(crate) struct Latency {
    topology: Arc<Topology>,
    randomizer: Randomizer,
}

impl Latency {
    pub(crate) fn new(randomizer: Randomizer, topology: Arc<Topology>) -> Self {
        Self {
            randomizer,
            topology,
        }
    }

    pub(crate) fn random_latency(&mut self, source: Pid, target: Pid) -> Jiffies {
        let distribution = self.topology.get_distribution(source, target);
        Jiffies(self.randomizer.random_usize(distribution))
    }
}