Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  readme_template.adoc   Sprache: unbekannt

 
:examples: ../examples/

= Debug Tree

This library allows you to build a tree one element at a time and output it as a pretty string.

The tree can easily be output to a `String`, `stdout` or a file.

This is particularly convenient for generating clean output from nested and recursive functions.


:toc:

== Recursive Fibonacci Example

Using the `add_branch!()` macro at the start of the `factors()` function, you can generate an entire call tree, with minimal effort.

[source,rust]
----
include::{examples}fibonacci.rs[]
----

----
include::{examples}out/fibonacci.txt[]
----
== Overview

* Add a branch
- `add_branch!("Hello, {}", "World")`
- The branch will exit at the end of the current block

* Add a leaf
- `add_leaf!("I am a {}", "leaf")`
- Added to the current scoped branch

* Print a tree, or write it to file at the end of a block
- `defer_print!()`
- `defer_write!("filename.txt")`
- The tree will be empty after these calls
- To prevent clearing, use `defer_peek_print!` and `defer_peek_write!`

* Get the trees pretty-string


* Handle multiple trees using named trees
- `add_branch_to!("A", "I'm a branch on tree 'A'")`
- `add_leaf_to!("A", "I'm a leaf on tree 'A'")`
- `defer_print!("A")`
- `defer_write!("A", "filename.txt")`

* Get a named tree
- `tree("TREE_NAME")`

* Retrieve the pretty-string from a tree
- `tree("TREE_NAME").string()`


* Usage across threads
- `default_tree()` is local to each thread
- Named trees are shared between threads

== More Examples

=== Multiple Tagged Trees

If you need multiple, separated trees you can use a name tag.

[source,rust]
----
include::{examples}multiple_trees.rs[]
----
----
include::{examples}out/multiple_trees_A.txt[]
----
----
include::{examples}out/multiple_trees_B.txt[]
----

=== Nested Functions

Branches also make nested function calls a lot easier to follow.

[source,rust]
----
include::{examples}nested.rs[]
----
----
include::{examples}out/nested.txt[]
----

=== Line Breaks

Newlines in multi-line strings are automatically indented.

[source,rust]
----
include::{examples}multi_line.rs[]
----
----
include::{examples}out/multi_line.txt[]
----

=== Panics
Even if there is a panic, the tree is not lost!
The `defer_` functions were introduced to allow the tree
to be printed our written to file in the case of a `panic!` or early return.

[source,rust]
----
include::{examples}panic.rs[]
----
----
include::{examples}out/panic.txt[]
----


=== Without Macros

If you prefer not using macros, you can construct `TreeBuilder`s manually.

[source,rust]
----
include::{examples}no_macros.rs[]
----
----
include::{examples}out/no_macros.txt[]
----

[ Dauer der Verarbeitung: 0.13 Sekunden  (vorverarbeitet)  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge