Skip to main content

Crate rstared

Crate rstared 

Source
Expand description

Docs Crates.io MIT OR Apache 2.0

§rstared

rstared::RTreed is a simple Rust decorator that adds a passively listening R-tree, rstar::RTree, to the following collections:

This library is no_std-compatible and has no mandatory third-party dependencies except for alloc.

§Usage

§Basic usage

Add rstared as a dependency to your Cargo.toml together with the features that gate the collections you are going to use. For example, to use rstared with stable_vec::StableVec and thunderdome::Arena, write

[dependencies]
rstared = { version = "0.11.0", features = ["stable-vec", "thunderdome"] }

Following is a basic usage example (examples/basic_usage.rs):

use std::collections::HashMap;

use rstar::{AABB, primitives::Rectangle};
use rstared::RTreed;

fn main() {
    // A hashmap of 2D rectangles will be the underlying collection.
    let rect_hashmap: HashMap<i32, Rectangle<(i32, i32)>> = HashMap::new();

    // Wrap `RTreed` around the hashmap.
    let mut rtreed = RTreed::new(rect_hashmap);

    // Insert two rectangles, recording them in the R-tree.
    rtreed.insert(1, Rectangle::from_corners((0, 0), (1, 1)));
    rtreed.insert(2, Rectangle::from_corners((1, 1), (2, 2)));

    // Locate the two rectangles in the R-tree.
    assert_eq!(
        rtreed
            .rtree()
            .locate_in_envelope(&AABB::from_corners((0, 0), (2, 2)))
            .count(),
        2
    );

    // Now remove one of the rectangles, recording this in the R-tree.
    rtreed.remove(&1);

    // Make the same query to the R-tree as before.
    // Only one rectangle is now present.
    assert_eq!(
        rtreed
            .rtree()
            .locate_in_envelope(&AABB::from_corners((0, 0), (2, 2)))
            .count(),
        1
    );
}

§Usage on maps with pushing

Some data structures with map semantics also provide a special type of insertion where a value is inserted without specifying a key, which the structure instead automatically generates and returns by itself. This operation is called pushing.

If a supported type has a push interface, you can use it through RTreed by calling .push(), like this:

rtreed.push('A');

StableVec and thunderdome::Arena are instances of supported pushable maps.

§Contributing

We welcome issues and pull requests from anyone both to our repository on GitHub.

If you would like rstared to work with a new collection type, please make a contribution to maplike, which provides and implements the traits rstared relies on.

§Licence

§Outbound licence

rstared is dual-licensed as under either of

at your option.

§Inbound licence

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this work by you will be dual-licensed as described above, without any additional terms or conditions.

Structs§

AsRefRTree
RTreed

Traits§

Container
Base trait for keyed collections, without any operations defined yet.
Get
Returns a reference to the value corresponding to the key.
Insert
Insert a new key-value pair into the collection at an arbitrary key.
Push
Insert a value into the collection without specifying a key, returning the key that was automatically generated.
Remove
Remove an element under a key from the collection, returning the value at the key if the key was previously in the map. Other keys are not invalidated.