Make graphene_core no_std

This commit is contained in:
Dennis
2022-04-22 15:15:39 +02:00
committed by Keavon Chambers
parent 90e465b35c
commit 09deee0c4d
12 changed files with 94 additions and 56 deletions

View File

@@ -7,6 +7,9 @@ authors = ["Dennis Kobert <dennis@kobert.dev>"]
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[features]
#std = []
#default = ["std"]
[dependencies]
dyn-any = {path = "../dyn-any", features = ["derive"]}
#dyn-any = {path = "../dyn-any", features = ["derive"], optional = true}

View File

@@ -1,4 +1,4 @@
use std::{borrow::Borrow, marker::PhantomData};
use core::{borrow::Borrow, marker::PhantomData};
use crate::Node;
pub struct FnNode<T: Fn(&In) -> O, In, O>(T, PhantomData<In>, PhantomData<O>);

View File

@@ -1,11 +1,10 @@
#![no_std]
pub mod generic;
pub mod ops;
pub mod structural;
pub mod value;
use dyn_any::{downcast_ref, DynAny, StaticType};
use std::any::Any;
#[rustfmt::skip]
pub trait Node< 'n, Input> {
type Output : 'n;
@@ -23,26 +22,3 @@ impl<'n, T: Node<'n, ()>> Exec<'n> for T {}
pub trait Cache {
fn clear(&mut self);
}
pub type DynNode<'n, T> = &'n (dyn Node<'n, (), Output = T> + 'n);
pub type DynAnyNode<'n> = &'n (dyn Node<'n, (), Output = &'n dyn DynAny<'n>> + 'n);
pub trait DynamicInput<'n> {
fn set_kwarg_by_name(&mut self, name: &str, value: DynAnyNode<'n>);
fn set_arg_by_index(&mut self, index: usize, value: DynAnyNode<'n>);
}
pub trait AnyRef<'n, I: StaticType<'n>>: Node<'n, I> {
fn any(&'n self, input: &'n dyn DynAny<'n>) -> Self::Output;
}
impl<'n, T: Node<'n, I>, I: StaticType<'n>> AnyRef<'n, I> for T {
fn any(&'n self, input: &'n dyn DynAny<'n>) -> Self::Output {
self.eval(downcast_ref::<I>(input).unwrap_or_else(|| {
panic!(
"Node was evaluated with wrong input. The input has to be of type: {}",
std::any::type_name::<I>(),
)
}))
}
}

View File

@@ -1,11 +1,11 @@
use std::{borrow::Borrow, marker::PhantomData};
use core::{borrow::Borrow, marker::PhantomData, ops::Add};
use crate::Node;
#[derive(Default)]
pub struct AddNode<T>(PhantomData<T>);
impl<'n, T: std::ops::Add + Copy + 'n> Node<'n, (T, T)> for AddNode<T> {
type Output = <T as std::ops::Add>::Output;
impl<'n, T: Add + Copy + 'n> Node<'n, (T, T)> for AddNode<T> {
type Output = <T as Add>::Output;
fn eval(&'n self, input: &'n (T, T)) -> T::Output {
let (ref a, ref b) = input.borrow();
*a + *b

View File

@@ -1,4 +1,4 @@
use std::marker::PhantomData;
use core::marker::PhantomData;
use crate::Node;

View File

@@ -1,4 +1,4 @@
use std::{any::Any, marker::PhantomData};
use core::marker::PhantomData;
use crate::Node;
@@ -38,25 +38,6 @@ impl<T> DefaultNode<T> {
}
}
use dyn_any::{DynAny, StaticType};
pub struct AnyRefNode<'n, N: Node<'n, I, Output = &'n O>, I, O>(
&'n N,
PhantomData<&'n I>,
PhantomData<&'n O>,
);
impl<'n, N: Node<'n, I, Output = &'n O>, I, O: DynAny<'n>> Node<'n, I> for AnyRefNode<'n, N, I, O> {
type Output = &'n (dyn DynAny<'n>);
fn eval(&'n self, input: &'n I) -> Self::Output {
let value: &O = self.0.eval(input);
value
}
}
impl<'n, N: Node<'n, I, Output = &'n O>, I, O: 'static> AnyRefNode<'n, N, I, O> {
pub fn new(n: &'n N) -> AnyRefNode<'n, N, I, O> {
AnyRefNode(n, PhantomData, PhantomData)
}
}
pub struct DefaultRefNode<'n, T>(ValueNode<'n, T>);
impl<'n, T: 'n> Node<'n, ()> for DefaultRefNode<'n, T> {
type Output = &'n T;