feat: wire up both desktop and web
This commit is contained in:
1 parent
10db6ad65b
commit
05331ddd80
15 files changed
+261
-728
No files matched your search
@@ -787,3 +787,71 @@ fn event_name_from_typ(typ: &str) -> &'static str {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//! This module provides a mirror of the VirtualDOM Element Slab using a Vector.
|
||||
|
||||
use std::ops::{Index, IndexMut};
|
||||
use web_sys::Node;
|
||||
|
||||
pub(crate) struct NodeSlab {
|
||||
nodes: Vec<Option<Node>>,
|
||||
}
|
||||
|
||||
impl NodeSlab {
|
||||
pub fn new(capacity: usize) -> NodeSlab {
|
||||
let nodes = Vec::with_capacity(capacity);
|
||||
NodeSlab { nodes }
|
||||
}
|
||||
}
|
||||
impl Index<usize> for NodeSlab {
|
||||
type Output = Option<Node>;
|
||||
fn index(&self, index: usize) -> &Self::Output {
|
||||
&self.nodes[index]
|
||||
}
|
||||
}
|
||||
|
||||
impl IndexMut<usize> for NodeSlab {
|
||||
fn index_mut(&mut self, index: usize) -> &mut Self::Output {
|
||||
if index >= self.nodes.capacity() * 3 {
|
||||
panic!("Trying to mutate an element way too far out of bounds");
|
||||
}
|
||||
|
||||
if index + 1 > self.nodes.len() {
|
||||
self.nodes.resize_with(index + 1, || None);
|
||||
}
|
||||
&mut self.nodes[index]
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#[derive(Debug, Default)]
|
||||
struct Stack {
|
||||
list: Vec<Node>,
|
||||
}
|
||||
|
||||
impl Stack {
|
||||
#[inline]
|
||||
fn with_capacity(cap: usize) -> Self {
|
||||
Stack {
|
||||
list: Vec::with_capacity(cap),
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn push(&mut self, node: Node) {
|
||||
self.list.push(node);
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn pop(&mut self) -> Node {
|
||||
self.list.pop().unwrap()
|
||||
}
|
||||
|
||||
fn top(&self) -> &Node {
|
||||
match self.list.last() {
|
||||
Some(a) => a,
|
||||
None => panic!("Called 'top' of an empty stack, make sure to push the root first"),
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user