1use std::{
2 self,
3 ops::{
4 Deref,
5 DerefMut,
6 },
7};
8
9use freya_native_core::NodeId;
10use rustc_hash::FxHashMap;
11
12#[derive(Default, Clone, Debug, PartialEq)]
13pub struct Layers(FxHashMap<i16, Vec<NodeId>>);
14
15impl Layers {
16 pub fn insert_node_in_layer(&mut self, node_id: NodeId, layer_n: i16) {
18 let layer = self.0.entry(layer_n).or_default();
19 if layer.contains(&node_id) {
20 return;
21 }
22 layer.push(node_id);
23 }
24
25 pub fn remove_node_from_layer(&mut self, node_id: NodeId, layer_n: i16) {
27 let layer = self.0.get_mut(&layer_n).unwrap();
28 layer.retain(|id| *id != node_id);
29
30 if layer.is_empty() {
31 self.0.remove(&layer_n);
32 }
33 }
34}
35
36impl Deref for Layers {
37 type Target = FxHashMap<i16, Vec<NodeId>>;
38
39 fn deref(&self) -> &Self::Target {
40 &self.0
41 }
42}
43
44impl DerefMut for Layers {
45 fn deref_mut(&mut self) -> &mut Self::Target {
46 &mut self.0
47 }
48}