Skip to content

Commit

Permalink
small fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
bminaiev committed Dec 28, 2023
1 parent eb72074 commit 1291f64
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 6 deletions.
1 change: 1 addition & 0 deletions algo_lib/src/graph/bfs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ use crate::graph::edges::edge_trait::EdgeTrait;
use crate::graph::edges::weighted_edge::WeightedEdge;
use crate::graph::graph_trait::GraphTrait;

#[derive(Debug)]
pub struct BfsState {
queue: VecDeque<usize>,
pub dist: Vec<u32>,
Expand Down
10 changes: 10 additions & 0 deletions algo_lib/src/graph/edges/edge_trait.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,13 @@ pub trait EdgeTrait: Copy + Clone {
fn to(&self) -> usize;
fn rev(&self, from: usize) -> Self;
}

impl EdgeTrait for usize {
fn to(&self) -> usize {
*self
}

fn rev(&self, from: usize) -> Self {
from
}
}
36 changes: 36 additions & 0 deletions algo_lib/src/graph/graph_trait.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,39 @@ where

fn adj(&self, v: usize) -> &[E];
}

impl GraphTrait<usize> for [Vec<usize>] {
fn len(&self) -> usize {
self.len()
}

fn num_vertices(&self) -> usize {
self.len()
}

fn num_edges(&self) -> usize {
self.iter().map(|v| v.len()).sum()
}

fn adj(&self, v: usize) -> &[usize] {
&self[v]
}
}

impl GraphTrait<usize> for Vec<Vec<usize>> {
fn len(&self) -> usize {
self.len()
}

fn num_vertices(&self) -> usize {
self.len()
}

fn num_edges(&self) -> usize {
self.iter().map(|v| v.len()).sum()
}

fn adj(&self, v: usize) -> &[usize] {
&self[v]
}
}
12 changes: 6 additions & 6 deletions algo_lib/src/misc/rec_function.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
// Copied from https://github.com/EgorKulikov/rust_algo/blob/master/algo_lib/src/misc/recursive_function.rs

use std::cell::UnsafeCell;
use std::marker::PhantomData;

macro_rules! recursive_function {
Expand All @@ -12,7 +13,7 @@ macro_rules! recursive_function {
where
F: FnMut(&mut dyn $trait<$($type, )*Output>, $($type, )*) -> Output,
{
f: F,
f: UnsafeCell<F>,
$($arg: PhantomData<$type>,
)*
phantom_output: PhantomData<Output>,
Expand All @@ -24,7 +25,7 @@ macro_rules! recursive_function {
{
pub fn new(f: F) -> Self {
Self {
f,
f : f.into(),
$($arg: Default::default(),
)*
phantom_output: Default::default(),
Expand All @@ -37,9 +38,8 @@ macro_rules! recursive_function {
F: FnMut(&mut dyn $trait<$($type, )*Output>, $($type, )*) -> Output,
{
fn call(&mut self, $($arg: $type,)*) -> Output {
let const_ptr = &self.f as *const F;
let mut_ptr = const_ptr as *mut F;
unsafe { (&mut *mut_ptr)(self, $($arg, )*) }
let ptr = self.f.get();
unsafe { (*ptr)(self, $($arg, )*) }
}
}
}
Expand All @@ -54,4 +54,4 @@ recursive_function!(RecursiveFunction5, Callable5, (Arg1 arg1, Arg2 arg2, Arg3 a
recursive_function!(RecursiveFunction6, Callable6, (Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6,));
recursive_function!(RecursiveFunction7, Callable7, (Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7,));
recursive_function!(RecursiveFunction8, Callable8, (Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8,));
recursive_function!(RecursiveFunction9, Callable9, (Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9,));
recursive_function!(RecursiveFunction9, Callable9, (Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5, Arg6 arg6, Arg7 arg7, Arg8 arg8, Arg9 arg9,));

0 comments on commit 1291f64

Please sign in to comment.