Example #1
0
File: tree.c Project: basecq/q2dos
const char *
tree_string (NODE *node, int init)
{
    static char buf[1024];
    static int len;

    if (init) {
	len = 0;
    }

    if (node->type == N_OP) {
	if (node->left) {
	    if (PRECEDENCE(node, node->left)) {
		len += sprintf(&buf[len], "(");
	    }
	    tree_string(node->left, 0);
	    if (PRECEDENCE(node, node->left)) {
		len += sprintf(&buf[len], ")");
	    }
	    len += sprintf(&buf[len], " %c ", node->val.ch);
	} else {
	    len += sprintf(&buf[len], "%c", node->val.ch);
	}
	if (PRECEDENCE(node, node->right)) {
	    len += sprintf(&buf[len], "(");
	}
	tree_string(node->right, 0);
	if (PRECEDENCE(node, node->right)) {
	    len += sprintf(&buf[len], ")");
	}
    } else {
	len += sprintf(&buf[len], "%s", node->val.name);
    }
    return buf;
}
Example #2
0
int test_point_crossover(void)
{
    int i;
    struct test *t;
    struct tree *t1;
    struct tree *t2;
    char *t1_before;
    char *t2_before;
    char *t1_after;
    char *t2_after;

    /* setup */
    t = malloc(sizeof(struct test));
    test_setup_function_set(t);
    test_setup_terminal_set(t);

    for (i = 0; i < 1; i++) {
        /* generate tree 1 and 2 */
        t1 = tree_generate(FULL, t->fs, t->ts, 1);
        t2 = tree_generate(FULL, t->fs, t->ts, 1);

        /* before crossover */
        mu_print("BEFORE:\n");
        t1_before = tree_string(t1);
        t2_before = tree_string(t2);
        mu_print("t1 tree: %s\n", t1_before);
        mu_print("t2 tree: %s\n", t2_before);
        mu_print("t1 size: %d depth %d\n", t1->size, t1->depth);
        mu_print("t2 size: %d depth %d\n", t2->size, t2->depth);

        /* crossover */
        point_crossover(t1, t2);

        /* after crossover */
        mu_print("AFTER:\n");
        t1_after = tree_string(t1);
        t2_after = tree_string(t2);
        mu_print("t1 tree: %s\n", t1_after);
        mu_print("t2 tree: %s\n", t2_after);
        mu_print("t1 size: %d depth %d\n", t1->size, t1->depth);
        mu_print("t2 size: %d depth %d\n", t2->size, t2->depth);
        mu_print("\n");

        /* clean up */
        tree_destroy(t1);
        tree_destroy(t2);
        free(t1_before);
        free(t2_before);
        free(t1_after);
        free(t2_after);
    }

    /* clean up */
    test_teardown_function_set(t);
    test_teardown_terminal_set(t);
    free(t);

    return 0;
}
Example #3
0
int test_point_crossover(void)
{
    int i;
    char *t1_before;
    char *t2_before;
    char *t1_after;
    char *t2_after;

    for (i = 0; i < 1; i++) {
        setup();
        mu_print("BEFORE:\n");
        t1_before = tree_string(t1);
        t2_before = tree_string(t2);
        mu_print("t1 tree: %s\n", t1_before);
        mu_print("t2 tree: %s\n", t2_before);
        mu_print("t1 size: %d depth %d\n", t1->size, t1->depth);
        mu_print("t2 size: %d depth %d\n", t2->size, t2->depth);


        point_crossover(t1, t2);

        mu_print("AFTER:\n");
        t1_after = tree_string(t1);
        t2_after = tree_string(t2);
        mu_print("t1 tree: %s\n", t1_after);
        mu_print("t2 tree: %s\n", t2_after);
        mu_print("t1 size: %d depth %d\n", t1->size, t1->depth);
        mu_print("t2 size: %d depth %d\n", t2->size, t2->depth);
        mu_print("\n");

        teardown();
        free(t1_before);
        free(t2_before);
        free(t1_after);
        free(t2_after);
    }

    setup();
    mu_print("BEFORE:\n");
    tree_print(t1);
    tree_print(t2);
    point_crossover(t1, t2);
    mu_print("AFTER:\n");
    tree_print(t1);
    tree_print(t2);

    mu_print("\n\nBEFORE:\n");
    tree_print(t1);
    tree_print(t2);
    point_crossover(t1, t2);
    mu_print("AFTER:\n");
    tree_print(t1);
    tree_print(t2);
    teardown();

    return 0;
}
Example #4
0
static char *prepare_line(struct wdgt *w, struct process *p)
{
	char *tree, state = p->proc->state;
	int offset = 0;
	if (!p) return 0;
	tree = tree_string(tree_root, p->proc);
	if(state == 'S') state = ' ';
	if (show_linenr) 
		offset = snprintf(w->mwin->gbuf, w->mwin->gbsize, "\x6%4d ", p->line + 1);
	if (offset < 0) return "";
	if(show_owner) 
		snprintf(w->mwin->gbuf+offset, w->mwin->gbsize-offset ,"\x3%5d %c%c \x3%-8s \x2%s \x3%s", 
			p->proc->pid, get_state_color(state), 
			state, get_owner_name(proc_pid_uid(p->proc->pid)), tree, 
			get_cmdline(p->proc->pid));
	 else 
		snprintf(w->mwin->gbuf+offset, w->mwin->gbsize-offset,"\x3%5d %c%c \x2%s \x3%s",
			p->proc->pid, get_state_color(state), 
			state, tree, get_cmdline(p->proc->pid));
		
	return w->mwin->gbuf;
}