//+------------------------------------------------------------------+ //| 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