something definitely not right; we have shown that at least.
#include <textual/parser_bits.h>
#include <textual/string_manipulation.h>
-#define DEBUG_SYMBOL_TREE
+//#define DEBUG_SYMBOL_TREE
// uncomment for totally noisy version.
#include <loggers/program_wide_logger.h>
namespace nodes {
+//hmmm: used for... explain please.
class symbol_tree_associations : public symbol_table<symbol_tree *>
{
public:
symbol_tree_associations(int estimated_elements)
: symbol_table<symbol_tree *>(estimated_elements) {}
virtual ~symbol_tree_associations() {
+//hmmm: why was this here? was it ever needed?
// for (int i = 0; i < symbols(); i++) {
// WHACK(use(i));
// }
FUNCDEF("prune");
#endif
symbol_tree *to_zap = dynamic_cast<symbol_tree *>(to_zap_in);
- if (!to_zap)
+ if (!to_zap) {
+#ifdef DEBUG_SYMBOL_TREE
+ LOG("about to barf due to null symtree after dynamic cast.");
+#endif
throw("error: symbol_tree::prune: wrong type of node in prune");
+ }
#ifdef DEBUG_SYMBOL_TREE
LOG(astring("zapping node for ") + to_zap->name());
#endif
#include <basis/guards.h>
#include <loggers/program_wide_logger.h>
-#define DEBUG_TREE
+//#define DEBUG_TREE
// uncomment if you want lots of debugging info.
#undef LOG
#ifdef DEBUG_TREE
if ( (_order != to_branches)
&& (_order != reverse_branches) ) {
- if (_aim == AWAY_FROM_ROOT) LOG("going down")
- else LOG("going up");
+ if (_aim == AWAY_FROM_ROOT) LOG("going down...")
+ else LOG("going up...");
}
#endif
switch (_order) {
my_parent = NULL_POINTER; // disavow since we are loose now.
#if 0
+ //hmmm: clean this code when it's been examined long enough. maybe already.
//original version suffers from being too recursive on windoze,
//which blows out the stack. linux never showed this problem. so, i
// newer version of delete doesn't recurse; it just iterates instead,
// which avoids the massive recursive depth of the original approach.
tree *curr_node = this;
+ tree *stop_node = this; // don't whack self.
while (curr_node != NULL_POINTER) {
// make a breadcrumb for getting back to 'here' in the tree.
tree *way_back = curr_node;
// or there are no kids at all.
curr_node = curr_node->branch(0);
-LOG(a_sprintf("loop traverse on %p", curr_node));
-
if (curr_node == NULL_POINTER) {
// wayback has no children, so we can take action.
-LOG(a_sprintf("inside null condition, loop traverse on %p", curr_node));
// if wayback is the same as "this", then we exit from iterations since
// we've cleaned all the kids out.
// our remit, since wayback is not the same node as the top level one
// in the destructor (as long as there are no cycles in the tree...).
curr_node = way_back->parent(); // go up in tree on next iteration.
- delete way_back; // whack a node, finally.
-
+ WHACK(way_back); // whack a node, finally.
} else {
// okay, there's a node below here. we will spider down to it.
continue;
}
-
-
}
#endif
-
-
}
tree *tree::parent() const { return (tree *)get_link(BACKWARDS_BRANCH); }
#include <textual/string_manipulation.h>
#include <unit_test/unit_base.h>
-//#include <stdio.h>
-//#include <stdlib.h>
-
using namespace application;
using namespace basis;
using namespace filesystem;
int test_symbol_tree::execute()
{
FUNCDEF("execute");
- LOG("please check memory usage and record it, then hit a key to start testing.");
try {
- // creates a crazy tree with only one branch per node, but 40,000 deep.
- symbol_tree t("blork");
- symbol_tree *curr = &t;
+ // creates a crazy tree with only one branch per node, but hugely deep.
+ symbol_tree *t = new symbol_tree("blork");
+ symbol_tree *curr = t;
for (int i = 0; i < MAX_NODES_TESTED; i++) {
// if the current node has any branches, we'll jump on one as the next
// place.
astring rando = string_manipulation::make_random_name(1, 10);
curr->add(new symbol_tree(rando));
}
- LOG("check memory usage now with full size. then hit a key.");
+LOG("about to whack dynamic tree...");
+ WHACK(t);
+LOG("dynamic tree whacked.");
} catch (...) {
LOG("crashed during tree stuffing.");
return 1;
}
- LOG("check memory usage after the run. then hit a key to end "
- "the program.");
-
-//create a more balanced tree structure...
-//perform known operations and validate shape of tree.
+//hmmm: create a more balanced tree structure...
+// perform known operations and validate shape of tree.
return final_report();
}