1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#![allow(dead_code)]

//! Will's Programming Toolbox
//!
//! # Concurrency Tools
//!
//! * [`sync::MultiRateLimiter`], a key-based rate limiter
//! * [`sync::RateLimiter`], a rate limiter
//! * [`sync::ShutdownController`], a tool to signal shutdown and wait for completion of asynchronous tasks
//! * [`sync::ds::BasicSharedMap`], a concurrent map that can be cloned and shared between threads
//! * [`executors::RayonThreadPool`], a thread pool which can wait for all tasks to complete before shutting down
//!
//! # Concurrency Primitives
//!
//! * [`sync::Mutex`], a primitive for mutual exclusion
//! * [`sync::SpinLock`], a primitive for mutual exclusion that spins in a loop
//! * [`sync::RwLock`], a primitive for mutual exclusion that allows multiple readers or one writer at a time
//! * [`sync::Semaphore`], a primitive to limit access
//! * [`sync::Condvar`], a primitive to signal and wait on a condition
//! * [`sync::oneshot::Channel`], a single-producer single-consumer channel that sends a single value
//! * [`sync::mpmc::Channel`], an unbounded multi-producer multi-consumer channel for message passing

pub use algorithms::sorting;
pub use concurrent::{executors, sync};

#[macro_use]
#[doc(hidden)]
pub mod macros;

mod algorithms;
mod concurrent;

cfg_dangerous! {
    mod collections;
    mod crates;
    mod exercises;
    mod language_features;
}