#include "hash.h"

static unsigned char pearsonTable[HASH_MAX] =
{
    41, 179, 9, 40, 93, 224, 24, 94, 39, 110, 70, 85, 196, 129, 80,
    11, 127, 42, 87, 8, 243, 96, 174, 153, 61, 192, 17, 20, 235, 7, 47,
    222, 53, 216, 101, 112, 44, 139, 109, 233, 108, 57, 240, 229, 160, 219, 251,
    15, 221, 245, 239, 104, 182, 33, 138, 59, 166, 247, 146, 190, 31, 125, 188,
    114, 97, 86, 157, 106, 3, 142, 66, 69, 152, 177, 116, 50, 149, 242, 144,
    28, 29, 95, 37, 2, 117, 246, 65, 183, 206, 241, 230, 131, 13, 145, 63,
    98, 200, 176, 226, 5, 158, 189, 49, 18, 54, 30, 120, 227, 68, 48, 91,
    89, 252, 210, 185, 203, 140, 171, 155, 56, 162, 249, 201, 134, 244, 67, 197,
    148, 248, 82, 100, 34, 90, 236, 51, 167, 178, 207, 193, 164, 225, 218, 147,
    79, 71, 217, 151, 38, 198, 215, 212, 123, 156, 76, 121, 113, 253, 55, 255,
    23, 25, 231, 187, 21, 72, 209, 103, 81, 35, 12, 6, 122, 78, 32, 60,
    92, 14, 202, 83, 128, 195, 135, 223, 211, 181, 84, 0, 119, 173, 165, 234,
    45, 208, 107, 136, 199, 126, 141, 163, 180, 99, 172, 220, 75, 115, 232, 111,
    228, 204, 237, 73, 254, 62, 105, 132, 22, 36, 118, 143, 161, 133, 169, 10,
    52, 186, 184, 170, 77, 205, 137, 124, 238, 16, 159, 250, 191, 74, 27, 130,
    4, 194, 1, 46, 58, 102, 64, 168, 150, 88, 214, 175, 213, 154, 26, 43
};

unsigned char hashCode(const char* dat, unsigned int len)
{
    unsigned char h = 0;
    unsigned int i;
    
    for (i = 0; i < len; i++)
    {
        h = pearsonTable[h ^ dat[i]];
    }
    
    return h;
}
