From 856db3e21d9c57644c7481cb9a7893a7569815d0 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Wed, 2 Mar 2016 11:41:59 -0700 Subject: [PATCH] WIP: Collection --- src/collection.rs | 30 ++++++++++++++++++++++++++++++ src/lib.rs | 2 ++ 2 files changed, 32 insertions(+) create mode 100644 src/collection.rs diff --git a/src/collection.rs b/src/collection.rs new file mode 100644 index 0000000000..aa7f7e0517 --- /dev/null +++ b/src/collection.rs @@ -0,0 +1,30 @@ +use collections::Vec; + +use system::error::Result; + +use super::{ExNode, FileSystem, Node}; + +/// A collection of a Node and its associated ExNodes +pub struct Collection { + pub node: (u64, Node), + pub ex_nodes: Vec<(u64, ExNode)> +} + +impl Collection { + pub fn load(fs: &mut FileSystem, block: u64) -> Result { + let node = try!(fs.node(block)); + + let mut next = node.1.next; + let mut ex_nodes = Vec::new(); + while next > 0 { + let ex_node = try!(fs.ex_node(next)); + next = ex_node.1.next; + ex_nodes.push(ex_node); + } + + Ok(Collection { + node: node, + ex_nodes: ex_nodes, + }) + } +} diff --git a/src/lib.rs b/src/lib.rs index 03b5667f04..9e3d93401b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -15,6 +15,7 @@ extern crate collections; extern crate system; +pub use self::collection::Collection; pub use self::disk::Disk; pub use self::ex_node::ExNode; pub use self::extent::Extent; @@ -22,6 +23,7 @@ pub use self::filesystem::FileSystem; pub use self::header::Header; pub use self::node::Node; +pub mod collection; pub mod disk; pub mod ex_node; pub mod extent;