static void test_raw_40(uint64_t value, const uint8_t expected[8]) { union { raw_40 raw; uint8_t bytes[8]; } data; memset(&data, 0, sizeof(data)); data.raw = encode_raw40(value); assert(memcmp(data.bytes, expected, 8) == 0); assert(decode_raw40(data.raw) == value); }
LIBCOUCHSTORE_API couchstore_error_t couchstore_db_info(Db *db, DbInfo* dbinfo) { const node_pointer *id_root = db->header.by_id_root; const node_pointer *seq_root = db->header.by_seq_root; const node_pointer *local_root = db->header.local_docs_root; dbinfo->filename = db->file.path; dbinfo->header_position = db->header.position; dbinfo->last_sequence = db->header.update_seq; dbinfo->deleted_count = dbinfo->doc_count = dbinfo->space_used = 0; if (id_root) { raw_by_id_reduce* id_reduce = (raw_by_id_reduce*) id_root->reduce_value.buf; dbinfo->doc_count = decode_raw40(id_reduce->notdeleted); dbinfo->deleted_count = decode_raw40(id_reduce->deleted); dbinfo->space_used = decode_raw48(id_reduce->size); dbinfo->space_used += id_root->subtreesize; } if(seq_root) { dbinfo->space_used += seq_root->subtreesize; } if(local_root) { dbinfo->space_used += local_root->subtreesize; } return COUCHSTORE_SUCCESS; }