Skip to content

Commit 81319ca

Browse files
authored
Merge pull request #92 from iwburns/bump-to-v1.8.0
bump version to 1.8.0
2 parents 649872d + 9118258 commit 81319ca

File tree

2 files changed

+26
-18
lines changed

2 files changed

+26
-18
lines changed

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "id_tree"
3-
version = "1.7.0"
3+
version = "1.8.0"
44
authors = ["Ian Burns <[email protected]>"]
55
description = "A library for creating and modifying Tree structures."
66
documentation = "https://docs.rs/id_tree"

src/tree.rs

+25-17
Original file line numberDiff line numberDiff line change
@@ -423,7 +423,7 @@ impl<T> Tree<T> {
423423
fn remove_node_drop_children(&mut self, node_id: NodeId) -> Result<Node<T>, NodeIdError> {
424424
let mut children = self.get_mut_unsafe(&node_id).take_children();
425425
for child in children.drain(..) {
426-
try!(self.remove_node_drop_children(child));
426+
self.remove_node_drop_children(child)?;
427427
}
428428
Ok(self.remove_node_internal(node_id))
429429
}
@@ -547,7 +547,7 @@ impl<T> Tree<T> {
547547
self.root = Some(node_id.clone());
548548

549549
if let Some(old_root) = old_root {
550-
try!(self.move_node_to_parent(&old_root, node_id));
550+
self.move_node_to_parent(&old_root, node_id)?;
551551
}
552552

553553
Ok(())
@@ -696,7 +696,8 @@ impl<T> Tree<T> {
696696
}
697697

698698
///
699-
/// Moves the node to a position amongst sibling nodes.
699+
/// Moves the node to a position amongst sibling nodes. If the `pos` provided is too large then
700+
/// the node in question will be placed after all of its other siblings.
700701
///
701702
/// Any children will remain attached to this node.
702703
///
@@ -714,44 +715,51 @@ impl<T> Tree<T> {
714715
/// let _c3 = my_tree.insert(Node::new(3), UnderNode(&root_id)).unwrap();
715716
/// let _c4 = my_tree.insert(Node::new(4), UnderNode(&root_id)).unwrap();
716717
///
717-
/// for (i,n) in my_tree.children(&root_id).unwrap().enumerate() {
718-
/// println!("i={} n={:?}", i, n.data());
718+
/// let expected_values = [1, 2, 3, 4];
719+
/// for (child, expected) in my_tree.children(&root_id).unwrap().zip(expected_values.iter()) {
720+
/// assert_eq!(child.data(), expected);
719721
/// }
720722
///
721723
/// my_tree.make_nth_sibling(&c1, 3).unwrap();
722724
///
723-
/// for (i,n) in my_tree.children(&root_id).unwrap().enumerate() {
724-
/// println!("i={} n={:?}", i, n.data());
725+
/// let expected_values = [2, 3, 4, 1];
726+
/// for (child, expected) in my_tree.children(&root_id).unwrap().zip(expected_values.iter()) {
727+
/// assert_eq!(child.data(), expected);
725728
/// }
726729
/// ```
727730
///
728-
729731
pub fn make_nth_sibling(&mut self, node: &NodeId, pos: usize) -> Result<(), NodeIdError> {
730-
731-
let parent = self.get(node)?.parent()
732+
let parent = self
733+
.get(node)?
734+
.parent()
732735
.ok_or(NodeIdError::NodeIdNoLongerValid)?
733736
.clone();
734737

735738
let num_children = self.children_ids(&parent)?.count();
736739
let pos = pos.min(num_children - 1);
737-
740+
738741
// First determine the current index that the node has
739742
// unwrap should not be reachable, since we are searching under node's
740743
// own parent, barring bugs in id_tree
741-
let mut current_pos = self.children_ids(&parent)?
744+
let mut current_pos = self
745+
.children_ids(&parent)?
742746
.enumerate()
743-
.find_map(|(i, n) | if n==node { Some(i) } else { None })
747+
.find_map(|(i, n)| if n == node { Some(i) } else { None })
744748
.unwrap();
745-
749+
746750
while current_pos != pos {
747751
let pos_to_swap = if current_pos < pos {
748-
current_pos+1
752+
current_pos + 1
749753
} else if current_pos > pos {
750-
current_pos-1
754+
current_pos - 1
751755
} else {
752756
break;
753757
};
754-
let node_to_swap = self.children_ids(&parent)?.nth(pos_to_swap).unwrap().clone();
758+
let node_to_swap = self
759+
.children_ids(&parent)?
760+
.nth(pos_to_swap)
761+
.unwrap()
762+
.clone();
755763
self.swap_nodes(node, &node_to_swap, SwapBehavior::TakeChildren)?;
756764
current_pos = pos_to_swap;
757765
}

0 commit comments

Comments
 (0)