diff options
author | vitalyisaev <vitalyisaev@ydb.tech> | 2023-11-30 13:26:22 +0300 |
---|---|---|
committer | vitalyisaev <vitalyisaev@ydb.tech> | 2023-11-30 15:44:45 +0300 |
commit | 0a98fece5a9b54f16afeb3a94b3eb3105e9c3962 (patch) | |
tree | 291d72dbd7e9865399f668c84d11ed86fb190bbf /library/python/cityhash/cityhash.pyx | |
parent | cb2c8d75065e5b3c47094067cb4aa407d4813298 (diff) | |
download | ydb-0a98fece5a9b54f16afeb3a94b3eb3105e9c3962.tar.gz |
YQ Connector:Use docker-compose in integrational tests
Diffstat (limited to 'library/python/cityhash/cityhash.pyx')
-rw-r--r-- | library/python/cityhash/cityhash.pyx | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/library/python/cityhash/cityhash.pyx b/library/python/cityhash/cityhash.pyx new file mode 100644 index 0000000000..6f0046f0d7 --- /dev/null +++ b/library/python/cityhash/cityhash.pyx @@ -0,0 +1,75 @@ +from libcpp.pair cimport pair + +cdef extern from "util/system/types.h": + ctypedef unsigned long ui64 + + +cdef extern from "util/digest/city.h": + ui64 CityHash64(const char* buf, size_t len) nogil + pair[ui64, ui64] CityHash128(const char* buf, size_t len) nogil + ui64 CityHash64WithSeed(const char* buf, size_t len, ui64 seed) nogil + + +cdef extern from "library/python/cityhash/hash.h": + ui64 FileCityHash128WithSeedHigh64(const char* fpath) nogil except+ + ui64 FileCityHash64(const char* fpath) nogil except+ + + +def hash64(content): + cdef const char* s = content + cdef size_t size = len(content) + cdef ui64 res = 0 + + if size > 128: + with nogil: + res = CityHash64(s, size) + else: + res = CityHash64(s, size) + + return res + +def hash128(content): + cdef const char* s = content + cdef size_t size = len(content) + cdef pair[ui64, ui64] res = pair[ui64, ui64](0, 0) + + if size > 128: + with nogil: + res = CityHash128(s, size) + else: + res = CityHash128(s, size) + return res + + +def hash64seed(content, seed): + cdef const char* s = content + cdef size_t size = len(content) + cdef ui64 _seed = seed; + + if size > 128: + with nogil: + res = CityHash64WithSeed(s, size, _seed) + else: + res = CityHash64WithSeed(s, size, _seed) + + return res + + +def filehash64(path): + cdef const char* p = path + cdef ui64 res = 0 + + with nogil: + res = FileCityHash64(p) + + return res + + +def filehash128high64(path): + cdef const char* p = path + cdef ui64 res = 0 + + with nogil: + res = FileCityHash128WithSeedHigh64(p) + + return res |