コード例 #1
0
ファイル: main.c プロジェクト: cumirror/url_filter
void algorithm_init(struct md5_table *md5)
{
    uint32_t i;

    if (hash_init(md5->num) != 0) {
        printf("hash init failed\n");
        exit(1);
    }

    for (i = 0; i < md5->num; i++)
        hash_put((uint8_t *)(md5->key + i), i);

    hash_dump();

    if (cuckoo_filter_init(md5) != 0) {
        printf("cuckoo init failed\n");
        exit(1);
    }

    for (i = 0; i < md5->num; i++)
        cuckoo_filter_put((uint8_t *)(md5->key + i), &i);

    cuckoo_filter_dump();

    if (bloom_filter_init(2500000) != 0) {
        printf("bloom init failed\n");
        exit(1);
    }

    for (i = 0; i < md5->num; i++)
        bloom_filter_put((uint8_t *)(md5->key + i));

    bloom_filter_dump();

}
コード例 #2
0
ファイル: nvrom_test.c プロジェクト: rookieINc/CuckooFilter
int main(int argc, char **argv)
{
        SHA_CTX c;
        struct stat st;
        uint32_t key_num;
        uint8_t *keys;
        uint8_t **sha1_key;
        uint8_t value[DAT_LEN], *v;
        int bytes, i, j;
        FILE *f1, *f2;

        if (argc < 3) {
                fprintf(stderr, "usage: ./cuckoo_filter read_file write_file\n");
                exit(-1);
        }

        --argc;
        ++argv;

        f1 = fopen(argv[0], "rb");
        if (f1 == NULL) {
                fprintf(stderr, "Fail to open %s!\n", argv[0]);
                exit(-1);
        }
        stat(argv[0], &st);

        f2 = fopen(argv[1], "wb+");
        if (f2 == NULL) {
                fprintf(stderr, "Fail to open %s!\n", argv[1]);
                exit(-1);
        }

        /* Initialization */
        cuckoo_filter_init(st.st_size);

        /* Allocate SHA1 key space */
        key_num = next_pow_of_2(st.st_size) / DAT_LEN;
        keys = malloc(key_num * 20);
        sha1_key = malloc(key_num * sizeof(void *));
        if (!keys || !sha1_key) {
                fprintf(stderr, "Out of memory!\n");
                exit(-1);
        }
        for (i = 0; i < key_num; i++) {
                sha1_key[i] = keys + i * 20;
        }

        /* Put read_file into log on flash. */
        i = 0;
        do {
                memset(value, 0, DAT_LEN);
                bytes = fread(value, 1, DAT_LEN, f1);
                SHA1_Init(&c);
                SHA1_Update(&c, value, bytes);
                SHA1_Final(sha1_key[i], &c);
                cuckoo_filter_put(sha1_key[i], value);
                i++;
        } while (bytes == DAT_LEN);

        /* Real key number */
        key_num = i;
        printf("Total %u records.\n", key_num);

        /* Deletion test */
        for (i = 0; i < key_num; i += 2) {
                cuckoo_filter_put(sha1_key[i], NULL);
        }
        for (i = 0; i < key_num; i++) {
                memset(value, 0, DAT_LEN);
                bytes = fread(value, 1, DAT_LEN, f1);
                if (!(i & 0x1)) {
                        cuckoo_filter_put(sha1_key[i], value);
                }
        }

        /* Get logs on flash and write them into a new file. */
        for (j = 0; j < key_num; j++) {
                v = cuckoo_filter_get(sha1_key[j]);
                if (v != NULL) {
                        memcpy(value, v, DAT_LEN);
                        fwrite(value, 1, DAT_LEN, f2);
                }
        }

        fclose(f1);
        fclose(f2);

        return 0;
}