Example #1
0
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);
    }
}
Example #2
0
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;
}
Example #3
0
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;
}
Example #4
0
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;
}
Example #5
0
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;
}
Example #6
0
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;
}
Example #7
0
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;
}
Example #8
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);
}
Example #9
0
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;
}