makefile: reasonable way of adding compile options
This commit is contained in:
parent
e5ba03599b
commit
7f7a985ed6
@ -2,10 +2,6 @@
|
||||
.SILENT:
|
||||
|
||||
|
||||
# HELOS_RUNTIME_QUIET Supress on-screen kernel output (not supressing serial output)
|
||||
export BUILD_OPTIONS = -DHELOS_RUNTIME_QUIET
|
||||
|
||||
|
||||
FLAGS_DIR := $(dir $(lastword $(MAKEFILE_LIST)))
|
||||
SELF_DIR = $(dir $@)
|
||||
|
||||
|
14
config.h
Normal file
14
config.h
Normal file
@ -0,0 +1,14 @@
|
||||
// config.h: Compile flags
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
// Supress all screen output on boot.
|
||||
// Serial output is not supressed.
|
||||
#define HELOS_RUNTIME_QUIET
|
||||
|
||||
|
||||
// util/tree.h uses a Treap model for balancing.
|
||||
//
|
||||
// If no TREE_TYPE flags are defined, no balancing is employed.
|
||||
#define HELOS_UTIL_TREE_TYPE_TREAP
|
2
main.h
2
main.h
@ -1,5 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
|
11
util/tree.c
11
util/tree.c
@ -50,7 +50,11 @@ SYSV_ABI static tree_Node *__tree_InsertNodes(tree_Tree *t, tree_Node *node, tre
|
||||
if (!node) {
|
||||
if (added)
|
||||
*added = true;
|
||||
#ifdef HELOS_UTIL_TREE_TYPE_TREAP
|
||||
return *result = __tree_NewNode(t, key, father, random_Rand() ^ key);
|
||||
#else
|
||||
return *result = __tree_NewNode(t, key, father, 0);
|
||||
#endif
|
||||
} else if (key < node->key) {
|
||||
node->left = __tree_InsertNodes(t, node->left, node, key, result, added);
|
||||
return node;
|
||||
@ -69,8 +73,10 @@ tree_Node *tree_InsertNode(tree_Tree *t, uintptr_t key, bool *added) {
|
||||
tree_Node *result;
|
||||
t->root = __tree_InsertNodes(t, t->root, 0, key, &result, added);
|
||||
|
||||
#ifdef HELOS_UTIL_TREE_TYPE_TREAP
|
||||
if (*added)
|
||||
__tree_treap_Adjust(result, &t->root);
|
||||
#endif
|
||||
|
||||
return result;
|
||||
}
|
||||
@ -105,11 +111,16 @@ void *tree_Find(tree_Tree *t, uintptr_t key) {
|
||||
|
||||
|
||||
void tree_Delete(tree_Tree *t, tree_Node *node) {
|
||||
#ifdef HELOS_UTIL_TREE_TYPE_TREAP
|
||||
while (node->left && node->right)
|
||||
if (node->left->internal < node->right->internal)
|
||||
__tree_Rotate(node->left, &t->root);
|
||||
else
|
||||
__tree_Rotate(node->right, &t->root);
|
||||
#else
|
||||
while (node->left)
|
||||
__tree_Rotate(node->left, &t->root);
|
||||
#endif
|
||||
|
||||
if (node == t->root)
|
||||
t->root = (node->left ? node->left : node->right);
|
||||
|
Loading…
Reference in New Issue
Block a user