vtk_pure_rs/data/
field_data.rs1use crate::data::AnyDataArray;
2
3#[derive(Debug, Clone, Default, PartialEq)]
7pub struct FieldData {
8 arrays: Vec<AnyDataArray>,
9}
10
11impl FieldData {
12 pub fn new() -> Self {
13 Self { arrays: Vec::new() }
14 }
15
16 pub fn add_array(&mut self, array: AnyDataArray) {
17 if let Some(pos) = self.arrays.iter().position(|a| a.name() == array.name()) {
19 self.arrays[pos] = array;
20 } else {
21 self.arrays.push(array);
22 }
23 }
24
25 pub fn get_array(&self, name: &str) -> Option<&AnyDataArray> {
26 self.arrays.iter().find(|a| a.name() == name)
27 }
28
29 pub fn get_array_mut(&mut self, name: &str) -> Option<&mut AnyDataArray> {
30 self.arrays.iter_mut().find(|a| a.name() == name)
31 }
32
33 pub fn get_array_by_index(&self, idx: usize) -> Option<&AnyDataArray> {
34 self.arrays.get(idx)
35 }
36
37 pub fn num_arrays(&self) -> usize {
38 self.arrays.len()
39 }
40
41 pub fn iter(&self) -> impl Iterator<Item = &AnyDataArray> {
42 self.arrays.iter()
43 }
44
45 pub fn remove_array(&mut self, name: &str) -> Option<AnyDataArray> {
46 if let Some(pos) = self.arrays.iter().position(|a| a.name() == name) {
47 Some(self.arrays.remove(pos))
48 } else {
49 None
50 }
51 }
52
53 pub fn has_array(&self, name: &str) -> bool {
55 self.arrays.iter().any(|a| a.name() == name)
56 }
57
58 pub fn names(&self) -> Vec<&str> {
60 self.arrays.iter().map(|a| a.name()).collect()
61 }
62
63 pub fn is_empty(&self) -> bool {
65 self.arrays.is_empty()
66 }
67
68 pub fn clear(&mut self) {
70 self.arrays.clear();
71 }
72}
73
74#[cfg(test)]
75mod tests {
76 use super::*;
77 use crate::data::DataArray;
78
79 #[test]
80 fn add_and_get() {
81 let mut fd = FieldData::new();
82 fd.add_array(crate::data::AnyDataArray::F64(DataArray::from_vec("temp", vec![1.0, 2.0], 1)));
83 assert_eq!(fd.num_arrays(), 1);
84 assert!(fd.has_array("temp"));
85 assert!(!fd.has_array("other"));
86 }
87
88 #[test]
89 fn replace_same_name() {
90 let mut fd = FieldData::new();
91 fd.add_array(crate::data::AnyDataArray::F64(DataArray::from_vec("x", vec![1.0], 1)));
92 fd.add_array(crate::data::AnyDataArray::F64(DataArray::from_vec("x", vec![2.0, 3.0], 1)));
93 assert_eq!(fd.num_arrays(), 1);
94 assert_eq!(fd.get_array("x").unwrap().num_tuples(), 2);
95 }
96
97 #[test]
98 fn remove() {
99 let mut fd = FieldData::new();
100 fd.add_array(crate::data::AnyDataArray::F64(DataArray::from_vec("a", vec![1.0], 1)));
101 fd.add_array(crate::data::AnyDataArray::F64(DataArray::from_vec("b", vec![2.0], 1)));
102 fd.remove_array("a");
103 assert_eq!(fd.num_arrays(), 1);
104 assert!(!fd.has_array("a"));
105 }
106
107 #[test]
108 fn names() {
109 let mut fd = FieldData::new();
110 fd.add_array(crate::data::AnyDataArray::F64(DataArray::from_vec("x", vec![1.0], 1)));
111 fd.add_array(crate::data::AnyDataArray::F64(DataArray::from_vec("y", vec![2.0], 1)));
112 assert_eq!(fd.names(), vec!["x", "y"]);
113 }
114
115 #[test]
116 fn clear() {
117 let mut fd = FieldData::new();
118 fd.add_array(crate::data::AnyDataArray::F64(DataArray::from_vec("x", vec![1.0], 1)));
119 assert!(!fd.is_empty());
120 fd.clear();
121 assert!(fd.is_empty());
122 }
123}