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; }
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; }
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; }
/* 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); }