TsnTables/Src/PHash/XXHash/Def.mqh
Nique_372 f86d4d888d
2026-06-27 08:09:50 -05:00

63 lines
No EOL
2.5 KiB
MQL5

//+------------------------------------------------------------------+
//| Def.mqh |
//| Copyright 2026, Niquel Mendoza. |
//| https://www.mql5.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2026, Niquel Mendoza."
#property link "https://www.mql5.com/"
#property strict
#ifndef TSNTABES_SRC_PHASH_XXHASH_DEF_MQH
#define TSNTABES_SRC_PHASH_XXHASH_DEF_MQH
namespace TSN
{
//+------------------------------------------------------------------+
//| Defines |
//+------------------------------------------------------------------+
#define XXH_PRIME64_1 0x9E3779B185EBCA87
/*!< 0b1001111000110111011110011011000110000101111010111100101010000111 */
#define XXH_PRIME64_2 0xC2B2AE3D27D4EB4F
/*!< 0b1100001010110010101011100011110100100111110101001110101101001111 */
#define XXH_PRIME64_3 0x165667B19E3779F9
/*!< 0b0001011001010110011001111011000110011110001101110111100111111001 */
#define XXH_PRIME64_4 0x85EBCA77C2B2AE63
/*!< 0b1000010111101011110010100111011111000010101100101010111001100011 */
#define XXH_PRIME64_5 0x27D4EB2F165667C5
/*!< 0b0010011111010100111010110010111100010110010101100110011111000101 */
//---
#define XXH_GET_64(v,i) (ulong(v[i]) | ulong(v[i+1]) << 8 | ulong(v[i+2]) << 16 | ulong(v[i+3]) << 24 | ulong(v[i+4]) << 32 | ulong(v[i+5]) << 40| ulong(v[i+6]) << 48| ulong(v[i+7]) << 56)
#define XXH_GET_32(v,i) (ulong(v[i]) | ulong(v[i+1]) << 8 | ulong(v[i+2]) << 16 | ulong(v[i+3]) << 24)
//---
#define XXH_rotl32(x,r) (((x) << (r)) | ((x) >> (32 - (r))))
#define XXH_rotl64(x,r) (((x) << (r)) | ((x) >> (64 - (r))))
#define XXH64_round(acc, in, val_name) \
acc += in * XXH_PRIME64_2; \
acc = XXH_rotl64(acc, 31); \
acc *= XXH_PRIME64_1; \
const ulong val_name = acc; \
#define XXH64_round_i(acc, in, val_name) \
acc += in * XXH_PRIME64_2; \
acc = XXH_rotl64(acc, 31); \
acc *= XXH_PRIME64_1; \
val_name = acc; \
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
__forceinline ulong XXH64_MergeRound(ulong acc, ulong val)
{
ulong k = 0;
XXH64_round_i(k, val, val)
acc ^= val;
acc = acc * XXH_PRIME64_1 + XXH_PRIME64_4;
return acc;
}
}
#endif // TSNTABES_SRC_PHASH_XXHASH_DEF_MQH