void vres_file_init() { if (vres_file_stat != FILE_STAT_INIT) { rbtree_new(&vres_file_dtree, vres_file_compare); rbtree_new(&vres_file_ftree, vres_file_compare); pthread_rwlock_init(&vres_file_dlock, NULL); pthread_rwlock_init(&vres_file_flock, NULL); vres_file_stat = FILE_STAT_INIT; vres_file_mkdir(FILE_ROOT_PATH); } }
GPrivate RBTreeP_t urbt_new() { RBTreeP_t pTree = NULL; pTree = rbtree_new(); GCMON_CHECK_NULL(pTree, ERROR); rbtree_set_rbd_combiner(pTree, NULL); rbtree_set_rbd_compare(pTree, urbd_compare); rbtree_set_rbd_free(pTree, urbd_free); ERROR: return pTree; }
void vres_event_init() { int i; if (event_stat & VRES_STAT_INIT) return; for (i = 0; i < VRES_EVENT_GROUP_MAX; i++) { pthread_mutex_init(&event_group[i].mutex, NULL); rbtree_new(&event_group[i].tree, vres_event_compare); } event_stat |= VRES_STAT_INIT; }
void vres_rwlock_init() { int i; if (rwlock_stat & VRES_STAT_INIT) return; for (i = 0; i < VRES_RWLOCK_GROUP_SIZE; i++) { pthread_mutex_init(&rwlock_group[i].mutex, NULL); rbtree_new(&rwlock_group[i].tree, vres_rwlock_compare); } rwlock_stat |= VRES_STAT_INIT; }
static inline vres_file_dir_t *vres_file_alloc_dir(const char *path) { vres_file_dir_t *dir; dir = (vres_file_dir_t *)malloc(sizeof(vres_file_dir_t)); if (!dir) return NULL; dir->d_count = 0; rbtree_new(&dir->d_tree, vres_file_compare); strncpy(dir->d_path, path, FILE_PATH_MAX); pthread_rwlock_init(&dir->d_lock, NULL); return dir; }
void vres_cache_init() { int i; if (cache_stat & VRES_STAT_INIT) return; for (i = 0; i < VRES_CACHE_GROUP_SIZE; i++) { rbtree_new(&cache_group[i].tree, vres_cache_compare); pthread_mutex_init(&cache_group[i].mutex, NULL); INIT_LIST_HEAD(&cache_group[i].list); cache_group[i].count = 0; } cache_stat |= VRES_STAT_INIT; }
int main(int argc, char **argv) { void *rbtree; unsigned i = 0; int c; char buf[256]; if (parse_args(argc, argv) == -1) { usage(); exit(1); } FILE *fp = NULL; if (!infile) { fp = stdin; } else { fp = fopen(infile, "r"); if (!fp) { fprintf(stderr, "Can't open file: %s\n", infile); exit(1); } } rbtree = rbtree_new(key_cmp, free, free); while ((c = fgetc(fp)) != EOF) { if (c == '\n') { buf[i] = '\0'; rbtree_insert(rbtree, strdup(buf), strdup(buf)); memset(buf, 0, sizeof buf); i = 0; } else { buf[i++] = c; } } if (infile) fclose(fp); if (export) { fp = fopen(export, "w"); rbtree_dump(fp, rbtree, key_string); fclose(fp); } if (interactive) { void *node; while (1) { i = 0; memset(buf, 0, sizeof buf); printf("\n> "); while ((c = getc(stdin))) { if (c == EOF || c == '\n') break; if (i >= 256) { printf("buffer exceeded\n"); goto done; } buf[i++] = c; } if (c == EOF) break; if (!*buf) continue; buf[i] = '\0'; char *op = buf; while (*op && *op != ' ') op++; if (*op) { *op = '\0'; op++; } if (strncasecmp(buf, "successor", strlen("successor")) == 0) { node = rbtree_get(rbtree, op); if (node) { void *n2 = rbtree_successor(rbtree, node); if (n2) printf("successor: %s => %s\n", key_string(rbtree_node_key(n2)), (char *)rbtree_node_value(n2)); else printf("no successor\n"); } else { printf("%s (not found)\n", op); } } else if (strncasecmp(buf, "predecessor", strlen("predecessor")) == 0) { node = rbtree_get(rbtree, op); if (node) { void *n2 = rbtree_predecessor(rbtree, node); if (n2) printf("predecessor: %s => %s\n", key_string(rbtree_node_key(n2)), (char *)rbtree_node_value(n2)); else printf("no predecessor\n"); } else { printf("%s (not found)\n", op); } } else { node = rbtree_get(rbtree, buf); if (node) printf("%s => %s\n", key_string(rbtree_node_key(node)), (char *)rbtree_node_value(node)); else printf("%s (not found)\n", buf); } } } done: rbtree_free(rbtree); if (infile) free(infile); if (export) free(export); return 0; }
void services_initialize(void) { service_table = rbtree_new((rbtree_key_compare_func) strcmp, mm_free, (rbtree_key_duplicate_func) strdup, (rbtree_data_free_func) service_free); }
int main(int argc, char **argv) { struct rbtree *t; struct rbtree_node **nodes; int c, i = 0; char buf[256]; if (parse_args(argc, argv) == -1) exit(1); FILE *fp = NULL; if (!infile) { fp = stdin; } else { fp = fopen(infile, "r"); if (!fp) { fprintf(stderr, "Can't open file: %s\n", infile); exit(1); } } t = rbtree_new(); unsigned N = 100; unsigned next = 0; nodes = calloc(100, sizeof *nodes); while ((c = fgetc(fp)) != EOF) { if (c == '\n') { i = 0; if (next >= N) { nodes = realloc(nodes, N*2 * sizeof *nodes); N *= 2; } nodes[next] = calloc(1, sizeof *nodes[next]); nodes[next]->key = jenkins(buf); nodes[next]->ptr = strdup(buf); rbtree_insert(t, nodes[next]); next++; memset(buf, 0, sizeof buf); } else { buf[i++] = c; } } if (infile) fclose(fp); if (export) { fp = fopen(export, "w"); dot_export(t, fp); fclose(fp); } free(nodes); rbtree_free(t); if (infile) free(infile); if (export) free(export); return 0; }