本文整理汇总了C++中mozilla::CeilingLog2Size方法的典型用法代码示例。如果您正苦于以下问题:C++ mozilla::CeilingLog2Size方法的具体用法?C++ mozilla::CeilingLog2Size怎么用?C++ mozilla::CeilingLog2Size使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类mozilla
的用法示例。
在下文中一共展示了mozilla::CeilingLog2Size方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Min
static unsigned
ValToBin(unsigned logscale, uint32_t val)
{
unsigned bin;
if (val <= 1)
return val;
bin = (logscale == 10)
? (unsigned) ceil(log10((double) val))
: (logscale == 2)
? (unsigned) CeilingLog2Size(val)
: val;
return Min(bin, 10U);
}
示例2: while
/*
** Iterate over the entries in the hash table calling func for each
** entry found. Stop if "f" says to (return value & JS_ENUMERATE_STOP).
** Return a count of the number of elements scanned.
*/
int
JS_HashTableEnumerateEntries(JSHashTable *ht, JSHashEnumerator f, void *arg)
{
JSHashEntry *he, **hep, **bucket;
uint32_t nlimit, n, nbuckets, newlog2;
int rv;
nlimit = ht->nentries;
n = 0;
for (bucket = ht->buckets; n != nlimit; ++bucket) {
hep = bucket;
while ((he = *hep) != nullptr) {
JS_ASSERT(n < nlimit);
rv = f(he, n, arg);
n++;
if (rv & HT_ENUMERATE_REMOVE) {
*hep = he->next;
ht->allocOps->freeEntry(ht->allocPriv, he, HT_FREE_ENTRY);
--ht->nentries;
} else {
hep = &he->next;
}
if (rv & HT_ENUMERATE_STOP) {
goto out;
}
}
}
out:
/* Shrink table if removal of entries made it underloaded */
if (ht->nentries != nlimit) {
JS_ASSERT(ht->nentries < nlimit);
nbuckets = NBUCKETS(ht);
if (MINBUCKETS < nbuckets && ht->nentries < UNDERLOADED(nbuckets)) {
newlog2 = CeilingLog2Size(ht->nentries);
if (newlog2 < MINBUCKETSLOG2)
newlog2 = MINBUCKETSLOG2;
/* Check that we really shrink the table. */
JS_ASSERT(JS_HASH_BITS - ht->shift > newlog2);
Resize(ht, JS_HASH_BITS - newlog2);
}
}
return (int)n;
}
示例3: memset
JSHashTable *
JS_NewHashTable(uint32_t n, JSHashFunction keyHash,
JSHashComparator keyCompare, JSHashComparator valueCompare,
const JSHashAllocOps *allocOps, void *allocPriv)
{
JSHashTable *ht;
size_t nb;
if (n <= MINBUCKETS) {
n = MINBUCKETSLOG2;
} else {
n = CeilingLog2Size(n);
if (int32_t(n) < 0)
return nullptr;
}
if (!allocOps) allocOps = &defaultHashAllocOps;
ht = (JSHashTable*) allocOps->allocTable(allocPriv, sizeof *ht);
if (!ht)
return nullptr;
memset(ht, 0, sizeof *ht);
ht->shift = JS_HASH_BITS - n;
n = JS_BIT(n);
nb = n * sizeof(JSHashEntry *);
ht->buckets = (JSHashEntry**) allocOps->allocTable(allocPriv, nb);
if (!ht->buckets) {
allocOps->freeTable(allocPriv, ht, nb);
return nullptr;
}
memset(ht->buckets, 0, nb);
ht->keyHash = keyHash;
ht->keyCompare = keyCompare;
ht->valueCompare = valueCompare;
ht->allocOps = allocOps;
ht->allocPriv = allocPriv;
return ht;
}
示例4: if
void
JS_DumpHistogram(JSBasicStats *bs, FILE *fp)
{
unsigned bin;
uint32_t cnt, max;
double sum, mean;
for (bin = 0, max = 0, sum = 0; bin <= 10; bin++) {
cnt = bs->hist[bin];
if (max < cnt)
max = cnt;
sum += cnt;
}
mean = sum / cnt;
for (bin = 0; bin <= 10; bin++) {
unsigned val = BinToVal(bs->logscale, bin);
unsigned end = (bin == 10) ? 0 : BinToVal(bs->logscale, bin + 1);
cnt = bs->hist[bin];
if (val + 1 == end)
fprintf(fp, " [%6u]", val);
else if (end != 0)
fprintf(fp, "[%6u, %6u]", val, end - 1);
else
fprintf(fp, "[%6u, +inf]", val);
fprintf(fp, ": %8u ", cnt);
if (cnt != 0) {
if (max > 1e6 && mean > 1e3)
cnt = uint32_t(ceil(log10((double) cnt)));
else if (max > 16 && mean > 8)
cnt = CeilingLog2Size(cnt);
for (unsigned i = 0; i < cnt; i++)
putc('*', fp);
}
putc('\n', fp);
}
}