[71] | 1 | #ifdef STATISTICS |
---|
| 2 | #include "Behavioural/include/Stat_binary_tree.h" |
---|
| 3 | |
---|
| 4 | namespace morpheo { |
---|
| 5 | namespace behavioural { |
---|
[88] | 6 | |
---|
[71] | 7 | bool Stat_binary_tree::valid (void) |
---|
| 8 | { |
---|
[88] | 9 | if (_data_type == NONE) |
---|
| 10 | return false; |
---|
| 11 | |
---|
[71] | 12 | if ((_data_type == VARIABLE) or |
---|
| 13 | (_data_type == CONSTANT)) |
---|
| 14 | return ((_left == NULL) and |
---|
[88] | 15 | (_right == NULL) ); |
---|
| 16 | |
---|
[71] | 17 | if (_data_type == OPERATOR_UNARY) |
---|
| 18 | return ((_right == NULL) and |
---|
[88] | 19 | (_left != NULL) and |
---|
| 20 | (_left->valid())); |
---|
[71] | 21 | |
---|
| 22 | if (_data_type == OPERATOR_BINARY) |
---|
| 23 | return ((_left != NULL ) and |
---|
[88] | 24 | (_left ->valid()) and |
---|
| 25 | (_right != NULL ) and |
---|
| 26 | (_right->valid())); |
---|
[71] | 27 | |
---|
| 28 | return false; |
---|
| 29 | } |
---|
[88] | 30 | |
---|
| 31 | void Stat_binary_tree::print (uint32_t depth) |
---|
| 32 | { |
---|
| 33 | std::string tab = std::string(depth,'\t'); |
---|
| 34 | std::string sep = " "; |
---|
| 35 | if (_data_type == NONE) |
---|
| 36 | { |
---|
| 37 | std::cout << tab << "<node> NONE (error)" << std::endl; |
---|
| 38 | |
---|
| 39 | if (_left != NULL) |
---|
| 40 | _left ->print(depth+1); |
---|
| 41 | if (_right != NULL) |
---|
| 42 | _right->print(depth+1); |
---|
| 43 | } |
---|
| 44 | |
---|
| 45 | if ((_data_type == VARIABLE) or |
---|
| 46 | (_data_type == CONSTANT)) |
---|
| 47 | { |
---|
| 48 | std::cout << tab << "<leaf>" |
---|
| 49 | << " " |
---|
| 50 | << ((_left == NULL)?"left == NULL ":"left != NULL (error)") |
---|
| 51 | << " " |
---|
| 52 | << ((_right == NULL)?"right == NULL ":"right != NULL (error)") |
---|
| 53 | << std::endl; |
---|
| 54 | |
---|
| 55 | if (_left != NULL) |
---|
| 56 | _left ->print(depth+1); |
---|
| 57 | if (_right != NULL) |
---|
| 58 | _right->print(depth+1); |
---|
| 59 | } |
---|
| 60 | |
---|
| 61 | if (_data_type == OPERATOR_UNARY) |
---|
| 62 | { |
---|
| 63 | std::cout << tab << "<unary>" |
---|
| 64 | << " " |
---|
| 65 | << ((_left == NULL)?"left == NULL (error)":"left != NULL ") |
---|
| 66 | << " " |
---|
| 67 | << ((_right == NULL)?"right == NULL ":"right != NULL (error)") |
---|
| 68 | << std::endl; |
---|
| 69 | |
---|
| 70 | if (_left != NULL) |
---|
| 71 | _left ->print(depth+1); |
---|
| 72 | if (_right != NULL) |
---|
| 73 | _right->print(depth+1); |
---|
| 74 | } |
---|
| 75 | |
---|
| 76 | if (_data_type == OPERATOR_BINARY) |
---|
| 77 | { |
---|
| 78 | std::cout << tab << "<binary>" |
---|
| 79 | << " " |
---|
| 80 | << ((_left == NULL)?"left == NULL (error)":"left != NULL ") |
---|
| 81 | << " " |
---|
| 82 | << ((_right == NULL)?"right == NULL (error)":"right != NULL ") |
---|
| 83 | << std::endl; |
---|
| 84 | |
---|
| 85 | if (_left != NULL) |
---|
| 86 | _left ->print(depth+1); |
---|
| 87 | if (_right != NULL) |
---|
| 88 | _right->print(depth+1); |
---|
| 89 | } |
---|
| 90 | } |
---|
| 91 | |
---|
[71] | 92 | }; |
---|
| 93 | }; |
---|
| 94 | #endif |
---|