2026-06-26 12:44:41 -05:00 | | | //+------------------------------------------------------------------+
|
| | | //| 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
|
| | | {
|
2026-06-26 22:13:05 -05:00 | | | //---
|
2026-06-26 12:44:41 -05:00 | | | 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();
|
| | | }
|
| | | };
|
| | | }
|
| | | //+------------------------------------------------------------------+
|
2026-06-26 22:13:05 -05:00 | | | #endif // SIMPHASH_SRC_RANDOM_X256_MQH
|