/* -*- mode: C; c-basic-offset: 4 -*- */ #ident "Copyright (c) 2007, 2008 Tokutek Inc. All rights reserved." #include #include "brt-internal.h" #include "toku_assert.h" // Calculate the fingerprint for a kvpair static inline u_int32_t toku_calc_more_crc32_kvpair (u_int32_t crc, const void *key, int keylen, const void *val, int vallen) { int i; i = htonl(keylen); crc = toku_crc32(crc, (void*)&i, 4); crc = toku_crc32(crc, key, keylen); i = htonl(vallen); crc = toku_crc32(crc, (void*)&i, 4); crc = toku_crc32(crc, val, vallen); return crc; } u_int32_t toku_calccrc32_kvpair (const void *key, int keylen, const void *val, int vallen) { return toku_calc_more_crc32_kvpair(toku_null_crc, key, keylen, val, vallen); } u_int32_t toku_calccrc32_cmd (int type, TXNID xid, const void *key, int keylen, const void *val, int vallen) { unsigned char type_c = type; unsigned int a = htonl(xid>>32); unsigned int b = htonl(xid&0xffffffff); return toku_calc_more_crc32_kvpair(toku_crc32(toku_crc32(toku_crc32(toku_null_crc, &type_c, 1), &a, 4), &b, 4), key, keylen, val, vallen); } u_int32_t toku_calccrc32_cmdstruct (BRT_CMD cmd) { if (cmd->type <= BRT_DELETE_BOTH) return toku_calccrc32_cmd (cmd->type, cmd->xid, cmd->u.id.key->data, cmd->u.id.key->size, cmd->u.id.val->data, cmd->u.id.val->size); else { assert(0); /* Should not have come here. */ return 0; } }