//+------------------------------------------------------------------+ //| 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 //--- backend #include "JsonParser.mqh" //--- utils #include //+------------------------------------------------------------------+ //| 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 == '"') { i++; // lo dejamos luego del " return true; } //--- DOMBASEULTIS_MKH_ITER(ch) } return true; } //--- } #endif // JSONPARSERBYLEO_SRC_JSONPATHVM_MQH