SimPHash/Src/Random/X256.mqh
Nique_372 ae3f0a3b69
2026-06-26 22:13:05 -05:00

97 lines
2.4 KiB
MQL5

//+------------------------------------------------------------------+
//| X256.mqh |
//| Copyright 2026, Niquel Mendoza. |
//| https://www.mql5.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2026, Niquel Mendoza."
#property link "https://www.mql5.com/"
#property strict
#ifndef SIMPHASH_SRC_RANDOM_X256_MQH
#define SIMPHASH_SRC_RANDOM_X256_MQH
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#include "Def.mqh"
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
namespace TSN
{
class CRandomX256 : public IRandomGenerator
{
private:
Xoshiro256 m_random;
public:
CRandomX256(void) {}
~CRandomX256(void) {}
//---
bool Init(CYmlNode& node) override final
{
//---
CYmlNode seed = node["seed"];
//---
if(seed.IsObject())
{
if(seed.Size() < 4)
{
LogError("Seed debe tener minimo 4 key-value", FUNCION_ACTUAL);
return false;
}
//---
CYmlIteratorObj it = seed.BeginObj();
ulong data[4];
//---
while(it.IsValid())
{
//---
const ulong v = ulong(it.Val().ToInt(0));
switch(it.Key()[0])
{
case 'a':
data[0] = v;
break;
case 'b':
data[1] = v;
break;
case 'c':
data[2] = v;
break;
case 'd':
data[3] = v;
break;
}
//---
it.Next();
}
//---
m_random.Seed(data[0], data[1], data[2], data[3]);
}
else
{
m_random.Seed(ulong(seed.ToInt(100)));
}
//---
return true;
}
//---
ulong Generate() override final
{
return m_random.RandomUlong();
}
};
}
//+------------------------------------------------------------------+
#endif // SIMPHASH_SRC_RANDOM_X256_MQH