rust_multistack/
ts_move.rs

1use crate::ts::TS;
2use rust_dynamic::types::NODATA;
3
4pub fn ts_move_from_current(ts: &mut TS, name_to: String) -> &mut TS {
5    ts.move_from_current(name_to)
6}
7
8pub fn ts_move_from_stack(ts: &mut TS, name_from: String, name_to: String) -> &mut TS {
9    ts.move_from_stack(name_from, name_to)
10}
11
12pub fn ts_move_to_current_stack(ts: &mut TS, name_from: String) -> &mut TS {
13    ts.move_to_current(name_from)
14}
15
16impl TS {
17    pub fn move_from_current(&mut self, name_to: String) -> &mut TS {
18        loop {
19            match self.pull() {
20                Some(value) => {
21                    if value.type_of() == NODATA {
22                        break;
23                    }
24                    self.push_to_stack(name_to.clone(), value);
25                }
26                None => {
27                    break;
28                }
29            }
30        }
31        self
32    }
33    pub fn move_to_current(&mut self, name_from: String) -> &mut TS {
34        let stack_name = match self.current_stack_name() {
35            Some(stack_name) => stack_name,
36            None => {
37                return self;
38            }
39        };
40        loop {
41            match self.pull_from_stack(name_from.clone()) {
42                Some(value) => {
43                    if value.type_of() == NODATA {
44                        break;
45                    }
46                    self.push_to_stack(stack_name.clone(), value);
47                }
48                None => {
49                    break;
50                }
51            }
52        }
53        self
54    }
55    pub fn move_from_stack(&mut self, name_from: String, name_to: String) -> &mut TS {
56        loop {
57            match self.pull_from_stack(name_from.clone()) {
58                Some(value) => {
59                    if value.type_of() == NODATA {
60                        break;
61                    }
62                    self.push_to_stack(name_to.clone(), value);
63                }
64                None => {
65                    break;
66                }
67            }
68        }
69        self
70    }
71}