Move Node into module
This commit is contained in:
		
							parent
							
								
									756d572d21
								
							
						
					
					
						commit
						627baa8449
					
				
							
								
								
									
										44
									
								
								src/basic.rs
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								src/basic.rs
									
									
									
									
									
								
							| @ -2,43 +2,8 @@ use std::{collections::HashMap}; | ||||
| 
 | ||||
| use nom::{bytes::complete::tag, multi::separated_list0, IResult}; | ||||
| 
 | ||||
| use crate::{parsers, commands::{Line, Primitive, PrintOutput, Command}}; | ||||
| use crate::{parsers, commands::{Primitive, PrintOutput, Command}, node::Node}; | ||||
| 
 | ||||
| #[derive(Debug, PartialEq, Eq, Clone)] | ||||
| pub enum Node { | ||||
|     None, | ||||
|     Link { item: Line, next: Box<Node> }, | ||||
| } | ||||
| 
 | ||||
| impl Node { | ||||
|     fn push(&mut self, val: Line) { | ||||
|         *self = match self { | ||||
|             Self::Link { item, next } => { | ||||
|                 next.push(val); | ||||
|                 Self::Link { | ||||
|                     item: item.clone(), | ||||
|                     next: next.clone(), | ||||
|                 } | ||||
|             } | ||||
|             Self::None => Self::Link { | ||||
|                 item: val, | ||||
|                 next: Box::new(Self::None), | ||||
|             }, | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     pub fn find_line(&self, line: usize) -> Option<Node> { | ||||
|         if let Self::Link { item, next } = self { | ||||
|             if item.0 == line { | ||||
|                 Some(self.clone()) | ||||
|             } else { | ||||
|                 next.find_line(line) | ||||
|             } | ||||
|         } else { | ||||
|             None | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| #[derive(Debug, PartialEq, Eq, Clone)] | ||||
| pub struct Program { | ||||
| @ -127,9 +92,12 @@ impl Iterator for Program { | ||||
| mod tests { | ||||
|     use crate::basic::PrintOutput; | ||||
| 
 | ||||
|     use super::{Command, Line, Node, Primitive, Program}; | ||||
|     use super::{Command, Node, Primitive, Program}; | ||||
| 
 | ||||
|     use crate::parsers::{commands::parse_line, generic::read_string}; | ||||
|     use crate::{ | ||||
|         parsers::{commands::parse_line, generic::read_string}, | ||||
|         commands::Line | ||||
|     }; | ||||
| 
 | ||||
|     #[test] | ||||
|     fn it_parses_a_print_command() { | ||||
|  | ||||
| @ -2,6 +2,7 @@ use std::fs; | ||||
| 
 | ||||
| mod basic; | ||||
| mod commands; | ||||
| mod node; | ||||
| mod parsers; | ||||
| 
 | ||||
| fn main() { | ||||
|  | ||||
							
								
								
									
										37
									
								
								src/node.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								src/node.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,37 @@ | ||||
| use crate::commands::Line; | ||||
| 
 | ||||
| #[derive(Debug, PartialEq, Eq, Clone)] | ||||
| pub enum Node { | ||||
|     None, | ||||
|     Link { item: Line, next: Box<Node> }, | ||||
| } | ||||
| 
 | ||||
| impl Node { | ||||
|     pub fn push(&mut self, val: Line) { | ||||
|         *self = match self { | ||||
|             Self::Link { item, next } => { | ||||
|                 next.push(val); | ||||
|                 Self::Link { | ||||
|                     item: item.clone(), | ||||
|                     next: next.clone(), | ||||
|                 } | ||||
|             } | ||||
|             Self::None => Self::Link { | ||||
|                 item: val, | ||||
|                 next: Box::new(Self::None), | ||||
|             }, | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     pub fn find_line(&self, line: usize) -> Option<Node> { | ||||
|         if let Self::Link { item, next } = self { | ||||
|             if item.0 == line { | ||||
|                 Some(self.clone()) | ||||
|             } else { | ||||
|                 next.find_line(line) | ||||
|             } | ||||
|         } else { | ||||
|             None | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user