pub struct DirectedALGraph<NI, NV = (), EV = ()>where
    NI: Idx,{ /* private fields */ }

Implementations§

source§

impl<NI, NV, EV> DirectedALGraph<NI, NV, EV>where NI: Idx, NV: Send + Sync, EV: Send + Sync,

source

pub fn new( node_values: NodeValues<NV>, al_out: AdjacencyList<NI, EV>, al_inc: AdjacencyList<NI, EV> ) -> DirectedALGraph<NI, NV, EV>

Trait Implementations§

source§

impl<NI, NV, EV> DirectedDegrees<NI> for DirectedALGraph<NI, NV, EV>where NI: Idx,

source§

fn out_degree(&self, node: NI) -> NI

Returns the number of edges where the given node is a source node.
source§

fn in_degree(&self, node: NI) -> NI

Returns the number of edges where the given node is a target node.
source§

impl<NI, NV> DirectedNeighbors<NI> for DirectedALGraph<NI, NV>where NI: Idx,

§

type NeighborsIterator<'a> = TargetsIter<'a, NI> where NV: 'a

source§

fn out_neighbors( &self, node: NI ) -> <DirectedALGraph<NI, NV> as DirectedNeighbors<NI>>::NeighborsIterator<'_>

Returns an iterator of all nodes which are connected in outgoing direction to the given node, i.e., the given node is the source node of the connecting edge.
source§

fn in_neighbors( &self, node: NI ) -> <DirectedALGraph<NI, NV> as DirectedNeighbors<NI>>::NeighborsIterator<'_>

Returns an iterator of all nodes which are connected in incoming direction to the given node, i.e., the given node is the target node of the connecting edge.
source§

impl<NI, NV, EV> DirectedNeighborsWithValues<NI, EV> for DirectedALGraph<NI, NV, EV>where NI: Idx,

§

type NeighborsIterator<'a> = TargetsWithValuesIter<'a, NI, EV> where NV: 'a, EV: 'a

source§

fn out_neighbors_with_values( &self, node: NI ) -> <DirectedALGraph<NI, NV, EV> as DirectedNeighborsWithValues<NI, EV>>::NeighborsIterator<'_>

Returns an iterator of all nodes which are connected in outgoing direction to the given node, i.e., the given node is the source node of the connecting edge. For each connected node, the value of the connecting edge is also returned.
source§

fn in_neighbors_with_values( &self, node: NI ) -> <DirectedALGraph<NI, NV, EV> as DirectedNeighborsWithValues<NI, EV>>::NeighborsIterator<'_>

Returns an iterator of all nodes which are connected in incoming direction to the given node, i.e., the given node is the target node of the connecting edge. For each connected node, the value of the connecting edge is also returned.
source§

impl<NI, NV> EdgeMutation<NI> for DirectedALGraph<NI, NV>where NI: Idx,

source§

fn add_edge(&self, source: NI, target: NI) -> Result<(), Error>

Adds a new edge between the given source and target node. Read more
source§

impl<NI, NV, EV> EdgeMutationWithValues<NI, EV> for DirectedALGraph<NI, NV, EV>where NI: Idx, EV: Copy,

source§

fn add_edge_with_value( &self, source: NI, target: NI, value: EV ) -> Result<(), Error>

Adds a new edge between the given source and target node and assigns the given value to it. Read more
source§

impl<NI, EV, E> From<(E, CsrLayout)> for DirectedALGraph<NI, (), EV>where NI: Idx, EV: Copy + Send + Sync, E: Edges<NI = NI, EV = EV>,

source§

fn from(_: (E, CsrLayout)) -> DirectedALGraph<NI, (), EV>

Converts to this type from the input type.
source§

impl<NI, NV, EV, E> From<(NodeValues<NV>, E, CsrLayout)> for DirectedALGraph<NI, NV, EV>where NI: Idx, NV: Send + Sync, EV: Copy + Send + Sync, E: Edges<NI = NI, EV = EV>,

source§

fn from(_: (NodeValues<NV>, E, CsrLayout)) -> DirectedALGraph<NI, NV, EV>

Converts to this type from the input type.
source§

impl<NI, NV, EV> Graph<NI> for DirectedALGraph<NI, NV, EV>where NI: Idx, NV: Send + Sync, EV: Send + Sync,

source§

fn node_count(&self) -> NI

Returns the number of nodes in the graph.
source§

fn edge_count(&self) -> NI

Returns the number of edges in the graph.
source§

impl<NI, NV, EV> NodeValues<NI, NV> for DirectedALGraph<NI, NV, EV>where NI: Idx,

source§

fn node_value(&self, node: NI) -> &NV

Auto Trait Implementations§

§

impl<NI, NV, EV> RefUnwindSafe for DirectedALGraph<NI, NV, EV>where NV: RefUnwindSafe,

§

impl<NI, NV, EV> Send for DirectedALGraph<NI, NV, EV>where EV: Send, NV: Send,

§

impl<NI, NV, EV> Sync for DirectedALGraph<NI, NV, EV>where EV: Send, NV: Sync,

§

impl<NI, NV, EV> Unpin for DirectedALGraph<NI, NV, EV>where EV: Unpin, NI: Unpin,

§

impl<NI, NV, EV> UnwindSafe for DirectedALGraph<NI, NV, EV>where NV: UnwindSafe,

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. Read more
source§

impl<NI, G> ForEachNodeParallelByPartitionOp<NI> for Gwhere NI: Idx, G: Graph<NI> + Sync,

source§

fn for_each_node_par_by_partition<T, F>( &self, partition: &[Range<NI>], node_values: &mut [T], node_fn: F ) -> Result<(), Error>where T: Send, F: Fn(&G, NI, &mut T) + Send + Sync,

For each node calls a given function with the node and its corresponding mutable state in parallel based on the provided node partition.

The parallelization is done by means of a rayon based fork join with a task for each range in the provided node partition.

source§

impl<NI, G> ForEachNodeParallelOp<NI> for Gwhere NI: Idx, G: Graph<NI> + Sync,

source§

fn for_each_node_par<T, F>( &self, node_values: &mut [T], node_fn: F ) -> Result<(), Error>where T: Send, F: Fn(&G, NI, &mut T) + Send + Sync,

For each node calls a given function with the node and its corresponding mutable state in parallel.

The parallelization is done by means of a rayon based fork join with a task for each node.

source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<NI, EV, D> InDegreePartitionOp<NI, EV> for Dwhere NI: Idx, D: Graph<NI> + DirectedDegrees<NI> + DirectedNeighborsWithValues<NI, EV>,

source§

fn in_degree_partition(&self, concurrency: usize) -> Vec<Range<NI>>

Creates a greedy range-based in degree partition of the nodes.

It is greedy in the sense that it goes through the node set only once and simply adds a new range to the result whenever the current range’s nodes’ in degrees sum up to at least the average node in degree.

Example
let graph: DirectedCsrGraph<u32> = GraphBuilder::new()
    .edges(vec![(1, 0), (1, 2), (2, 0), (3, 2)])
    .build();

let partition: Vec<Range<u32>> = graph.in_degree_partition(2);

assert_eq!(partition.len(), 2);
assert_eq!(partition[0], 0..1);
assert_eq!(partition[1], 1..4);
source§

impl<T, U> Into<U> for Twhere 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<NI, EV, D> OutDegreePartitionOp<NI, EV> for Dwhere NI: Idx, D: Graph<NI> + DirectedDegrees<NI> + DirectedNeighborsWithValues<NI, EV>,

source§

fn out_degree_partition(&self, concurrency: usize) -> Vec<Range<NI>>

Creates a greedy range-based out degree partition of the nodes.

It is greedy in the sense that it goes through the node set only once and simply adds a new range to the result whenever the current range’s nodes’ out degrees sum up to at least the average node out degree.

Example
let graph: DirectedCsrGraph<u32> = GraphBuilder::new()
    .edges(vec![(0, 1), (0, 2), (2, 1), (2, 3)])
    .build();

let partition: Vec<Range<u32>> = graph.out_degree_partition(2);

assert_eq!(partition.len(), 2);
assert_eq!(partition[0], 0..1);
assert_eq!(partition[1], 1..4);
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

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

Initializes a with the given initializer. Read more
§

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

Dereferences the given pointer. Read more
§

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

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

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

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

§

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 Twhere U: TryFrom<T>,

§

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.