From: Luca Padovani Date: Tue, 9 Nov 2004 07:55:31 +0000 (+0000) Subject: * depths now in hash table X-Git-Tag: v_0_6_4_1~17 X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=commitdiff_plain;h=29438dd0104563dac413ccdedeba979e8b50706c;p=helm.git * depths now in hash table --- diff --git a/helm/papers/use_case/stats/stats.cc b/helm/papers/use_case/stats/stats.cc index cab4326ce..a7016f0ee 100644 --- a/helm/papers/use_case/stats/stats.cc +++ b/helm/papers/use_case/stats/stats.cc @@ -4,19 +4,19 @@ #include #include +namespace stdx = __gnu_cxx; namespace DOM = GdomeSmartDOM; -unsigned n_elements; -unsigned n_leaf_elements; -unsigned n_text_nodes; -unsigned n_blank_text_nodes; -unsigned n_attributes; -unsigned max_attributes; -unsigned max_depth; -unsigned max_children; -std::hash_map depths; -std::vector widths; +int n_elements; +int n_leaf_elements; +int n_text_nodes; +int n_blank_text_nodes; +int n_attributes; +int max_attributes; +int max_children; +stdx::hash_map depths; +std::vector widths; bool is_blank(const std::string& s) @@ -27,28 +27,28 @@ is_blank(const std::string& s) } void -add_depth(unsigned depth) +add_depth(int depth) { - std::hash_map::iterator p = depths.find(depth); - if (p != depths.end()) - p->end++; - else - depths[depth] = 1; + stdx::hash_map::iterator p = depths.find(depth); + if (p != depths.end()) + p->second++; + else + depths[depth] = 1; } void -visit(DOM::Node node, unsigned depth) +visit(DOM::Node node, int depth) { assert(node); - max_depth = std::max(max_depth, depth); + add_depth(depth); switch (node.get_nodeType()) { case DOM::Node::ELEMENT_NODE: { n_elements++; - const unsigned n_attrs = node.get_attributes().get_length(); + const int n_attrs = node.get_attributes().get_length(); n_attributes += n_attrs; max_attributes = std::max(max_attributes, n_attrs); if (!node.get_firstChild()) n_leaf_elements++; @@ -62,7 +62,7 @@ visit(DOM::Node node, unsigned depth) break; } - unsigned n_children = 0; + int n_children = 0; for (DOM::Node p = node.get_firstChild(); p; p = p.get_nextSibling()) { visit(p, depth + 1); @@ -70,27 +70,31 @@ visit(DOM::Node node, unsigned depth) } max_children = std::max(max_children, n_children); - if (!node.get_firstChild()) - depths.push_back(depth); - else + if (node.get_firstChild()) widths.push_back(n_children); } void print_results(const std::string& URI) { - unsigned tot_depth = 0; - for (std::vector::const_iterator p = depths.begin(); p != depths.end(); p++) - tot_depth += *p; - - unsigned tot_width = 0; - for (std::vector::const_iterator p = widths.begin(); p != widths.end(); p++) - tot_width += *p; + int n_depths = 0; + int tot_depth = 0; + int max_depth = 0; + for (stdx::hash_map::const_iterator p = depths.begin(); p != depths.end(); p++) + { + n_depths += p->second; + tot_depth += p->first * p->second; + max_depth = std::max(max_depth, p->first); + } + + int tot_width = 0; + for (std::vector::const_iterator p = widths.begin(); p != widths.end(); p++) + tot_width += *p; std::cout << "" << std::endl; std::cout << " " << std::endl; std::cout << " " << max_depth << "" << std::endl; - std::cout << " " << tot_depth / ((double) depths.size()) << "" << std::endl; + std::cout << " " << tot_depth / ((double) n_depths) << "" << std::endl; std::cout << " " << std::endl; std::cout << " " << std::endl; std::cout << " " << max_children << "" << std::endl;