Skip to main content

SharedGraph

Struct SharedGraph 

Source
pub struct SharedGraph { /* private fields */ }
Expand description

Thread-safe, clonable handle to an EntityGraph.

Uses parking_lot::RwLock for reader-writer locking, allowing concurrent reads with exclusive writes. Cloning shares the underlying graph (via Arc).

Write operations automatically send the new graph version on an internal broadcast channel. Call subscribe to get a receiver.

Implementations§

Source§

impl SharedGraph

Source

pub fn new(graph: EntityGraph) -> Self

Wrap an EntityGraph in a thread-safe handle.

Source

pub fn subscribe(&self) -> Receiver<u64>

Subscribe to graph change notifications.

Returns a receiver that yields the new graph version after each write operation (add, update, remove).

Source

pub fn subscriber_count(&self) -> usize

Number of active subscribers.

Source

pub fn read<F, R>(&self, f: F) -> R
where F: FnOnce(&EntityGraph) -> R,

Execute a closure with shared (read) access to the graph.

Source

pub fn write<F, R>(&self, f: F) -> R
where F: FnOnce(&mut EntityGraph) -> R,

Execute a closure with exclusive (write) access to the graph.

Source

pub fn add(&self, entity: HDict) -> Result<String, GraphError>

Add an entity. See EntityGraph::add.

Source

pub fn get(&self, ref_val: &str) -> Option<HDict>

Get an entity by ref value.

Returns an owned clone because the read lock is released before the caller uses the value.

Source

pub fn update(&self, ref_val: &str, changes: HDict) -> Result<(), GraphError>

Update an entity. See EntityGraph::update.

Source

pub fn remove(&self, ref_val: &str) -> Result<HDict, GraphError>

Remove an entity. See EntityGraph::remove.

Source

pub fn read_filter( &self, filter_expr: &str, limit: usize, ) -> Result<HGrid, GraphError>

Run a filter expression and return a grid.

Source

pub fn len(&self) -> usize

Number of entities.

Source

pub fn is_empty(&self) -> bool

Returns true if the graph has no entities.

Source

pub fn all_entities(&self) -> Vec<HDict>

Return all entities as owned clones.

Source

pub fn contains(&self, ref_val: &str) -> bool

Check if an entity with the given ref value exists.

Source

pub fn version(&self) -> u64

Current graph version.

Source

pub fn read_all( &self, filter_expr: &str, limit: usize, ) -> Result<Vec<HDict>, GraphError>

Run a filter and return matching entity dicts (cloned).

Source

pub fn refs_from(&self, ref_val: &str, ref_type: Option<&str>) -> Vec<String>

Get ref values that the given entity points to.

Source

pub fn refs_to(&self, ref_val: &str, ref_type: Option<&str>) -> Vec<String>

Get ref values of entities that point to the given entity.

Source

pub fn changes_since( &self, version: u64, ) -> Result<Vec<GraphDiff>, ChangelogGap>

Get changelog entries since a given version.

Returns Err(ChangelogGap) if the requested version has been evicted.

Source

pub fn entities_fitting(&self, spec_name: &str) -> Vec<HDict>

Find all entities that structurally fit a spec/type name.

Returns owned clones. See EntityGraph::entities_fitting.

Source

pub fn validate(&self) -> Vec<ValidationIssue>

Validate all entities against the namespace and check for dangling refs.

See EntityGraph::validate.

Source

pub fn all_edges(&self) -> Vec<(String, String, String)>

Return all edges as (source_ref, ref_tag, target_ref) tuples.

Source

pub fn neighbors( &self, ref_val: &str, hops: usize, ref_types: Option<&[&str]>, ) -> (Vec<HDict>, Vec<(String, String, String)>)

BFS neighborhood: entities and edges within hops of ref_val.

Source

pub fn shortest_path(&self, from: &str, to: &str) -> Vec<String>

BFS shortest path from from to to.

Source

pub fn subtree(&self, root: &str, max_depth: usize) -> Vec<(HDict, usize)>

Subtree rooted at root up to max_depth levels.

Returns entities with their depth from root.

Source

pub fn ref_chain(&self, ref_val: &str, ref_tags: &[&str]) -> Vec<HDict>

Walk a chain of ref tags. See EntityGraph::ref_chain.

Source

pub fn site_for(&self, ref_val: &str) -> Option<HDict>

Resolve the site for any entity. See EntityGraph::site_for.

Source

pub fn children(&self, ref_val: &str) -> Vec<HDict>

All direct children of an entity. See EntityGraph::children.

Source

pub fn equip_points(&self, equip_ref: &str, filter: Option<&str>) -> Vec<HDict>

All points for an equip, optionally filtered. See EntityGraph::equip_points.

Source

pub fn hierarchy_tree( &self, root: &str, max_depth: usize, ) -> Option<HierarchyNode>

Build a hierarchy tree. See EntityGraph::hierarchy_tree.

Source

pub fn classify(&self, ref_val: &str) -> Option<String>

Classify an entity. See EntityGraph::classify.

Trait Implementations§

Source§

impl Clone for SharedGraph

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Default for SharedGraph

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.