5 unstable releases

Uses old Rust 2015

0.4.1 Sep 8, 2022
0.4.0 Dec 6, 2019
0.3.0 Nov 19, 2019
0.2.0 Jan 27, 2019
0.1.1 Jun 29, 2018

#179 in Memory management

Download history 14561/week @ 2023-06-08 14235/week @ 2023-06-15 16424/week @ 2023-06-22 12759/week @ 2023-06-29 20031/week @ 2023-07-06 18511/week @ 2023-07-13 19651/week @ 2023-07-20 19521/week @ 2023-07-27 20108/week @ 2023-08-03 18297/week @ 2023-08-10 34844/week @ 2023-08-17 70070/week @ 2023-08-24 55416/week @ 2023-08-31 93707/week @ 2023-09-07 80427/week @ 2023-09-14 77671/week @ 2023-09-21

322,318 downloads per month
Used in 97 crates (5 directly)

MIT license

18KB
364 lines

Census

Build status

This crate makes it possible to create an inventory object that keeps track of instances of a given type.

It is used in tantivy to get an accurate list of all of the files that are still in use by the index, and avoid garbage collecting them.

This TrackedObject<T> instance include some reference counting logic to ensure that the object is removed from the inventory once the last instance is dropped.

Example


extern crate census;

use census::{Inventory, TrackedObject};

fn main() {
    let inventory = Inventory::new();

    //  Each object tracked needs to be registered explicitely in the Inventory.
    //  A `TrackedObject<T>` wrapper is then returned.
    let one = inventory.track("one".to_string());
    let two = inventory.track("two".to_string());

    // A snapshot  of the list of living instances can be obtained...
    // (no guarantee on their order)
    let living_instances: Vec<TrackedObject<String>> = inventory.list();
    assert_eq!(living_instances.len(), 2);
}

No runtime deps