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