コード例 #1
0
ファイル: hash.c プロジェクト: rafl/4store
fs_rid fs_hash_uri(const char *str)
{
    uint64_t top;

    if (!str) {
        return 0;
    }
    if (strncmp(str, "bnode:b", 7) == 0) {
	fs_rid bnode_id = strtoll(str+7, NULL, 16);
	if (!bnode_id) {
	    return FS_RID_GONE;
	}

	return FS_NUM_BNODE(bnode_id);
    } else if (strncmp(str, "_:b", 3) == 0) {
	fs_rid bnode_id = strtoll(str+3, NULL, 16);
	if (!bnode_id) {
	    return FS_RID_GONE;
	}

	return FS_NUM_BNODE(bnode_id);
    } else if (!isalpha(str[0])) {
        return FS_RID_GONE;
    }

    top = umac_wrapper(str, 0);
    top |= 0xC000000000000000LL;

    return top;
}
コード例 #2
0
ファイル: filter.c プロジェクト: dajobe/4store
fs_value fn_bnode(fs_query *q, fs_value a)
{
    a = fs_value_fill_rid(q, a);
    /* scramble the RID number a bit */
    fs_value b = fs_value_blank();
    b.rid = a.rid + q->block * 39916801;
    b.rid += q->row;
    b.rid += FS_NUM_BNODE(a.rid & ~0xC000000000000000LL);
    b.valid = fs_valid_bit(FS_V_RID);
    b.attr = FS_RID_NULL;

    return b;
}