annotate final_pre/src/getMinHeight.c @ 10:a01801c32db7

fix final_pre
author ryokka
date Tue, 20 Feb 2018 17:35:52 +0900
parents 28f900230c26
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7
28f900230c26 add final_pre
ryokka
parents:
diff changeset
1 __code getMinHeight_stub(struct Context* context) {
28f900230c26 add final_pre
ryokka
parents:
diff changeset
2 goto getMinHeight(context, &context->data[Allocate]->allocate, &context->data[AkashaInfo]->akashaInfo);
28f900230c26 add final_pre
ryokka
parents:
diff changeset
3 }
28f900230c26 add final_pre
ryokka
parents:
diff changeset
4
28f900230c26 add final_pre
ryokka
parents:
diff changeset
5 __code getMinHeight(struct Context* context, struct Allocate* allocate, struct AkashaInfo* akashaInfo) {
28f900230c26 add final_pre
ryokka
parents:
diff changeset
6 const struct AkashaNode* akashaNode = akashaInfo->akashaNode;
28f900230c26 add final_pre
ryokka
parents:
diff changeset
7
28f900230c26 add final_pre
ryokka
parents:
diff changeset
8 if (akashaNode == NULL) {
28f900230c26 add final_pre
ryokka
parents:
diff changeset
9 allocate->size = sizeof(struct AkashaNode);
28f900230c26 add final_pre
ryokka
parents:
diff changeset
10 allocator(context);
28f900230c26 add final_pre
ryokka
parents:
diff changeset
11 akashaInfo->akashaNode = (struct AkashaNode*)context->data[context->dataNum];
28f900230c26 add final_pre
ryokka
parents:
diff changeset
12
28f900230c26 add final_pre
ryokka
parents:
diff changeset
13 akashaInfo->akashaNode->height = 1;
28f900230c26 add final_pre
ryokka
parents:
diff changeset
14 akashaInfo->akashaNode->node = context->data[Tree]->tree.root;
28f900230c26 add final_pre
ryokka
parents:
diff changeset
15
28f900230c26 add final_pre
ryokka
parents:
diff changeset
16 goto getMaxHeight_stub(context);
28f900230c26 add final_pre
ryokka
parents:
diff changeset
17 }
28f900230c26 add final_pre
ryokka
parents:
diff changeset
18
28f900230c26 add final_pre
ryokka
parents:
diff changeset
19 const struct Node* node = akashaInfo->akashaNode->node;
28f900230c26 add final_pre
ryokka
parents:
diff changeset
20 if (node->left == NULL && node->right == NULL) {
28f900230c26 add final_pre
ryokka
parents:
diff changeset
21 if (akashaInfo->minHeight > akashaNode->height) {
28f900230c26 add final_pre
ryokka
parents:
diff changeset
22 akashaInfo->minHeight = akashaNode->height;
28f900230c26 add final_pre
ryokka
parents:
diff changeset
23 akashaInfo->akashaNode = akashaNode->nextAkashaNode;
28f900230c26 add final_pre
ryokka
parents:
diff changeset
24 goto getMinHeight_stub(context);
28f900230c26 add final_pre
ryokka
parents:
diff changeset
25 }
28f900230c26 add final_pre
ryokka
parents:
diff changeset
26 }
28f900230c26 add final_pre
ryokka
parents:
diff changeset
27
28f900230c26 add final_pre
ryokka
parents:
diff changeset
28 akashaInfo->akashaNode = akashaInfo->akashaNode->nextAkashaNode;
28f900230c26 add final_pre
ryokka
parents:
diff changeset
29
28f900230c26 add final_pre
ryokka
parents:
diff changeset
30 if (node->left != NULL) {
28f900230c26 add final_pre
ryokka
parents:
diff changeset
31 allocate->size = sizeof(struct AkashaNode);
28f900230c26 add final_pre
ryokka
parents:
diff changeset
32 allocator(context);
28f900230c26 add final_pre
ryokka
parents:
diff changeset
33 struct AkashaNode* left = (struct AkashaNode*)context->data[context->dataNum];
28f900230c26 add final_pre
ryokka
parents:
diff changeset
34 left->height = akashaNode->height+1;
28f900230c26 add final_pre
ryokka
parents:
diff changeset
35 left->node = node->left;
28f900230c26 add final_pre
ryokka
parents:
diff changeset
36 left->nextAkashaNode = akashaInfo->akashaNode;
28f900230c26 add final_pre
ryokka
parents:
diff changeset
37 akashaInfo->akashaNode = left;
28f900230c26 add final_pre
ryokka
parents:
diff changeset
38 }
28f900230c26 add final_pre
ryokka
parents:
diff changeset
39
28f900230c26 add final_pre
ryokka
parents:
diff changeset
40 if (node->right != NULL) {
28f900230c26 add final_pre
ryokka
parents:
diff changeset
41 allocate->size = sizeof(struct AkashaNode);
28f900230c26 add final_pre
ryokka
parents:
diff changeset
42 allocator(context);
28f900230c26 add final_pre
ryokka
parents:
diff changeset
43 struct AkashaNode* right = (struct AkashaNode*)context->data[context->dataNum];
28f900230c26 add final_pre
ryokka
parents:
diff changeset
44 right->height = akashaNode->height+1;
28f900230c26 add final_pre
ryokka
parents:
diff changeset
45 right->node = node->right;
28f900230c26 add final_pre
ryokka
parents:
diff changeset
46 right->nextAkashaNode = akashaInfo->akashaNode;
28f900230c26 add final_pre
ryokka
parents:
diff changeset
47 akashaInfo->akashaNode = right;
28f900230c26 add final_pre
ryokka
parents:
diff changeset
48 }
28f900230c26 add final_pre
ryokka
parents:
diff changeset
49
28f900230c26 add final_pre
ryokka
parents:
diff changeset
50 goto getMinHeight_stub(context);
28f900230c26 add final_pre
ryokka
parents:
diff changeset
51 }