2026-10-01 09:02:16 -05:00 | | | //+------------------------------------------------------------------+
|
| | | //| JsonPathVM.mqh |
|
| | | //| Copyright 2026, Niquel Mendoza. |
|
| | | //| https://www.mql5.com |
|
| | | //+------------------------------------------------------------------+
|
| | | #property copyright "Copyright 2026, Niquel Mendoza."
|
| | | #property link "https://www.mql5.com"
|
| | | #property strict
|
| | |
|
| | | #ifndef JSONPARSERBYLEO_SRC_JSONPATHVM_MQH
|
| | | #define JSONPARSERBYLEO_SRC_JSONPATHVM_MQH
|
| | |
|
| | | //+------------------------------------------------------------------+
|
| | | //| Include |
|
| | | //+------------------------------------------------------------------+
|
| | | //--- maquinaria base
|
| | | #include <TSN\\BSFL\\Query.mqh>
|
| | | //--- backend
|
| | | #include "JsonParser.mqh"
|
| | | //--- utils
|
| | | #include <TSN\\BSFL\\Utils.mqh>
|
| | |
|
| | | //+------------------------------------------------------------------+
|
| | | //| Implementancion de makekeyhash para la VM |
|
| | | //+------------------------------------------------------------------+
|
| | | namespace TSN
|
| | | {
|
| | | //+------------------------------------------------------------------+
|
| | | //| |
|
| | | //+------------------------------------------------------------------+
|
| | | static bool CJsonParser::MakeKeyHashFNV1A64(const uchar &in[], int& i, int len, ulong& hash)
|
| | | {
|
| | | //---
|
| | | hash = 14695981039346656037ULL;
|
| | | for(;; i++) // nota aqui el " se nos garantiza pero igual en uncidoe hay que vertiicar el len
|
| | | {
|
| | | //---
|
| | | const uchar ch = in[i];
|
| | | if(ch == '\\')
|
| | | {
|
| | | const uchar next = g_tsn_table_json_unescape_table[in[++i]];
|
| | | switch(next)
|
| | | {
|
| | | case TSN_TABLE_UNESCAPE_UNICODE:
|
| | | {
|
| | | if(i + 4 >= len)
|
| | | return false;
|
| | |
|
| | | //---
|
| | | DOMBASEULTIS_MAKESTRING_CODE(code, i)
|
| | |
|
| | | //--- Vefificamos low\high surrogate
|
| | | if(code >= 0xD800 && code <= 0xDBFF)
|
| | | {
|
| | | if(i + 6 < len && in[i + 1] == '\\' && in[i + 2] == 'u')
|
| | | {
|
| | | int j = i + 2;
|
| | | DOMBASEULTIS_MAKESTRING_CODE(low, j)
|
| | | //---
|
| | | if(low >= 0xDC00 && low <= 0xDFFF)
|
| | | {
|
| | | DOMBASEULTIS_MKH_ITER(code)
|
| | | DOMBASEULTIS_MKH_ITER(low)
|
| | | i = j;
|
| | | break;
|
| | | }
|
| | | }
|
| | | //---
|
| | | // if(sizeof(TStrict) == JSONUNESCAPE_STRICT)
|
| | | // return def;
|
| | | DOMBASEULTIS_MKH_ITER(0xFFFD)
|
| | | }
|
| | | else
|
| | | if(code >= 0xDC00 && code <= 0xDFFF)
|
| | | {
|
| | | //if(sizeof(TStrict) == JSONUNESCAPE_STRICT)
|
| | | //return def;
|
| | | DOMBASEULTIS_MKH_ITER(0xFFFD)
|
| | | }
|
| | | else
|
| | | {
|
| | | DOMBASEULTIS_MKH_ITER(code)
|
| | | }
|
| | | break;
|
| | | }
|
| | | case TSN_TABLE_UNESCAPE_INVALID:
|
| | | return false;
|
| | | default:
|
| | | DOMBASEULTIS_MKH_ITER(next)
|
| | | break;
|
| | | }
|
| | | continue;
|
| | | }
|
| | | if(ch == '"')
|
2026-10-01 13:36:22 -05:00 | | | {
|
| | | i++; // lo dejamos luego del "
|
2026-10-01 09:02:16 -05:00 | | | return true;
|
2026-10-01 13:36:22 -05:00 | | | }
|
2026-10-01 09:02:16 -05:00 | | |
|
| | | //---
|
| | | DOMBASEULTIS_MKH_ITER(ch)
|
| | | }
|
| | | return true;
|
| | | }
|
| | |
|
| | | //---
|
| | | }
|
| | | #endif // JSONPARSERBYLEO_SRC_JSONPATHVM_MQH
|