PointerTable.cxx revision 7c478bd95313f5f23a4c958a745db2134aa03244
// Copyright (c) 1994 James Clark
// See the file COPYING for copying permission.
#pragma ident "%Z%%M% %I% %E% SMI"
#ifndef PointerTable_DEF_INCLUDED
#define PointerTable_DEF_INCLUDED 1
#include <stdlib.h>
#ifdef SP_NAMESPACE
namespace SP_NAMESPACE {
#endif
{
}
{
used_ = 0;
usedLimit_ = 0;
}
{
size_t h;
usedLimit_ = 4;
}
else {
if (replace) {
vec_[h] = p;
return tem;
}
else
return vec_[h];
}
if (used_ >= usedLimit_) {
abort(); // FIXME throw an exception
else
}
else {
// rehash
if (oldVec[i] != 0) {
size_t j;
vec_[j] != 0;
j = nextIndex(j))
;
}
;
}
}
}
used_++;
vec_[h] = p;
return 0;
}
{
if (used_ > 0) {
return vec_[i];
}
return null_;
}
{
if (used_ > 0) {
P p = vec_[i];
do {
vec_[i] = P(0);
size_t j = i;
size_t r;
do {
i = nextIndex(i);
if (vec_[i] == 0)
break;
} while ((i <= r && r < j) || (r < j && j < i) || (j < i && i <= r));
} while (vec_[i] != 0);
--used_;
return p;
}
}
return 0;
}
{
usedLimit_ = tem;
}
{
}
{
}
#ifdef SP_NAMESPACE
}
#endif
#endif /* not PointerTable_DEF_INCLUDED */