use crate::derive;
use inkpad_std::Vec;
pub struct HostFuncIndex(pub usize);
#[derive(Default)]
pub struct DefinedHostFunctions<T>(pub Vec<derive::HostFuncType<T>>);
impl<T> Clone for DefinedHostFunctions<T> {
fn clone(&self) -> DefinedHostFunctions<T> {
DefinedHostFunctions(self.0.clone())
}
}
impl<T> DefinedHostFunctions<T> {
pub fn new() -> DefinedHostFunctions<T> {
DefinedHostFunctions(Vec::new())
}
pub fn func(&self, idx: usize) -> derive::HostFuncType<T> {
self.0[idx]
}
pub fn define(&mut self, f: derive::HostFuncType<T>) -> HostFuncIndex {
let idx = self.0.len();
self.0.push(f);
HostFuncIndex(idx)
}
}