00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "addHash.h"
00016
00017
00018
00019
00020
00021
00022 size_t AddHash::
00023 add_hash(size_t start, const PN_uint8 *bytes, size_t num_bytes) {
00024 size_t num_words = num_bytes >> 2;
00025 size_t remaining_bytes = num_bytes - (num_words << 2);
00026 size_t hash = (size_t)hashword((const PN_uint32 *)bytes, num_words, (PN_uint32)start);
00027
00028 switch (remaining_bytes) {
00029 case 3:
00030 {
00031 PN_uint32 remaining;
00032 remaining = (bytes[num_bytes - 3] << 16) | (bytes[num_bytes - 2] << 8) | (bytes[num_bytes - 1]);
00033 hash = (size_t)hashword(&remaining, 1, (PN_uint32)hash);
00034 }
00035 break;
00036
00037 case 2:
00038 {
00039 PN_uint32 remaining;
00040 remaining = (bytes[num_bytes - 2] << 8) | (bytes[num_bytes - 1]);
00041 hash = (size_t)hashword(&remaining, 1, (PN_uint32)hash);
00042 }
00043 break;
00044
00045 case 1:
00046 {
00047 PN_uint32 remaining;
00048 remaining = (bytes[num_bytes - 1]);
00049 hash = (size_t)hashword(&remaining, 1, (PN_uint32)hash);
00050 }
00051 break;
00052
00053 default:
00054 break;
00055 }
00056 return hash;
00057 }