diff --git a/Cargo.toml b/Cargo.toml index 5e30b23..e0b0a9d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,9 @@ description = "A container that stores numbered objects. Each object can be assi license = "GPL-3.0-or-later OR Apache-2.0 OR MulanPSL-2.0" homepage = "https://github.com/arceos-org/arceos" repository = "https://github.com/arceos-org/flatten_objects" -documentation = "https://arceos-org.github.io/flatten_objects" +documentation = "https://docs.rs/flatten_objects" +keywords = ["arceos", "data-structures"] +categories = ["no-std", "data-structures"] [dependencies] bitmaps = { version = "3.2", default-features = false } diff --git a/README.md b/README.md new file mode 100644 index 0000000..ba069c0 --- /dev/null +++ b/README.md @@ -0,0 +1,34 @@ +# flatten_objects + +[![Crates.io](https://img.shields.io/crates/v/flatten_objects)](https://crates.io/crates/flatten_objects) + +`FlattenObjects` is a container that stores numbered objects. + +Objects can be added to the `FlattenObjects`, a unique ID will be assigned +to the object. The ID can be used to retrieve the object later. + +# Example + +```rust +use flatten_objects::FlattenObjects; + +let mut objects = FlattenObjects::::new(); + +// Add `23` 10 times and assign them IDs from 0 to 9. +for i in 0..=9 { + objects.add_at(i, 23).unwrap(); + assert!(objects.is_assigned(i)); +} + +// Remove the object with ID 6. +assert_eq!(objects.remove(6), Some(23)); +assert!(!objects.is_assigned(6)); + +// Add `42` (the ID 6 is available now). +let id = objects.add(42).unwrap(); +assert_eq!(id, 6); +assert!(objects.is_assigned(id)); +assert_eq!(objects.get(id), Some(&42)); +assert_eq!(objects.remove(id), Some(42)); +assert!(!objects.is_assigned(id)); +```