From b7ea0bc03b7dc88d6502b3a245216d4245e1d723 Mon Sep 17 00:00:00 2001 From: Jaby Date: Sun, 9 Oct 2022 16:26:21 +0200 Subject: [PATCH] Stashing --- src/Tools/psxcdgen_ex/Cargo.toml | 1 + src/Tools/psxcdgen_ex/src/types/iterator.rs | 73 --------------------- src/Tools/psxcdgen_ex/src/types/layout.rs | 29 ++++++++ src/Tools/psxcdgen_ex/src/types/mod.rs | 8 +-- 4 files changed, 31 insertions(+), 80 deletions(-) delete mode 100644 src/Tools/psxcdgen_ex/src/types/iterator.rs create mode 100644 src/Tools/psxcdgen_ex/src/types/layout.rs diff --git a/src/Tools/psxcdgen_ex/Cargo.toml b/src/Tools/psxcdgen_ex/Cargo.toml index 920faff9..9a398257 100644 --- a/src/Tools/psxcdgen_ex/Cargo.toml +++ b/src/Tools/psxcdgen_ex/Cargo.toml @@ -7,4 +7,5 @@ edition = "2021" [dependencies] cdtypes = {path = "../cdtypes"} +paste = "*" tool_helper = {path = "../tool_helper"} \ No newline at end of file diff --git a/src/Tools/psxcdgen_ex/src/types/iterator.rs b/src/Tools/psxcdgen_ex/src/types/iterator.rs deleted file mode 100644 index 3056de64..00000000 --- a/src/Tools/psxcdgen_ex/src/types/iterator.rs +++ /dev/null @@ -1,73 +0,0 @@ -use super::*; - -pub struct DirectoryIterator<'a> { - parent: &'a Directory, - state: DirectoryIteratorState<'a> -} - -impl<'a> DirectoryIterator<'a> { - pub fn new(parent: &Directory) -> DirectoryIterator { - DirectoryIterator{parent, state: DirectoryIteratorState::Root} - } -} - -impl<'a> std::iter::Iterator for DirectoryIterator<'a> { - type Item = DirectoryIteratorElement<'a>; - - fn next(&mut self) -> Option> { - match std::mem::replace(&mut self.state, DirectoryIteratorState::Done) { - DirectoryIteratorState::Root => { - self.state = DirectoryIteratorState::Data(self.parent.data.iter()); - return Some(DirectoryIteratorElement::Directory(&self.parent)); - } - DirectoryIteratorState::Data(mut iter) => { - if let Some(data) = iter.next() { - self.state = DirectoryIteratorState::Data(iter); - return Some(DirectoryIteratorElement::Data(data)); - } - - else { - self.state = DirectoryIteratorState::Directory(self.parent.dirs.iter()); - return self.next(); - } - }, - DirectoryIteratorState::Directory(mut iter) => { - if let Some(dir) = iter.next() { - self.state = DirectoryIteratorState::SubDir((iter, std::boxed::Box::new(dir.iter()))); - return self.next(); - } - - else { - return self.next(); - } - }, - DirectoryIteratorState::SubDir((base_iter, mut iter)) => { - if let Some(element) = iter.next() { - self.state = DirectoryIteratorState::SubDir((base_iter, iter)); - return Some(element); - } - - else { - self.state = DirectoryIteratorState::Directory(base_iter); - return self.next(); - } - }, - DirectoryIteratorState::Done => { - return None; - } - } - } -} - -enum DirectoryIteratorState<'a> { - Root, - Data(std::slice::Iter<'a, Data>), - Directory(std::slice::Iter<'a, Directory>), - SubDir((std::slice::Iter<'a, Directory>, std::boxed::Box>)), - Done -} - -pub enum DirectoryIteratorElement<'a> { - Directory(&'a Directory), - Data(&'a Data), -} \ No newline at end of file diff --git a/src/Tools/psxcdgen_ex/src/types/layout.rs b/src/Tools/psxcdgen_ex/src/types/layout.rs new file mode 100644 index 00000000..c18426f1 --- /dev/null +++ b/src/Tools/psxcdgen_ex/src/types/layout.rs @@ -0,0 +1,29 @@ +use super::*; + +pub struct DefaultLayoutMut { +} + +impl DefaultLayoutMut { + pub fn new(parent: &mut CDDesc) -> Vec { + let mut layout = Vec::new(); + + add_dir_and_subdir(&mut layout, &mut parent.root); + layout + } +} + +pub enum LayoutMut<'a> { + Directory{name: &'a mut DirectoryName, properties: &'a mut Properties}, + Data(&'a mut Data) +} + +fn add_dir_and_subdir<'a>(layout: &mut Vec>, dir: &'a mut Directory) { + layout.push(LayoutMut::Directory{name: &mut dir.name, properties: &mut dir.properties}); + for data in dir.data.iter_mut() { + layout.push(LayoutMut::Data(data)); + } + + for dir in dir.dirs.iter_mut() { + add_dir_and_subdir(layout, dir); + } +} diff --git a/src/Tools/psxcdgen_ex/src/types/mod.rs b/src/Tools/psxcdgen_ex/src/types/mod.rs index 5ce26ad3..a7458192 100644 --- a/src/Tools/psxcdgen_ex/src/types/mod.rs +++ b/src/Tools/psxcdgen_ex/src/types/mod.rs @@ -1,10 +1,8 @@ -use std::fmt::write; +pub mod layout; -use iterator::DirectoryIterator; use cdtypes::types::cdstring::DString; use tool_helper::Error; -pub mod iterator; pub struct CDDesc { pub root: Directory } @@ -37,10 +35,6 @@ impl Directory { pub fn add_data(&mut self, data: Data) { self.data.push(data); } - - pub fn iter(&self) -> DirectoryIterator { - DirectoryIterator::new(&self) - } } impl std::fmt::Display for Directory {