|
| 1 | +#include <stdio.h> |
| 2 | +#include <stdlib.h> |
| 3 | +#include <time.h> |
| 4 | + |
| 5 | +#define JIM_IMPLEMENTATION |
| 6 | +#include "../jim.h" |
| 7 | + |
| 8 | +#include "fruits.h" |
| 9 | + |
| 10 | +typedef struct Node Node; |
| 11 | + |
| 12 | +struct Node { |
| 13 | + const char *value; |
| 14 | + Node *left; |
| 15 | + Node *right; |
| 16 | +}; |
| 17 | + |
| 18 | +Node *generate_tree_of_fruits(size_t level_cur, size_t level_max) |
| 19 | +{ |
| 20 | + if (level_cur < level_max) { |
| 21 | + // Let It Leak! Let It Leak! |
| 22 | + // Let It Leak! Oh, Let It Leak! |
| 23 | + // Memory costs nothing! |
| 24 | + // Let It Leak! |
| 25 | + Node *node = malloc(sizeof(*node)); |
| 26 | + node->value = fruits[rand() % fruits_count]; |
| 27 | + node->left = generate_tree_of_fruits(level_cur + 1, level_max); |
| 28 | + node->right = generate_tree_of_fruits(level_cur + 1, level_max); |
| 29 | + return node; |
| 30 | + } else { |
| 31 | + return NULL; |
| 32 | + } |
| 33 | +} |
| 34 | + |
| 35 | +void print_node_as_json(Jim *jim, Node *node) |
| 36 | +{ |
| 37 | + if (node == NULL) { |
| 38 | + jim_null(jim); |
| 39 | + } else { |
| 40 | + jim_object_begin(jim); |
| 41 | + jim_member_key(jim, "value"); |
| 42 | + jim_string(jim, node->value); |
| 43 | + |
| 44 | + jim_member_key(jim, "left"); |
| 45 | + print_node_as_json(jim, node->left); |
| 46 | + |
| 47 | + jim_member_key(jim, "right"); |
| 48 | + print_node_as_json(jim, node->right); |
| 49 | + jim_object_end(jim); |
| 50 | + } |
| 51 | +} |
| 52 | + |
| 53 | +int main() |
| 54 | +{ |
| 55 | + srand(time(0)); |
| 56 | + Jim jim = { |
| 57 | + .sink = stdout, |
| 58 | + .write = (Jim_Write) fwrite, |
| 59 | + }; |
| 60 | + print_node_as_json(&jim, generate_tree_of_fruits(0, 4)); |
| 61 | + return 0; |
| 62 | +} |
0 commit comments