rust_multistack/
ts_move.rs1use 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}