2020-04-17 18:18:40 +00:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
< html >
< head >
< title > Trees< / title >
2020-04-23 22:23:44 +00:00
< link href = "../docs-assets/Breadcrumbs.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
2020-04-17 18:18:40 +00:00
< meta name = "viewport" content = "width=device-width initial-scale=1" >
< meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" >
< meta http-equiv = "Content-Language" content = "en-gb" >
2020-04-20 22:26:08 +00:00
2020-05-02 22:50:23 +00:00
< link href = "../docs-assets/Contents.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
2020-04-30 22:36:38 +00:00
< link href = "../docs-assets/Progress.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
2020-04-25 10:33:39 +00:00
< link href = "../docs-assets/Navigation.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
< link href = "../docs-assets/Fonts.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
2020-04-20 22:26:08 +00:00
< link href = "../docs-assets/Base.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
< script >
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
< / script >
< link href = "../docs-assets/Popups.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
2020-04-21 16:55:17 +00:00
< link href = "../docs-assets/Colours.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
2020-04-23 22:23:44 +00:00
2020-04-17 18:18:40 +00:00
< / head >
2020-04-25 10:33:39 +00:00
< body class = "commentary-font" >
2020-04-17 18:18:40 +00:00
< nav role = "navigation" >
< h1 > < a href = "../index.html" >
2020-04-20 22:26:08 +00:00
< img src = "../docs-assets/Octagram.png" width = 72 height = 72" >
2020-04-17 18:18:40 +00:00
< / a > < / h1 >
< ul > < li > < a href = "../inweb/index.html" > inweb< / a > < / li >
< / ul > < h2 > Foundation Module< / h2 > < ul >
< li > < a href = "index.html" > < span class = "selectedlink" > foundation< / span > < / a > < / li >
< li > < a href = "../foundation-test/index.html" > foundation-test< / a > < / li >
< / ul > < h2 > Example Webs< / h2 > < ul >
< li > < a href = "../goldbach/index.html" > goldbach< / a > < / li >
< li > < a href = "../twinprimes/twinprimes.html" > twinprimes< / a > < / li >
< li > < a href = "../eastertide/index.html" > eastertide< / a > < / li >
< / ul > < h2 > Repository< / h2 > < ul >
2020-04-20 22:34:44 +00:00
< li > < a href = "https://github.com/ganelson/inweb" > < img src = "../docs-assets/github.png" height = 18 > github< / a > < / li >
2020-04-17 18:18:40 +00:00
< / ul > < h2 > Related Projects< / h2 > < ul >
< li > < a href = "../../../inform/docs/index.html" > inform< / a > < / li >
< li > < a href = "../../../intest/docs/index.html" > intest< / a > < / li >
< / ul >
< / nav >
< main role = "main" >
2020-04-23 22:23:44 +00:00
<!-- Weave of 'Trees' generated by Inweb -->
2020-04-30 22:36:38 +00:00
< div class = "breadcrumbs" >
< ul class = "crumbs" > < li > < a href = "../index.html" > Home< / a > < / li > < li > < a href = "index.html" > foundation< / a > < / li > < li > < a href = "index.html#2" > Chapter 2: Memory, Streams and Collections< / a > < / li > < li > < b > Trees< / b > < / li > < / ul > < / div >
< p class = "purpose" > To provide heterogeneous tree structures, where a node can be any structure known to the Foundation memory manager.< / p >
2020-04-17 18:18:40 +00:00
< ul class = "toc" > < li > < a href = "2-trs.html#SP1" > § 1. Trees and nodes< / a > < / li > < li > < a href = "2-trs.html#SP6" > § 6. Types< / a > < / li > < li > < a href = "2-trs.html#SP10" > § 10. Hierarchy< / a > < / li > < li > < a href = "2-trs.html#SP13" > § 13. Traversals< / a > < / li > < / ul > < hr class = "tocbar" >
2020-08-16 17:39:53 +00:00
< p class = "commentary firstcommentary" > < a id = "SP1" class = "paragraph-anchor" > < / a > < b > § 1. Trees and nodes. < / b > The tree itself is really just a root node, which is initially null, so that
2020-04-17 18:18:40 +00:00
a tree can be empty.
< / p >
2020-04-25 10:33:39 +00:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-04-21 16:55:17 +00:00
< span class = "reserved-syntax" > typedef< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > struct< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > heterogeneous_tree< / span > < span class = "plain-syntax" > {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > struct< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > tree_type< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > type< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > struct< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > root< / span > < span class = "plain-syntax" > ;< / span >
2020-05-09 12:05:00 +00:00
< span class = "plain-syntax" > < / span > < span class = "constant-syntax" > CLASS_DEFINITION< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > } < / span > < span class = "reserved-syntax" > heterogeneous_tree< / span > < span class = "plain-syntax" > ;< / span >
2020-04-24 10:26:18 +00:00
< / pre >
< ul class = "endnotetexts" > < li > The structure heterogeneous_tree is private to this section.< / li > < / ul >
2020-08-16 17:39:53 +00:00
< p class = "commentary firstcommentary" > < a id = "SP2" class = "paragraph-anchor" > < / a > < b > § 2. < / b > < / p >
2020-04-21 16:55:17 +00:00
2020-04-25 10:33:39 +00:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-04-25 12:26:09 +00:00
< span class = "reserved-syntax" > heterogeneous_tree< / span > < span class = "plain-syntax" > *< / span > < span class = "function-syntax" > Trees::new< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > tree_type< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > type< / span > < span class = "plain-syntax" > ) {< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > heterogeneous_tree< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > CREATE< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > heterogeneous_tree< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > type< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > type< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > root< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2020-04-24 10:26:18 +00:00
< / pre >
2020-08-16 17:39:53 +00:00
< p class = "commentary firstcommentary" > < a id = "SP3" class = "paragraph-anchor" > < / a > < b > § 3. < / b > < / p >
2020-04-21 16:55:17 +00:00
2020-04-25 10:33:39 +00:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-04-21 16:55:17 +00:00
< span class = "reserved-syntax" > typedef< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > struct< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > struct< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > heterogeneous_tree< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > owner< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > struct< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > tree_node_type< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > type< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > struct< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > general_pointer< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > content< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > struct< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > next< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > struct< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > parent< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > struct< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > child< / span > < span class = "plain-syntax" > ;< / span >
2020-05-09 12:05:00 +00:00
< span class = "plain-syntax" > < / span > < span class = "constant-syntax" > CLASS_DEFINITION< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > } < / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > ;< / span >
2020-04-24 10:26:18 +00:00
< / pre >
< ul class = "endnotetexts" > < li > The structure tree_node is accessed in 2/mmr, 4/taa and here.< / li > < / ul >
2020-08-16 17:39:53 +00:00
< p class = "commentary firstcommentary" > < a id = "SP4" class = "paragraph-anchor" > < / a > < b > § 4. < / b > A node is created in limbo, removed from its tree, but it is still somehow
2020-04-17 18:18:40 +00:00
owned by it.
< / p >
2020-04-25 10:33:39 +00:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-04-27 22:43:23 +00:00
< span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *< / span > < span class = "function-syntax" > Trees::new_node< / span > < button class = "popup" onclick = "togglePopup('usagePopup1')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup1" > Usage of < span class = "code-font" > < span class = "function-syntax" > Trees::new_node< / span > < / span > :< br / > < a href = "2-trs.html#SP5" > § 5< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > heterogeneous_tree< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > tree_node_type< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > type< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > general_pointer< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > wrapping< / span > < span class = "plain-syntax" > ) {< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > internal_error< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "no tree"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > wrapping< / span > < span class = "plain-syntax" > .< / span > < span class = "element-syntax" > run_time_type_code< / span > < span class = "plain-syntax" > == -1)< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > internal_error< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "no reference given"< / span > < span class = "plain-syntax" > );< / span >
2020-05-09 12:05:00 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > type< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > required_CLASS< / span > < span class = "plain-syntax" > > = < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > )< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > wrapping< / span > < span class = "plain-syntax" > .< / span > < span class = "element-syntax" > run_time_type_code< / span > < span class = "plain-syntax" > != < / span > < span class = "identifier-syntax" > type< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > required_CLASS< / span > < span class = "plain-syntax" > )< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > internal_error< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "wrong reference type"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > CREATE< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > content< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > wrapping< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > owner< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > type< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > type< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > parent< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > child< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2020-04-24 10:26:18 +00:00
< / pre >
2020-08-16 17:39:53 +00:00
< p class = "commentary firstcommentary" > < a id = "SP5" class = "paragraph-anchor" > < / a > < b > § 5. < / b > A convenient abbreviation for a common manoeuvre:
2020-04-17 18:18:40 +00:00
< / p >
2020-04-25 10:33:39 +00:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-04-25 12:26:09 +00:00
< span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *< / span > < span class = "function-syntax" > Trees::new_child< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > of< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > tree_node_type< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > type< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > general_pointer< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > wrapping< / span > < span class = "plain-syntax" > ) {< / span >
2020-04-21 23:52:25 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > = < / span > < a href = "2-trs.html#SP4" class = "function-link" > < span class = "function-syntax" > Trees::new_node< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > of< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > owner< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > type< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > wrapping< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < a href = "2-trs.html#SP11" class = "function-link" > < span class = "function-syntax" > Trees::make_child< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > of< / span > < span class = "plain-syntax" > );< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2020-04-24 10:26:18 +00:00
< / pre >
2020-08-16 17:39:53 +00:00
< p class = "commentary firstcommentary" > < a id = "SP6" class = "paragraph-anchor" > < / a > < b > § 6. Types. < / b > The above will provide for multiple different types of tree to be used for
2020-04-17 18:18:40 +00:00
different purposes. Heterogeneous trees allow the coder to make dangerously
type-unsafe structures, so we want to hedge them in with self-imposed
constraints:
< / p >
2020-04-25 10:33:39 +00:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-04-21 16:55:17 +00:00
< span class = "reserved-syntax" > typedef< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > struct< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > tree_type< / span > < span class = "plain-syntax" > {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > struct< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > text_stream< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > name< / span > < span class = "plain-syntax" > ;< / span >
2020-04-24 23:06:02 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > (*< / span > < span class = "identifier-syntax" > verify_root< / span > < span class = "plain-syntax" > )(< / span > < span class = "reserved-syntax" > struct< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *); < / span > < span class = "comment-syntax" > function to vet the root node< / span >
2020-05-09 12:05:00 +00:00
< span class = "plain-syntax" > < / span > < span class = "constant-syntax" > CLASS_DEFINITION< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > } < / span > < span class = "reserved-syntax" > tree_type< / span > < span class = "plain-syntax" > ;< / span >
2020-04-24 10:26:18 +00:00
< / pre >
< ul class = "endnotetexts" > < li > The structure tree_type is private to this section.< / li > < / ul >
2020-08-16 17:39:53 +00:00
< p class = "commentary firstcommentary" > < a id = "SP7" class = "paragraph-anchor" > < / a > < b > § 7. < / b > < / p >
2020-04-21 16:55:17 +00:00
2020-04-25 10:33:39 +00:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-04-25 12:26:09 +00:00
< span class = "reserved-syntax" > tree_type< / span > < span class = "plain-syntax" > *< / span > < span class = "function-syntax" > Trees::new_type< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > text_stream< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > name< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > (*< / span > < span class = "identifier-syntax" > verifier< / span > < span class = "plain-syntax" > )(< / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *)) {< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > tree_type< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > CREATE< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > tree_type< / span > < span class = "plain-syntax" > );< / span >
2020-04-21 23:52:25 +00:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > name< / span > < span class = "plain-syntax" > = < / span > < a href = "4-sm.html#SP3" class = "function-link" > < span class = "function-syntax" > Str::duplicate< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > name< / span > < span class = "plain-syntax" > );< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > verify_root< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > verifier< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2020-04-24 10:26:18 +00:00
< / pre >
2020-08-16 17:39:53 +00:00
< p class = "commentary firstcommentary" > < a id = "SP8" class = "paragraph-anchor" > < / a > < b > § 8. < / b > Each node in a tree also has a type. Whenever the children of a node change,
2020-04-22 22:57:09 +00:00
they are re-verified by the < span class = "extract" > < span class = "extract-syntax" > verify_children< / span > < / span > .
2020-04-17 18:18:40 +00:00
< / p >
2020-04-25 10:33:39 +00:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-04-21 16:55:17 +00:00
< span class = "reserved-syntax" > typedef< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > struct< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > tree_node_type< / span > < span class = "plain-syntax" > {< / span >
2020-04-24 23:06:02 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > struct< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > text_stream< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > node_type_name< / span > < span class = "plain-syntax" > ; < / span > < span class = "comment-syntax" > text such as < / span > < span class = "extract" > < span class = "extract-syntax" > I"INVOCATION"< / span > < / span >
2020-05-09 12:05:00 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > required_CLASS< / span > < span class = "plain-syntax" > ; < / span > < span class = "comment-syntax" > if any; or negative for no restriction< / span >
2020-04-24 23:06:02 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > (*< / span > < span class = "identifier-syntax" > verify_children< / span > < span class = "plain-syntax" > )(< / span > < span class = "reserved-syntax" > struct< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *); < / span > < span class = "comment-syntax" > function to vet the children< / span >
2020-05-09 12:05:00 +00:00
< span class = "plain-syntax" > < / span > < span class = "constant-syntax" > CLASS_DEFINITION< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > } < / span > < span class = "reserved-syntax" > tree_node_type< / span > < span class = "plain-syntax" > ;< / span >
2020-04-24 10:26:18 +00:00
< / pre >
< ul class = "endnotetexts" > < li > The structure tree_node_type is private to this section.< / li > < / ul >
2020-08-16 17:39:53 +00:00
< p class = "commentary firstcommentary" > < a id = "SP9" class = "paragraph-anchor" > < / a > < b > § 9. < / b > < / p >
2020-04-21 16:55:17 +00:00
2020-04-25 10:33:39 +00:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-04-25 12:26:09 +00:00
< span class = "reserved-syntax" > tree_node_type< / span > < span class = "plain-syntax" > *< / span > < span class = "function-syntax" > Trees::new_node_type< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > text_stream< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > name< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > req< / span > < span class = "plain-syntax" > ,< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > (*< / span > < span class = "identifier-syntax" > verifier< / span > < span class = "plain-syntax" > )(< / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *)) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > tree_node_type< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > NT< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > CREATE< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > tree_node_type< / span > < span class = "plain-syntax" > );< / span >
2020-04-21 23:52:25 +00:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > NT< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > node_type_name< / span > < span class = "plain-syntax" > = < / span > < a href = "4-sm.html#SP3" class = "function-link" > < span class = "function-syntax" > Str::duplicate< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > name< / span > < span class = "plain-syntax" > );< / span >
2020-05-09 12:05:00 +00:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > NT< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > required_CLASS< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > req< / span > < span class = "plain-syntax" > ;< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > NT< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > verify_children< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > verifier< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > NT< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2020-04-24 10:26:18 +00:00
< / pre >
2020-08-16 17:39:53 +00:00
< p class = "commentary firstcommentary" > < a id = "SP10" class = "paragraph-anchor" > < / a > < b > § 10. Hierarchy. < / b > A special function is needed to choose the root node; and note that this is
2020-04-17 18:18:40 +00:00
verified.
< / p >
2020-04-25 10:33:39 +00:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-04-25 12:26:09 +00:00
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Trees::make_root< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > heterogeneous_tree< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > ) {< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > internal_error< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "no tree"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > internal_error< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "no node"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > owner< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > root< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > parent< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > type< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > verify_root< / span > < span class = "plain-syntax" > )< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((*(< / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > type< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > verify_root< / span > < span class = "plain-syntax" > ))(< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > ) == < / span > < span class = "constant-syntax" > FALSE< / span > < span class = "plain-syntax" > )< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > internal_error< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "disallowed node as root"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > }< / span >
2020-04-27 22:43:23 +00:00
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Trees::remove_root< / span > < button class = "popup" onclick = "togglePopup('usagePopup2')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup2" > Usage of < span class = "code-font" > < span class = "function-syntax" > Trees::remove_root< / span > < / span > :< br / > < a href = "2-trs.html#SP11" > § 11< / a > , < a href = "2-trs.html#SP12" > § 12< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > heterogeneous_tree< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > ) {< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > internal_error< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "no tree"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > root< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2020-04-24 10:26:18 +00:00
< / pre >
2020-08-16 17:39:53 +00:00
< p class = "commentary firstcommentary" > < a id = "SP11" class = "paragraph-anchor" > < / a > < b > § 11. < / b > Otherwise, nodes are placed in a tree with respect to other nodes:
2020-04-17 18:18:40 +00:00
< / p >
2020-04-25 10:33:39 +00:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-04-27 22:43:23 +00:00
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Trees::make_child< / span > < button class = "popup" onclick = "togglePopup('usagePopup3')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup3" > Usage of < span class = "code-font" > < span class = "function-syntax" > Trees::make_child< / span > < / span > :< br / > < a href = "2-trs.html#SP5" > § 5< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > of< / span > < span class = "plain-syntax" > ) {< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > internal_error< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "no node"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > of< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > internal_error< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "no node"< / span > < span class = "plain-syntax" > );< / span >
2020-04-21 23:52:25 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > owner< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > root< / span > < span class = "plain-syntax" > ) < / span > < a href = "2-trs.html#SP10" class = "function-link" > < span class = "function-syntax" > Trees::remove_root< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > owner< / span > < span class = "plain-syntax" > );< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > owner< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > of< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > owner< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > parent< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > of< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > of< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > child< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > )< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > of< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > child< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > for< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > S< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > of< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > child< / span > < span class = "plain-syntax" > ; < / span > < span class = "identifier-syntax" > S< / span > < span class = "plain-syntax" > ; < / span > < span class = "identifier-syntax" > S< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > S< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > )< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > S< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > S< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > ; < / span > < span class = "reserved-syntax" > break< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2020-04-21 23:52:25 +00:00
< span class = "plain-syntax" > < / span > < a href = "2-trs.html#SP12" class = "function-link" > < span class = "function-syntax" > Trees::verify_children< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > of< / span > < span class = "plain-syntax" > );< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > }< / span >
2020-04-25 12:26:09 +00:00
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Trees::make_eldest_child< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > of< / span > < span class = "plain-syntax" > ) {< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > internal_error< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "no node"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > of< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > internal_error< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "no node"< / span > < span class = "plain-syntax" > );< / span >
2020-04-21 23:52:25 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > owner< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > root< / span > < span class = "plain-syntax" > ) < / span > < a href = "2-trs.html#SP10" class = "function-link" > < span class = "function-syntax" > Trees::remove_root< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > owner< / span > < span class = "plain-syntax" > );< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > owner< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > of< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > owner< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > parent< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > of< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > of< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > child< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > of< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > child< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > ;< / span >
2020-04-21 23:52:25 +00:00
< span class = "plain-syntax" > < / span > < a href = "2-trs.html#SP12" class = "function-link" > < span class = "function-syntax" > Trees::verify_children< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > of< / span > < span class = "plain-syntax" > );< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > }< / span >
2020-04-25 12:26:09 +00:00
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Trees::make_sibling< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > of< / span > < span class = "plain-syntax" > ) {< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > internal_error< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "no node"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > of< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > internal_error< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "no node"< / span > < span class = "plain-syntax" > );< / span >
2020-04-21 23:52:25 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > owner< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > root< / span > < span class = "plain-syntax" > ) < / span > < a href = "2-trs.html#SP10" class = "function-link" > < span class = "function-syntax" > Trees::remove_root< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > owner< / span > < span class = "plain-syntax" > );< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > of< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > of< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > owner< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > root< / span > < span class = "plain-syntax" > )< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > internal_error< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "nodes cannot be siblings of the root"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > owner< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > of< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > owner< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > parent< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > of< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > parent< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > of< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > of< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > ;< / span >
2021-02-04 17:56:57 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > of< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > parent< / span > < span class = "plain-syntax" > ) < / span > < a href = "2-trs.html#SP12" class = "function-link" > < span class = "function-syntax" > Trees::verify_children< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > of< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > parent< / span > < span class = "plain-syntax" > );< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > }< / span >
2020-04-24 10:26:18 +00:00
< / pre >
2020-08-16 17:39:53 +00:00
< p class = "commentary firstcommentary" > < a id = "SP12" class = "paragraph-anchor" > < / a > < b > § 12. < / b > Removing a node from a tree does not change its ownership — it still belongs
2020-04-17 18:18:40 +00:00
to that tree.
< / p >
2020-04-25 10:33:39 +00:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-04-27 22:43:23 +00:00
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Trees::remove< / span > < button class = "popup" onclick = "togglePopup('usagePopup4')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup4" > Usage of < span class = "code-font" > < span class = "function-syntax" > Trees::remove< / span > < / span > :< br / > < a href = "2-trs.html#SP14" > § 14< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > ) {< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > internal_error< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "no node"< / span > < span class = "plain-syntax" > );< / span >
2020-04-21 23:52:25 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > owner< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > root< / span > < span class = "plain-syntax" > ) { < / span > < a href = "2-trs.html#SP10" class = "function-link" > < span class = "function-syntax" > Trees::remove_root< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > owner< / span > < span class = "plain-syntax" > ); < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > ; }< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > parent< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > parent< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > child< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > )< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > parent< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > child< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > for< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > S< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > parent< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > child< / span > < span class = "plain-syntax" > ; < / span > < span class = "identifier-syntax" > S< / span > < span class = "plain-syntax" > ; < / span > < span class = "identifier-syntax" > S< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > S< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > )< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > S< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > )< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > S< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > parent< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ;< / span >
2020-04-21 23:52:25 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > ) < / span > < a href = "2-trs.html#SP12" class = "function-link" > < span class = "function-syntax" > Trees::verify_children< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > );< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > }< / span >
2020-04-27 22:43:23 +00:00
< span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Trees::verify_children< / span > < button class = "popup" onclick = "togglePopup('usagePopup5')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup5" > Usage of < span class = "code-font" > < span class = "function-syntax" > Trees::verify_children< / span > < / span > :< br / > < a href = "2-trs.html#SP11" > § 11< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > ) {< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > internal_error< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "no node"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > type< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > verify_children< / span > < span class = "plain-syntax" > )< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > (*(< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > type< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > verify_children< / span > < span class = "plain-syntax" > ))(< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "constant-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2020-04-24 10:26:18 +00:00
< / pre >
2020-08-16 17:39:53 +00:00
< p class = "commentary firstcommentary" > < a id = "SP13" class = "paragraph-anchor" > < / a > < b > § 13. Traversals. < / b > These two functions allow us to traverse the tree, visiting each node along
2020-04-21 23:52:25 +00:00
the way and carrying a state as we do. The distinction is that < a href = "2-trs.html#SP13" class = "internal" > Trees::traverse_from< / a >
2020-04-17 18:18:40 +00:00
iterates from and then below the given node, but doesn't go through its siblings,
2020-04-21 23:52:25 +00:00
whereas < a href = "2-trs.html#SP13" class = "internal" > Trees::traverse< / a > does.
2020-04-17 18:18:40 +00:00
< / p >
2020-04-24 23:06:02 +00:00
< p class = "commentary" > Note that it is legal to traverse the empty node, and does nothing.
2020-04-17 18:18:40 +00:00
< / p >
2020-04-25 10:33:39 +00:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-04-25 12:26:09 +00:00
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Trees::traverse_tree< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > heterogeneous_tree< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > ,< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > (*< / span > < span class = "identifier-syntax" > visitor< / span > < span class = "plain-syntax" > )(< / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *, < / span > < span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > *, < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > L< / span > < span class = "plain-syntax" > ), < / span > < span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > state< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > internal_error< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "no tree"< / span > < span class = "plain-syntax" > );< / span >
2020-04-21 23:52:25 +00:00
< span class = "plain-syntax" > < / span > < a href = "2-trs.html#SP13" class = "function-link" > < span class = "function-syntax" > Trees::traverse_from< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > root< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > visitor< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > state< / span > < span class = "plain-syntax" > , < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > );< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > }< / span >
2020-04-25 12:26:09 +00:00
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Trees::traverse_from< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > ,< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > (*< / span > < span class = "identifier-syntax" > visitor< / span > < span class = "plain-syntax" > )(< / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *, < / span > < span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > *, < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > L< / span > < span class = "plain-syntax" > ), < / span > < span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > state< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > L< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > )< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((*< / span > < span class = "identifier-syntax" > visitor< / span > < span class = "plain-syntax" > )(< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > state< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > L< / span > < span class = "plain-syntax" > ))< / span >
2020-04-21 23:52:25 +00:00
< span class = "plain-syntax" > < / span > < a href = "2-trs.html#SP13" class = "function-link" > < span class = "function-syntax" > Trees::traverse< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > child< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > visitor< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > state< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > L< / span > < span class = "plain-syntax" > +1);< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > }< / span >
2020-04-25 12:26:09 +00:00
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Trees::traverse< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > ,< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > (*< / span > < span class = "identifier-syntax" > visitor< / span > < span class = "plain-syntax" > )(< / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *, < / span > < span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > *, < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > L< / span > < span class = "plain-syntax" > ), < / span > < span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > state< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > L< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > for< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > M< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > ; < / span > < span class = "identifier-syntax" > M< / span > < span class = "plain-syntax" > ; < / span > < span class = "identifier-syntax" > M< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > M< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > )< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((*< / span > < span class = "identifier-syntax" > visitor< / span > < span class = "plain-syntax" > )(< / span > < span class = "identifier-syntax" > M< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > state< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > L< / span > < span class = "plain-syntax" > ))< / span >
2020-04-21 23:52:25 +00:00
< span class = "plain-syntax" > < / span > < a href = "2-trs.html#SP13" class = "function-link" > < span class = "function-syntax" > Trees::traverse< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > M< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > child< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > visitor< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > state< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > L< / span > < span class = "plain-syntax" > +1);< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > }< / span >
2020-04-24 10:26:18 +00:00
< / pre >
2020-08-16 17:39:53 +00:00
< p class = "commentary firstcommentary" > < a id = "SP14" class = "paragraph-anchor" > < / a > < b > § 14. < / b > < / p >
2020-04-21 16:55:17 +00:00
2020-04-25 10:33:39 +00:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-04-25 12:26:09 +00:00
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Trees::prune_tree< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > heterogeneous_tree< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > ,< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > (*< / span > < span class = "identifier-syntax" > visitor< / span > < span class = "plain-syntax" > )(< / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *, < / span > < span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > *), < / span > < span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > state< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > internal_error< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "no tree"< / span > < span class = "plain-syntax" > );< / span >
2020-04-21 23:52:25 +00:00
< span class = "plain-syntax" > < / span > < a href = "2-trs.html#SP14" class = "function-link" > < span class = "function-syntax" > Trees::prune_from< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > root< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > visitor< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > state< / span > < span class = "plain-syntax" > );< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > }< / span >
2020-04-25 12:26:09 +00:00
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Trees::prune_from< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > ,< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > (*< / span > < span class = "identifier-syntax" > visitor< / span > < span class = "plain-syntax" > )(< / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *, < / span > < span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > *), < / span > < span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > state< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((*< / span > < span class = "identifier-syntax" > visitor< / span > < span class = "plain-syntax" > )(< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > state< / span > < span class = "plain-syntax" > ))< / span >
2020-04-21 23:52:25 +00:00
< span class = "plain-syntax" > < / span > < a href = "2-trs.html#SP12" class = "function-link" > < span class = "function-syntax" > Trees::remove< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > );< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span >
2020-04-21 23:52:25 +00:00
< span class = "plain-syntax" > < / span > < a href = "2-trs.html#SP14" class = "function-link" > < span class = "function-syntax" > Trees::prune< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > child< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > visitor< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > state< / span > < span class = "plain-syntax" > );< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > }< / span >
2020-04-25 12:26:09 +00:00
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Trees::prune< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > ,< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > (*< / span > < span class = "identifier-syntax" > visitor< / span > < span class = "plain-syntax" > )(< / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *, < / span > < span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > *), < / span > < span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > state< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > for< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > tree_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > M< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > , *< / span > < span class = "identifier-syntax" > next_M< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > ?(< / span > < span class = "identifier-syntax" > N< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > ):< / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ; < / span > < span class = "identifier-syntax" > M< / span > < span class = "plain-syntax" > ; < / span > < span class = "identifier-syntax" > M< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > next_M< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > next_M< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > M< / span > < span class = "plain-syntax" > ?(< / span > < span class = "identifier-syntax" > M< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > next< / span > < span class = "plain-syntax" > ):< / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > )< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((*< / span > < span class = "identifier-syntax" > visitor< / span > < span class = "plain-syntax" > )(< / span > < span class = "identifier-syntax" > M< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > state< / span > < span class = "plain-syntax" > ))< / span >
2020-04-21 23:52:25 +00:00
< span class = "plain-syntax" > < / span > < a href = "2-trs.html#SP12" class = "function-link" > < span class = "function-syntax" > Trees::remove< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > M< / span > < span class = "plain-syntax" > );< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span >
2020-04-21 23:52:25 +00:00
< span class = "plain-syntax" > < / span > < a href = "2-trs.html#SP14" class = "function-link" > < span class = "function-syntax" > Trees::prune< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > M< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > child< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > visitor< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > state< / span > < span class = "plain-syntax" > );< / span >
2020-04-21 16:55:17 +00:00
< span class = "plain-syntax" > }< / span >
2020-04-24 10:26:18 +00:00
< / pre >
2020-04-30 22:36:38 +00:00
< nav role = "progress" > < div class = "progresscontainer" >
2020-07-04 19:28:54 +00:00
< ul class = "progressbar" > < li class = "progressprev" > < a href = "2-dct.html" > ❮ < / a > < / li > < li class = "progresschapter" > < a href = "P-abgtf.html" > P< / a > < / li > < li class = "progresschapter" > < a href = "1-fm.html" > 1< / a > < / li > < li class = "progresscurrentchapter" > 2< / li > < li class = "progresssection" > < a href = "2-dl.html" > dl< / a > < / li > < li class = "progresssection" > < a href = "2-mmr.html" > mmr< / a > < / li > < li class = "progresssection" > < a href = "2-fc.html" > fc< / a > < / li > < li class = "progresssection" > < a href = "2-lcl.html" > lcl< / a > < / li > < li class = "progresssection" > < a href = "2-str.html" > str< / a > < / li > < li class = "progresssection" > < a href = "2-wal.html" > wal< / a > < / li > < li class = "progresssection" > < a href = "2-mth.html" > mth< / a > < / li > < li class = "progresssection" > < a href = "2-llas.html" > llas< / a > < / li > < li class = "progresssection" > < a href = "2-dct.html" > dct< / a > < / li > < li class = "progresscurrent" > trs< / li > < li class = "progresschapter" > < a href = "3-em.html" > 3< / a > < / li > < li class = "progresschapter" > < a href = "4-chr.html" > 4< / a > < / li > < li class = "progresschapter" > < a href = "5-htm.html" > 5< / a > < / li > < li class = "progresschapter" > < a href = "6-bf.html" > 6< / a > < / li > < li class = "progresschapter" > < a href = "7-vn.html" > 7< / a > < / li > < li class = "progresschapter" > < a href = "8-ws.html" > 8< / a > < / li > < li class = "progressnext" > < a href = "3-em.html" > ❯ < / a > < / li > < / ul > < / div >
2020-04-30 22:36:38 +00:00
< / nav > <!-- End of weave -->
2020-04-23 22:23:44 +00:00
2020-04-17 18:18:40 +00:00
< / main >
< / body >
< / html >