mirror of
https://github.com/postgres/postgres.git
synced 2025-12-16 16:42:29 +03:00
Modify various power 2 calculations to use new helper functions
First pass of modifying various places that obtain the next power of 2 of a number and make them use the new functions added in pg_bitutils.h instead. This also removes the _hash_log2() function. There are no longer any callers in core. Other users can swap their _hash_log2(n) call to make use of pg_ceil_log2_32(n). Author: David Fetter, with some minor adjustments by me Reviewed-by: John Naylor, Jesse Zhang Discussion: https://postgr.es/m/20200114173553.GE32763%40fetter.org
This commit is contained in:
@@ -57,6 +57,8 @@
|
||||
* backwards, unless they're empty or already at their optimal position.
|
||||
*/
|
||||
|
||||
#include "port/pg_bitutils.h"
|
||||
|
||||
/* helpers */
|
||||
#define SH_MAKE_PREFIX(a) CppConcat(a,_)
|
||||
#define SH_MAKE_NAME(name) SH_MAKE_NAME_(SH_MAKE_PREFIX(SH_PREFIX),name)
|
||||
@@ -215,27 +217,6 @@ SH_SCOPE void SH_STAT(SH_TYPE * tb);
|
||||
#ifndef SIMPLEHASH_H
|
||||
#define SIMPLEHASH_H
|
||||
|
||||
/* FIXME: can we move these to a central location? */
|
||||
|
||||
/* calculate ceil(log base 2) of num */
|
||||
static inline uint64
|
||||
sh_log2(uint64 num)
|
||||
{
|
||||
int i;
|
||||
uint64 limit;
|
||||
|
||||
for (i = 0, limit = 1; limit < num; i++, limit <<= 1)
|
||||
;
|
||||
return i;
|
||||
}
|
||||
|
||||
/* calculate first power of 2 >= num */
|
||||
static inline uint64
|
||||
sh_pow2(uint64 num)
|
||||
{
|
||||
return ((uint64) 1) << sh_log2(num);
|
||||
}
|
||||
|
||||
#ifdef FRONTEND
|
||||
#define sh_error(...) pg_log_error(__VA_ARGS__)
|
||||
#define sh_log(...) pg_log_info(__VA_ARGS__)
|
||||
@@ -259,7 +240,7 @@ SH_COMPUTE_PARAMETERS(SH_TYPE * tb, uint32 newsize)
|
||||
size = Max(newsize, 2);
|
||||
|
||||
/* round up size to the next power of 2, that's how bucketing works */
|
||||
size = sh_pow2(size);
|
||||
size = pg_nextpower2_64(size);
|
||||
Assert(size <= SH_MAX_SIZE);
|
||||
|
||||
/*
|
||||
@@ -434,7 +415,7 @@ SH_GROW(SH_TYPE * tb, uint32 newsize)
|
||||
uint32 startelem = 0;
|
||||
uint32 copyelem;
|
||||
|
||||
Assert(oldsize == sh_pow2(oldsize));
|
||||
Assert(oldsize == pg_nextpower2_64(oldsize));
|
||||
Assert(oldsize != SH_MAX_SIZE);
|
||||
Assert(oldsize < newsize);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user