chandra 0.0.0

Will contain more information soon
Documentation
use std::{collections::HashMap};

use crate::core::{operations::{add::Add, divide::Divide, multiply::Multiply, subtract::Subtract}, type_traits::Calculatable};

use super::{GPUOperation, GPUComputable};

impl<R: Calculatable + GPUComputable, LEFT: GPUOperation<R>, RIGHT: GPUOperation<R>> GPUOperation<R> for Add<R, LEFT, RIGHT> {
    fn build(&self, functions: &mut HashMap<String, String>) -> String {
        let left = self.left.build(functions);
        let right = self.right.build(functions);

        format!("{} + {}", left, right)
    }
}
impl<R: Calculatable + GPUComputable, LEFT: GPUOperation<R>, RIGHT: GPUOperation<R>> GPUOperation<R> for Divide<R, LEFT, RIGHT> {
    fn build(&self, functions: &mut HashMap<String, String>) -> String {
        let left = self.left.build(functions);
        let right = self.right.build(functions);

        format!("{} / {}", left, right)
    }
}
impl<R: Calculatable + GPUComputable, LEFT: GPUOperation<R>, RIGHT: GPUOperation<R>> GPUOperation<R> for Multiply<R, LEFT, RIGHT> {
    fn build(&self, functions: &mut HashMap<String, String>) -> String {
        let left = self.left.build(functions);
        let right = self.right.build(functions);

        format!("{} * {}", left, right)
    }
}
impl<R: Calculatable + GPUComputable, LEFT: GPUOperation<R>, RIGHT: GPUOperation<R>> GPUOperation<R> for Subtract<R, LEFT, RIGHT> {
    fn build(&self, functions: &mut HashMap<String, String>) -> String {
        let left = self.left.build(functions);
        let right = self.right.build(functions);

        format!("{} - {}", left, right)
    }
}