Пример #1
0
avl_tree_node_t *
master_update_slave(master_t *m,
                    uint32_t ip,
                    const slave_description_t *sd) {
    avl_tree_node_t *atn = avl_tree_get(&m->slaves, ip);
    slave_description_t *atn_sd;

    LOG(LOG_LEVEL_DEBUG,
        "  Slave: ID = %u, T = %d, IL = %u\n",
        (unsigned int)ip,
        (int)sd->temperature,
        (unsigned int)sd->illumination);

    if (!atn) {
        atn = avl_tree_add(&m->slaves, ip);
        atn_sd = (slave_description_t *)atn->data;
        memset(atn_sd, 0, sizeof(*atn_sd));
    }
    else
        atn_sd = (slave_description_t *)atn->data;

    m->sum.temperature -= atn_sd->temperature;
    m->sum.illumination -= atn_sd->illumination;

    memcpy(atn_sd, sd, sizeof(*atn_sd));

    m->sum.temperature += atn_sd->temperature;
    m->sum.illumination += atn_sd->illumination;
}
Пример #2
0
int main(int argc, char *argv[])
{
/* 	int x; */
/* 	FILE *fp; */
/* 	int op; */
/* 	struct avl_tree *tree; */
/* 	struct avl_tnode *p; */

/* 	setbuf(stdout, NULL); */
/* 	tree = alloc_avl_tree(); */
/* 	while (scanf(" %c", &op) > 0) { */
/* 		scanf(" %d", &x); */
/* 		if ((unsigned char) op == 'i') { */
/* 			if (avl_tree_add(tree, p = alloc_avl_tnode(x)) != p) */
/* 				free(p); */
/* 		} else */
/* 			free(avl_tree_del(tree, x)); */
/* 		if (tree->root != NULL) */
/* 			tree_trav(tree->root, 0); */
/* 	} */

	int x;
	int op;
	struct avl_tree *tree;
	struct avl_tnode *node;
	FILE *fp;
	clock_t before;
	double elapsed;

	if (argc == 2)
		fp = fopen(argv[1], "r");
	else
		fp = stdin;
	tree = alloc_avl_tree();
	before = clock();
	while (fscanf(fp, " %d", &x) > 0) {
//		printf("inserting %d\n", x);
		node = alloc_avl_tnode(x);
		avl_tree_add(tree, node);
		printf("node->val = %d\n",node->val);
/* 		tree_trav(tree->root, 0); */
/* 		if (fp != stdin) */
/* 			getchar(); */
	}
	elapsed = clock() - before;
	fprintf(stderr, "inserting: %.3f seconds\n",
		elapsed / CLOCKS_PER_SEC);
	before = clock();
//	tree_trav(tree->root, 0);
	while (tree->root != NULL) {
		free(avl_tree_del(tree, tree->root->val));
//		tree_trav(tree->root, 0);
	}
	elapsed = clock() - before;
	fprintf(stderr, "deleting: %.3f seconds\n",
		elapsed / CLOCKS_PER_SEC);
//	tree_trav(tree->root, 0);
	return 0;
}
Пример #3
0
bool acceptor(uss_t *srv, uss_connection_t *conn, driver_core_t *core) {
    avl_tree_node_t *atn = avl_tree_add(&core->connection_state, conn->fd);
    driver_core_connection_state_t *s = (driver_core_connection_state_t *)atn->data;

    s->argc = s->args_received = 0;
    s->last_argument_offset = 0;
    s->ussc = conn;

    conn->priv = s;

    unix_socket_server_send(srv, conn, core->greeting, core->greeting_length,
                            (uss_writer_t)writer, core);
    return true;
}
Пример #4
0
/* put process to the end of processes list */
static void put_process_to_list(process_t *process)
{
    unsigned long irqs_state;

    /* acquire lock before touching bookkeeping structures */
    irqs_state = spin_lock_irqsave(&processes_lock);

    /* add item */
    xlist_add_last(&processes_list, &process->procs_list_node);

    /* put process into avl tree */
    if(!avl_tree_add(&processes_tree, process))
      panic("put_process_to_list(): failed to add process into tree!\n");

    /* release lock */
    spin_unlock_irqrstor(&processes_lock, irqs_state);
}