2007-11-29 14:18:54 +00:00
|
|
|
/* -*- mode: C; c-basic-offset: 4 -*- */
|
2008-01-24 15:10:32 +00:00
|
|
|
#ident "Copyright (c) 2007, 2008 Tokutek Inc. All rights reserved."
|
2007-11-29 14:18:54 +00:00
|
|
|
|
2007-11-14 17:58:38 +00:00
|
|
|
#include <arpa/inet.h>
|
|
|
|
#include <assert.h>
|
|
|
|
#include "brt-internal.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, const void *key, int keylen, const void *val, int vallen) {
|
|
|
|
unsigned char type_c = type;
|
|
|
|
return toku_calc_more_crc32_kvpair(toku_crc32(toku_null_crc,
|
|
|
|
&type_c, 1),
|
|
|
|
key, keylen, val, vallen);
|
|
|
|
}
|
|
|
|
|
|
|
|
u_int32_t toku_calccrc32_cmdstruct (BRT_CMD *cmd) {
|
2008-01-02 20:33:51 +00:00
|
|
|
if (cmd->type <= BRT_DELETE_BOTH)
|
2007-11-14 17:58:38 +00:00
|
|
|
return toku_calccrc32_cmd (cmd->type, cmd->u.id.key->data, cmd->u.id.key->size, cmd->u.id.val->data, cmd->u.id.val->size);
|
2008-01-02 20:33:51 +00:00
|
|
|
else
|
|
|
|
assert(0); /* Should not have come here. */
|
2007-11-14 17:58:38 +00:00
|
|
|
}
|