X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fpointer-set.c;h=266cccfef8aa2627f9321b3953b2a3fbd1a8e942;hb=9bc610b610152b60bbcdd789e96b72b1392035c3;hp=3f79cc2bfa746b8c575ca45a3fa60c0fdc743db6;hpb=2e52b721bc652c06e3d3b9e6b58dfbb53698e58d;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/pointer-set.c b/gcc/pointer-set.c index 3f79cc2bfa7..266cccfef8a 100644 --- a/gcc/pointer-set.c +++ b/gcc/pointer-set.c @@ -90,6 +90,29 @@ void pointer_set_destroy (struct pointer_set_t *pset) XDELETE (pset); } +/* Returns nonzero if PSET contains P. P must be nonnull. + + Collisions are resolved by linear probing. */ +int +pointer_set_contains (struct pointer_set_t *pset, void *p) +{ + size_t n = hash1 (p, pset->n_slots, pset->log_slots); + + while (true) + { + if (pset->slots[n] == p) + return 1; + else if (pset->slots[n] == 0) + return 0; + else + { + ++n; + if (n == pset->n_slots) + n = 0; + } + } +} + /* Subroutine of pointer_set_insert. Inserts P into an empty element of SLOTS, an array of length N_SLOTS. Returns nonzero if P was already present in N_SLOTS. */