mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-24 16:42:05 +00:00
Move contrib/libpcg-random → base/pcg-random
This commit is contained in:
parent
210a829774
commit
910ab8a265
@ -3,8 +3,9 @@ if (USE_CLANG_TIDY)
|
|||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
add_subdirectory (common)
|
add_subdirectory (common)
|
||||||
add_subdirectory (loggers)
|
|
||||||
add_subdirectory (daemon)
|
add_subdirectory (daemon)
|
||||||
|
add_subdirectory (loggers)
|
||||||
|
add_subdirectory (pcg-random)
|
||||||
|
|
||||||
if (USE_MYSQL)
|
if (USE_MYSQL)
|
||||||
add_subdirectory (mysqlxx)
|
add_subdirectory (mysqlxx)
|
||||||
|
2
base/pcg-random/CMakeLists.txt
Normal file
2
base/pcg-random/CMakeLists.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
add_library(pcg_random INTERFACE)
|
||||||
|
target_include_directories(pcg_random INTERFACE .)
|
@ -292,7 +292,7 @@ inline itype rotl(itype value, bitcount_t rot)
|
|||||||
{
|
{
|
||||||
constexpr bitcount_t bits = sizeof(itype) * 8;
|
constexpr bitcount_t bits = sizeof(itype) * 8;
|
||||||
constexpr bitcount_t mask = bits - 1;
|
constexpr bitcount_t mask = bits - 1;
|
||||||
#if PCG_USE_ZEROCHECK_ROTATE_IDIOM
|
#if defined(PCG_USE_ZEROCHECK_ROTATE_IDIOM)
|
||||||
return rot ? (value << rot) | (value >> (bits - rot)) : value;
|
return rot ? (value << rot) | (value >> (bits - rot)) : value;
|
||||||
#else
|
#else
|
||||||
return (value << rot) | (value >> ((- rot) & mask));
|
return (value << rot) | (value >> ((- rot) & mask));
|
||||||
@ -304,7 +304,7 @@ inline itype rotr(itype value, bitcount_t rot)
|
|||||||
{
|
{
|
||||||
constexpr bitcount_t bits = sizeof(itype) * 8;
|
constexpr bitcount_t bits = sizeof(itype) * 8;
|
||||||
constexpr bitcount_t mask = bits - 1;
|
constexpr bitcount_t mask = bits - 1;
|
||||||
#if PCG_USE_ZEROCHECK_ROTATE_IDIOM
|
#if defined(PCG_USE_ZEROCHECK_ROTATE_IDIOM)
|
||||||
return rot ? (value >> rot) | (value << (bits - rot)) : value;
|
return rot ? (value >> rot) | (value << (bits - rot)) : value;
|
||||||
#else
|
#else
|
||||||
return (value >> rot) | (value << ((- rot) & mask));
|
return (value >> rot) | (value << ((- rot) & mask));
|
||||||
@ -318,7 +318,7 @@ inline itype rotr(itype value, bitcount_t rot)
|
|||||||
*
|
*
|
||||||
* These overloads will be preferred over the general template code above.
|
* These overloads will be preferred over the general template code above.
|
||||||
*/
|
*/
|
||||||
#if PCG_USE_INLINE_ASM && __GNUC__ && (__x86_64__ || __i386__)
|
#if defined(PCG_USE_INLINE_ASM) && __GNUC__ && (__x86_64__ || __i386__)
|
||||||
|
|
||||||
inline uint8_t rotr(uint8_t value, bitcount_t rot)
|
inline uint8_t rotr(uint8_t value, bitcount_t rot)
|
||||||
{
|
{
|
||||||
@ -600,7 +600,7 @@ std::ostream& operator<<(std::ostream& out, printable_typename<T>) {
|
|||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
int status;
|
int status;
|
||||||
char* pretty_name =
|
char* pretty_name =
|
||||||
abi::__cxa_demangle(implementation_typename, NULL, NULL, &status);
|
abi::__cxa_demangle(implementation_typename, nullptr, nullptr, &status);
|
||||||
if (status == 0)
|
if (status == 0)
|
||||||
out << pretty_name;
|
out << pretty_name;
|
||||||
free(static_cast<void*>(pretty_name));
|
free(static_cast<void*>(pretty_name));
|
@ -2,4 +2,3 @@ set(DIVIDE_INCLUDE_DIR ${ClickHouse_SOURCE_DIR}/contrib/libdivide)
|
|||||||
set(DBMS_INCLUDE_DIR ${ClickHouse_SOURCE_DIR}/src ${ClickHouse_BINARY_DIR}/src)
|
set(DBMS_INCLUDE_DIR ${ClickHouse_SOURCE_DIR}/src ${ClickHouse_BINARY_DIR}/src)
|
||||||
set(DOUBLE_CONVERSION_CONTRIB_INCLUDE_DIR ${ClickHouse_SOURCE_DIR}/contrib/double-conversion)
|
set(DOUBLE_CONVERSION_CONTRIB_INCLUDE_DIR ${ClickHouse_SOURCE_DIR}/contrib/double-conversion)
|
||||||
set(METROHASH_CONTRIB_INCLUDE_DIR ${ClickHouse_SOURCE_DIR}/contrib/libmetrohash/src)
|
set(METROHASH_CONTRIB_INCLUDE_DIR ${ClickHouse_SOURCE_DIR}/contrib/libmetrohash/src)
|
||||||
set(PCG_RANDOM_INCLUDE_DIR ${ClickHouse_SOURCE_DIR}/contrib/libpcg-random/include)
|
|
||||||
|
@ -1,52 +0,0 @@
|
|||||||
# PCG Random Number Generation, C++ Edition
|
|
||||||
|
|
||||||
[PCG-Random website]: http://www.pcg-random.org
|
|
||||||
|
|
||||||
This code provides an implementation of the PCG family of random number
|
|
||||||
generators, which are fast, statistically excellent, and offer a number of
|
|
||||||
useful features.
|
|
||||||
|
|
||||||
Full details can be found at the [PCG-Random website]. This version
|
|
||||||
of the code provides many family members -- if you just want one
|
|
||||||
simple generator, you may prefer the minimal C version of the library.
|
|
||||||
|
|
||||||
There are two kinds of generator, normal generators and extended generators.
|
|
||||||
Extended generators provide *k* dimensional equidistribution and can perform
|
|
||||||
party tricks, but generally speaking most people only need the normal
|
|
||||||
generators.
|
|
||||||
|
|
||||||
There are two ways to access the generators, using a convenience typedef
|
|
||||||
or by using the underlying templates directly (similar to C++11's `std::mt19937` typedef vs its `std::mersenne_twister_engine` template). For most users, the convenience typedef is what you want, and probably you're fine with `pcg32` for 32-bit numbers. If you want 64-bit numbers, either use `pcg64` (or, if you're on a 32-bit system, making 64 bits from two calls to `pcg32_k2` may be faster).
|
|
||||||
|
|
||||||
## Documentation and Examples
|
|
||||||
|
|
||||||
Visit [PCG-Random website] for information on how to use this library, or look
|
|
||||||
at the sample code in the `sample` directory -- hopefully it should be fairly
|
|
||||||
self explanatory.
|
|
||||||
|
|
||||||
## Building
|
|
||||||
|
|
||||||
The code is written in C++11, as an include-only library (i.e., there is
|
|
||||||
nothing you need to build). There are some provided demo programs and tests
|
|
||||||
however. On a Unix-style system (e.g., Linux, Mac OS X) you should be able
|
|
||||||
to just type
|
|
||||||
|
|
||||||
make
|
|
||||||
|
|
||||||
To build the demo programs.
|
|
||||||
|
|
||||||
## Testing
|
|
||||||
|
|
||||||
Run
|
|
||||||
|
|
||||||
make test
|
|
||||||
|
|
||||||
## Directory Structure
|
|
||||||
|
|
||||||
The directories are arranged as follows:
|
|
||||||
|
|
||||||
* `include` -- contains `pcg_random.hpp` and supporting include files
|
|
||||||
* `test-high` -- test code for the high-level API where the functions have
|
|
||||||
shorter, less scary-looking names.
|
|
||||||
* `sample` -- sample code, some similar to the code in `test-high` but more
|
|
||||||
human readable, some other examples too
|
|
@ -1,6 +1,5 @@
|
|||||||
set(CLICKHOUSE_BENCHMARK_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/Benchmark.cpp)
|
set(CLICKHOUSE_BENCHMARK_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/Benchmark.cpp)
|
||||||
set(CLICKHOUSE_BENCHMARK_LINK PRIVATE dbms clickhouse_aggregate_functions clickhouse_common_config ${Boost_PROGRAM_OPTIONS_LIBRARY})
|
set(CLICKHOUSE_BENCHMARK_LINK PRIVATE dbms clickhouse_aggregate_functions clickhouse_common_config ${Boost_PROGRAM_OPTIONS_LIBRARY})
|
||||||
set(CLICKHOUSE_BENCHMARK_INCLUDE SYSTEM PRIVATE ${PCG_RANDOM_INCLUDE_DIR})
|
|
||||||
|
|
||||||
clickhouse_program_add(benchmark)
|
clickhouse_program_add(benchmark)
|
||||||
|
|
||||||
|
@ -12,6 +12,6 @@ set(CLICKHOUSE_COPIER_LINK PRIVATE
|
|||||||
clickhouse_dictionaries
|
clickhouse_dictionaries
|
||||||
string_utils ${Poco_XML_LIBRARY} PUBLIC daemon)
|
string_utils ${Poco_XML_LIBRARY} PUBLIC daemon)
|
||||||
|
|
||||||
set(CLICKHOUSE_COPIER_INCLUDE SYSTEM PRIVATE ${PCG_RANDOM_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
|
set(CLICKHOUSE_COPIER_INCLUDE SYSTEM PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
|
||||||
clickhouse_program_add(copier)
|
clickhouse_program_add(copier)
|
||||||
|
@ -398,6 +398,7 @@ endif()
|
|||||||
target_link_libraries(clickhouse_common_io
|
target_link_libraries(clickhouse_common_io
|
||||||
PUBLIC
|
PUBLIC
|
||||||
${CITYHASH_LIBRARIES}
|
${CITYHASH_LIBRARIES}
|
||||||
|
pcg_random
|
||||||
PRIVATE
|
PRIVATE
|
||||||
${Poco_XML_LIBRARY}
|
${Poco_XML_LIBRARY}
|
||||||
${ZLIB_LIBRARIES}
|
${ZLIB_LIBRARIES}
|
||||||
@ -453,9 +454,6 @@ dbms_target_link_libraries (
|
|||||||
target_include_directories(clickhouse_common_io PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/Core/include) # uses some includes from core
|
target_include_directories(clickhouse_common_io PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/Core/include) # uses some includes from core
|
||||||
dbms_target_include_directories(PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/Core/include)
|
dbms_target_include_directories(PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/Core/include)
|
||||||
|
|
||||||
target_include_directories(clickhouse_common_io SYSTEM PUBLIC ${PCG_RANDOM_INCLUDE_DIR})
|
|
||||||
dbms_target_include_directories(SYSTEM PUBLIC ${PCG_RANDOM_INCLUDE_DIR})
|
|
||||||
|
|
||||||
dbms_target_include_directories(SYSTEM BEFORE PUBLIC ${PDQSORT_INCLUDE_DIR})
|
dbms_target_include_directories(SYSTEM BEFORE PUBLIC ${PDQSORT_INCLUDE_DIR})
|
||||||
|
|
||||||
if (NOT USE_INTERNAL_LZ4_LIBRARY AND LZ4_INCLUDE_DIR)
|
if (NOT USE_INTERNAL_LZ4_LIBRARY AND LZ4_INCLUDE_DIR)
|
||||||
|
Loading…
Reference in New Issue
Block a user