diff --git a/src/collection.rs b/src/collection.rs new file mode 100644 index 0000000000000000000000000000000000000000..aa7f7e0517220e8d255b33a284d8e664d0b195ec --- /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<Collection> { + 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 03b5667f0400de9a6775c6150ca4dc3cad1970d1..9e3d93401b035e0b73f1ab6e18b2536b1febee8e 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;