bug fixes

This commit is contained in:
Dennis Eichhorn 2022-11-04 22:57:12 +01:00
parent 9a2c89e12b
commit eb4aa2441c
4 changed files with 100 additions and 97 deletions

View File

@ -13,7 +13,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <mysql.h> #include <mysql/mysql.h>
#include "ConnectionAbstract.h" #include "ConnectionAbstract.h"
#include "DbConnectionConfig.h" #include "DbConnectionConfig.h"
@ -33,7 +33,7 @@ namespace DataStorage {
{ {
this->dbdata = dbdata == NULL ? this->dbdata : *dbdata; this->dbdata = dbdata == NULL ? this->dbdata : *dbdata;
if (this->dbdata.db == NULL if (this->dbdata.db == DatabaseType::UNDEFINED
|| this->dbdata.host == NULL || this->dbdata.host == NULL
|| this->dbdata.port == 0 || this->dbdata.port == 0
|| this->dbdata.database == NULL || this->dbdata.database == NULL

View File

@ -33,7 +33,7 @@ namespace DataStorage {
{ {
this->dbdata = dbdata == NULL ? this->dbdata : *dbdata; this->dbdata = dbdata == NULL ? this->dbdata : *dbdata;
if (this->dbdata.db == NULL if (this->dbdata.db == DatabaseType::UNDEFINED
|| this->dbdata.host == NULL || this->dbdata.host == NULL
|| this->dbdata.port == 0 || this->dbdata.port == 0
|| this->dbdata.database == NULL || this->dbdata.database == NULL

View File

@ -33,7 +33,7 @@ namespace DataStorage {
{ {
this->dbdata = dbdata == NULL ? this->dbdata : *dbdata; this->dbdata = dbdata == NULL ? this->dbdata : *dbdata;
if (this->dbdata.db == NULL if (this->dbdata.db == DatabaseType::UNDEFINED
|| this->dbdata.database == NULL || this->dbdata.database == NULL
) { ) {
this->status = DatabaseStatus::FAILURE; this->status = DatabaseStatus::FAILURE;

View File

@ -115,90 +115,92 @@
#ifndef HASH_MEOW_H #ifndef HASH_MEOW_H
#define HASH_MEOW_H #define HASH_MEOW_H
namespace Hash { // #include <immintrin.h>
namespace Meow {
#define MEOW_HASH_VERSION 5
#define MEOW_HASH_VERSION_NAME "0.5/calico"
#if !defined(meow_u8) #if !defined(meow_u8)
#if _MSC_VER #define MEOW_HASH_VERSION 5
#if !defined(__clang__) #define MEOW_HASH_VERSION_NAME "0.5/calico"
#define INSTRUCTION_REORDER_BARRIER _ReadWriteBarrier()
#else
#endif
#include <intrin.h> #if _MSC_VER
#else #if !defined(__clang__)
#include <x86intrin.h> #define INSTRUCTION_REORDER_BARRIER _ReadWriteBarrier()
#endif #else
#define meow_u8 char unsigned
#define meow_u64 long long unsigned
#define meow_u128 __m128i
#if __x86_64__ || _M_AMD64
#define meow_umm long long unsigned
#define MeowU64From(A, I) (_mm_extract_epi64((A), (I)))
#elif __i386__ || _M_IX86
#define meow_umm int unsigned
#define MeowU64From(A, I) (*(meow_u64 *)&(A))
#else
#error Cannot determine architecture to use!
#endif
#define MeowU32From(A, I) (_mm_extract_epi32((A), (I)))
#define MeowHashesAreEqual(A, B) (_mm_movemask_epi8(_mm_cmpeq_epi8((A), (B))) == 0xFFFF)
#if !defined INSTRUCTION_REORDER_BARRIER
#define INSTRUCTION_REORDER_BARRIER
#endif
#if !defined MEOW_PAGESIZE
#define MEOW_PAGESIZE 4096
#endif
#if !defined MEOW_PREFETCH
#define MEOW_PREFETCH 4096
#endif
#if !defined MEOW_PREFETCH_LIMIT
#define MEOW_PREFETCH_LIMIT 0x3ff
#endif
#endif #endif
#define prefetcht0(A) _mm_prefetch((char *)(A), _MM_HINT_T0) #include <intrin.h>
#define movdqu(A, B) A = _mm_loadu_si128((__m128i *)(B)) #else
#define movdqu_mem(A, B) _mm_storeu_si128((__m128i *)(A), B) #include <x86intrin.h>
#define movq(A, B) A = _mm_set_epi64x(0, B); #endif
#define aesdec(A, B) A = _mm_aesdec_si128(A, B)
#define pshufb(A, B) A = _mm_shuffle_epi8(A, B)
#define pxor(A, B) A = _mm_xor_si128(A, B)
#define paddq(A, B) A = _mm_add_epi64(A, B)
#define pand(A, B) A = _mm_and_si128(A, B)
#define palignr(A, B, i) A = _mm_alignr_epi8(A, B, i)
#define pxor_clear(A, B) A = _mm_setzero_si128(); // NOTE(casey): pxor_clear is a nonsense thing that is only here because compilers don't detect xor(a, a) is clearing a :(
#define MEOW_MIX_REG(r1, r2, r3, r4, r5, i1, i2, i3, i4) \ #define meow_u8 char unsigned
aesdec(r1, r2); \ #define meow_u64 long long unsigned
INSTRUCTION_REORDER_BARRIER; \ #define meow_u128 __m128i
paddq(r3, i1); \
pxor(r2, i2); \
aesdec(r2, r4); \
INSTRUCTION_REORDER_BARRIER; \
paddq(r5, i3); \
pxor(r4, i4);
#define MEOW_MIX(r1, r2, r3, r4, r5, ptr) \ #if __x86_64__ || _M_AMD64
MEOW_MIX_REG(r1, r2, r3, r4, r5, _mm_loadu_si128( (__m128i *) ((ptr) + 15) ), _mm_loadu_si128( (__m128i *) ((ptr) + 0) ), _mm_loadu_si128( (__m128i *) ((ptr) + 1) ), _mm_loadu_si128( (__m128i *) ((ptr) + 16) )) #define meow_umm long long unsigned
#define MeowU64From(A, I) (_mm_extract_epi64((A), (I)))
#elif __i386__ || _M_IX86
#define meow_umm int unsigned
#define MeowU64From(A, I) (*(meow_u64 *)&(A))
#else
#error Cannot determine architecture to use!
#endif
#define MEOW_SHUFFLE(r1, r2, r3, r4, r5, r6) \ #define MeowU32From(A, I) (_mm_extract_epi32((A), (I)))
aesdec(r1, r4); \ #define MeowHashesAreEqual(A, B) (_mm_movemask_epi8(_mm_cmpeq_epi8((A), (B))) == 0xFFFF)
paddq(r2, r5); \
pxor(r4, r6); \
aesdec(r4, r2); \
paddq(r5, r6); \
pxor(r2, r3)
#if !defined INSTRUCTION_REORDER_BARRIER
#define INSTRUCTION_REORDER_BARRIER
#endif
#if !defined MEOW_PAGESIZE
#define MEOW_PAGESIZE 4096
#endif
#if !defined MEOW_PREFETCH
#define MEOW_PREFETCH 4096
#endif
#if !defined MEOW_PREFETCH_LIMIT
#define MEOW_PREFETCH_LIMIT 0x3ff
#endif
#define prefetcht0(A) _mm_prefetch((char *)(A), _MM_HINT_T0)
#define movdqu(A, B) A = _mm_loadu_si128((__m128i *)(B))
#define movdqu_mem(A, B) _mm_storeu_si128((__m128i *)(A), B)
#define movq(A, B) A = _mm_set_epi64x(0, B);
#define aesdec(A, B) A = _mm_aesdec_si128(A, B)
#define pshufb(A, B) A = _mm_shuffle_epi8(A, B)
#define pxor(A, B) A = _mm_xor_si128(A, B)
#define paddq(A, B) A = _mm_add_epi64(A, B)
#define pand(A, B) A = _mm_and_si128(A, B)
#define palignr(A, B, i) A = _mm_alignr_epi8(A, B, i)
#define pxor_clear(A, B) A = _mm_setzero_si128(); // NOTE(casey): pxor_clear is a nonsense thing that is only here because compilers don't detect xor(a, a) is clearing a :(
#define MEOW_MIX_REG(r1, r2, r3, r4, r5, i1, i2, i3, i4) \
aesdec(r1, r2); \
INSTRUCTION_REORDER_BARRIER; \
paddq(r3, i1); \
pxor(r2, i2); \
aesdec(r2, r4); \
INSTRUCTION_REORDER_BARRIER; \
paddq(r5, i3); \
pxor(r4, i4);
#define MEOW_MIX(r1, r2, r3, r4, r5, ptr) \
MEOW_MIX_REG(r1, r2, r3, r4, r5, _mm_loadu_si128( (__m128i *) ((ptr) + 15) ), _mm_loadu_si128( (__m128i *) ((ptr) + 0) ), _mm_loadu_si128( (__m128i *) ((ptr) + 1) ), _mm_loadu_si128( (__m128i *) ((ptr) + 16) ))
#define MEOW_SHUFFLE(r1, r2, r3, r4, r5, r6) \
aesdec(r1, r4); \
paddq(r2, r5); \
pxor(r4, r6); \
aesdec(r4, r2); \
paddq(r5, r6); \
pxor(r2, r3)
#endif
namespace Hash {
namespace Meow {
#if MEOW_DUMP #if MEOW_DUMP
struct meow_dump struct meow_dump
{ {
@ -700,23 +702,6 @@ namespace Hash {
return(xmm0); return(xmm0);
} }
#undef INSTRUCTION_REORDER_BARRIER
#undef prefetcht0
#undef movdqu
#undef movdqu_mem
#undef movq
#undef aesdec
#undef pshufb
#undef pxor
#undef paddq
#undef pand
#undef palignr
#undef pxor_clear
#undef MEOW_MIX
#undef MEOW_MIX_REG
#undef MEOW_SHUFFLE
#undef MEOW_DUMP_STATE
// //
// NOTE(casey): If you need to create your own seed from non-random data, you can use MeowExpandSeed // NOTE(casey): If you need to create your own seed from non-random data, you can use MeowExpandSeed
// to create a seed which you then store for repeated use. It is _expensive_ to generate the seed, // to create a seed which you then store for repeated use. It is _expensive_ to generate the seed,
@ -741,4 +726,22 @@ namespace Hash {
} }
} }
} }
#undef INSTRUCTION_REORDER_BARRIER
#undef prefetcht0
#undef movdqu
#undef movdqu_mem
#undef movq
#undef aesdec
#undef pshufb
#undef pxor
#undef paddq
#undef pand
#undef palignr
#undef pxor_clear
#undef MEOW_MIX
#undef MEOW_MIX_REG
#undef MEOW_SHUFFLE
#undef MEOW_DUMP_STATE
#endif #endif