2026-06-25 17:29:51 -05:00
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| 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 */
|
|
|
|
|
|
|
|
|
|
//---
|
2026-06-27 08:09:50 -05:00
|
|
|
#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)
|
2026-06-25 17:29:51 -05:00
|
|
|
#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
|
|
|
|
|
|