Hi.

I wrote a small hashlib for C. Because I'm new to hashes I looked at pythons 
implementation and 
reused *some* of the code... or more the mathematical "hash-function", not 
really the code.

In particular I looked at pythons hash and lookup functions, so I came up with 
this (see the code 
underneath).

So, can this code be considered as derived and do I have to put my code under 
the GPL? I'd like to 
publish it under something less restrictive, like a BSD style license. But if 
GPL is the only way, 
then GPL it is. :)

        -panzi


#define PERTURB_SHIFT 5

static ENTRY_T * lookup(CONTAINER_T * table, hash_const_str_t key,
  int (*loop_cond)(ENTRY_T * ptr, hash_const_str_t key)) {
        register ENTRY_T *   entries = table->entries;
        register hash_size_t size    = table->size;
        register hash_size_t pos     = hash(key) % size;
        register hash_size_t perturb = pos;
        
        register ENTRY_T * ptr = entries + pos;

        while(loop_cond(ptr,key)) {
                pos       = ((pos << 2) + pos + perturb + 1) % size;
                perturb >>= PERTURB_SHIFT;
                                
                ptr = entries + pos;
                
#ifdef HASH_COUNT_COLLISIONS
                ++ table->collisions;
#endif
        }
        
        return ptr;
}

hash_t hash(register hash_const_str_t str) {
/* python 2.5's hash function: */
        register hash_size_t len;
        register hash_t      h;
        
        assert(str);
        
        len = strlen(str);
        h   = *str << 7;
        
        while (*str)
                h = (1000003 * h) ^ *str ++;
        h ^= len;
        
        return h;
}
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to