JsonParserByLeo/Src/JsonUtils/JsomMinify.mqh

114 lines
3.5 KiB
MQL5

2026-10-14 11:06:07 -05:00
//+------------------------------------------------------------------+
//| JsomMinify.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_JSONUTILS_JSONMINIFY_MQH
#define JSONPARSERBYLEO_SRC_JSONUTILS_JSONMINIFY_MQH
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#include "..\\JsonCore\\JsonDefines.mqh"
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
namespace TSN
{
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#define JSONMINIFY_PADD_SIZE (2)
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
class CJsonUtils
{
public:
CJsonUtils(void) {}
~CJsonUtils(void) {}
//---
// in = array de entrada
// read_i = indice de lecutra
// len = tamaño de lecutra
// out = buffer de salida
// oi = indice de escritura..
static void Minify(const uchar& in[], int read_i, int len, uchar& out[], int& oi);
// fpos = len + read_i (añade el padding como tal solo eso...)
static void MinifyCorrects(uchar& in[], int fpos);
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
static void CJsonUtils::MinifyCorrects(uchar &in[], int fpos)
{
//---
const int req = fpos + JSONMINIFY_PADD_SIZE;
if(req >= ArraySize(in))
ArrayResize(in, req);
//---
in[fpos] = '"';
in[fpos + 1] = '"';
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
// len = ", len+1 = " (len minimo es de 2.. siemrpe..)
static void CJsonUtils::Minify(const uchar &in[], int read_i, int len, uchar &out[], int& oi)
{
//---
len += read_i;
read_i--;
uchar c;
//---
while(true)
{
//--- Saltamos los ws
while((c = in[++read_i]) < 33) {}
//--- Siempre lo ponemos
out[oi++] = c;
//--- Verificamos si es string
if(c != '"')
continue;
//---
while((c = in[++read_i]) != '"')
{
out[oi++] = c;
if(c == '\\')
out[oi++] = in[++read_i];
}
//---
out[oi++] = c;
//--- solo comprobamos al final de un string
if(read_i >= len)
break;
}
//--- read_i solo se adeltna 1 dado que pisa dos caracters "" digmoas si len es 19 enotnces elera 19 y 20
// read_i qeudara en 20-19 = 1 char (en si 2 por eso el +1)
oi -= (read_i - len) + 1; // Sobrante
}
}
//---
#endif // JSONPARSERBYLEO_SRC_JSONUTILS_JSONMINIFY_MQH