aboutsummaryrefslogtreecommitdiffstats
path: root/components/gfx_traits/print_tree.rs
diff options
context:
space:
mode:
authorAnthony Ramine <n.oxyde@gmail.com>2016-07-04 15:47:06 +0200
committerAnthony Ramine <n.oxyde@gmail.com>2016-07-04 15:47:06 +0200
commit51ff916e09ff844eb2a1aa1fe2df9ef4b45af649 (patch)
treed0fa7a7db899d1d086afc410dace876fdd74475f /components/gfx_traits/print_tree.rs
parent110fd6861007544b4f5b15d49da4f297c200bd7c (diff)
downloadservo-51ff916e09ff844eb2a1aa1fe2df9ef4b45af649.tar.gz
servo-51ff916e09ff844eb2a1aa1fe2df9ef4b45af649.zip
Move util::print_tree to gfx_traits
Diffstat (limited to 'components/gfx_traits/print_tree.rs')
-rw-r--r--components/gfx_traits/print_tree.rs65
1 files changed, 65 insertions, 0 deletions
diff --git a/components/gfx_traits/print_tree.rs b/components/gfx_traits/print_tree.rs
new file mode 100644
index 00000000000..7a6ac4f0be9
--- /dev/null
+++ b/components/gfx_traits/print_tree.rs
@@ -0,0 +1,65 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/// A struct that makes it easier to print out a pretty tree of data, which
+/// can be visually scanned more easily.
+pub struct PrintTree {
+ /// The current level of recursion.
+ level: u32,
+
+ /// An item which is queued up, so that we can determine if we need
+ /// a mid-tree prefix or a branch ending prefix.
+ queued_item: Option<String>,
+}
+
+impl PrintTree {
+ pub fn new(title: String) -> PrintTree {
+ println!("┌ {}", title);
+ PrintTree {
+ level: 1,
+ queued_item: None,
+ }
+ }
+
+ /// Descend one level in the tree with the given title.
+ pub fn new_level(&mut self, title: String) {
+ self.flush_queued_item("├─");
+
+ self.print_level_prefix();
+ println!("├─ {}", title);
+
+ self.level = self.level + 1;
+ }
+
+ /// Ascend one level in the tree.
+ pub fn end_level(&mut self) {
+ self.flush_queued_item("└─");
+ self.level = self.level - 1;
+ }
+
+ /// Add an item to the current level in the tree.
+ pub fn add_item(&mut self, text: String) {
+ self.flush_queued_item("├─");
+ self.queued_item = Some(text);
+ }
+
+ fn print_level_prefix(&self) {
+ for _ in 0..self.level {
+ print!("│ ");
+ }
+ }
+
+ fn flush_queued_item(&mut self, prefix: &str) {
+ if let Some(queued_item) = self.queued_item.take() {
+ self.print_level_prefix();
+ println!("{} {}", prefix, queued_item);
+ }
+ }
+}
+
+impl Drop for PrintTree {
+ fn drop(&mut self) {
+ self.flush_queued_item("└─");
+ }
+}