pike.git / src / cyclic.c

version» Context lines:

pike.git/src/cyclic.c:14:   static size_t cyclic_hash_func(CYCLIC *c)   {    size_t h;       h = PTR_TO_INT(c->id);    h *= 33;    h ^= PTR_TO_INT(c->a);    h *= 33;    h ^= PTR_TO_INT(c->b);    h *= 33; +  h ^= PTR_TO_INT(c->d); +  h *= 33;    h ^= PTR_TO_INT(c->th);      #if SIZEOF_CHAR_P > 4    h ^= h>>8;   #endif    /* Fold h. This is to retain as many bits of h as possible.    *    * NB: The "magic" constant below has a 1 bit every 10 bits    * starting at the least significant, and is == 1 when    * shifted right 20 bits. Note also that 32 - 20 == 12
pike.git/src/cyclic.c:71:   PMOD_EXPORT void unlink_cyclic(CYCLIC *c)   {    UNSET_ONERROR(c->onerr);    low_unlink_cyclic(c);   }      void *low_begin_cyclic(CYCLIC *c,    char *id,    void *th,    void *a, -  void *b) +  void *b, +  void *d)   {    size_t h;    void *ret = 0;    CYCLIC *p;       c->ret = (void *)(ptrdiff_t)1;    c->a = a;    c->b = b; -  +  c->d = d;    c->id = id;    c->th = th;       h = cyclic_hash_func(c);       for(p=cyclic_hash[h];p;p=p->next)    { -  if(a == p->a && b==p->b && id==p->id && th==p->th) +  if(a == p->a && b==p->b && id==p->id && th==p->th && d==p->d)    {   #ifdef CYCLIC_DEBUG -  fprintf (stderr, "%s: BEGIN_CYCLIC a=%p b=%p: found cycle\n", id, a, b); +  fprintf (stderr, "%s: BEGIN_CYCLIC a=%p b=%p d=%p: found cycle\n", +  id, a, b, d);   #endif    c->ret = ret = p->ret;    break;    }    }       c->next = cyclic_hash[h];    cyclic_hash[h] = c;   #ifdef CYCLIC_DEBUG -  if (!ret) fprintf (stderr, "%s: BEGIN_CYCLIC a=%p b=%p: no cycle\n", id, a, b); +  if (!ret) fprintf (stderr, "%s: BEGIN_CYCLIC a=%p b=%p d=%p: no cycle\n", +  id, a, b, d);   #endif    return ret;   }      PMOD_EXPORT void *begin_cyclic(CYCLIC *c,    char *id,    void *th,    void *a, -  void *b) +  void *b, +  void *d)   { -  void *ret = low_begin_cyclic(c, id, th, a, b); +  void *ret = low_begin_cyclic(c, id, th, a, b, d);    SET_ONERROR(c->onerr, low_unlink_cyclic, c);    return ret;   }