Skip to main content

DirectedALGraph

Struct DirectedALGraph 

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

Implementations§

Source§

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

Source

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

Trait Implementations§

Source§

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

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: Idx, NV> DirectedNeighbors<NI> for DirectedALGraph<NI, NV, ()>

Source§

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

Source§

fn out_neighbors(&self, node: NI) -> Self::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) -> Self::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: Idx, NV, EV> DirectedNeighborsWithValues<NI, EV> for DirectedALGraph<NI, NV, EV>

Source§

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

Source§

fn out_neighbors_with_values(&self, node: NI) -> Self::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) -> Self::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: Idx, NV> EdgeMutation<NI> for DirectedALGraph<NI, NV>

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§

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

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

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

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§

fn add_edge_with_value_mut( &mut 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((edge_list, csr_layout): (E, CsrLayout)) -> Self

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( (node_values, edge_list, csr_layout): (NodeValues<NV>, E, CsrLayout), ) -> Self

Converts to this type from the input type.
Source§

impl<NI: Idx, NV, EV> Graph<NI> for DirectedALGraph<NI, NV, EV>
where 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: Idx, NV, EV> NodeValues<NI, NV> for DirectedALGraph<NI, NV, EV>

Source§

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

Auto Trait Implementations§

§

impl<NI, NV, EV> Freeze for DirectedALGraph<NI, NV, EV>

§

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

§

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

§

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

§

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

§

impl<NI, NV, EV> UnsafeUnpin for DirectedALGraph<NI, NV, EV>

§

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

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<NI, G> ForEachNodeParallelByPartitionOp<NI> for G
where 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 G
where 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 D
where 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 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<NI, EV, D> OutDegreePartitionOp<NI, EV> for D
where 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);
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, 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.