forked from nique_372/JsonParserByLeo
114 lines
3.5 KiB
MQL5
114 lines
3.5 KiB
MQL5
//+------------------------------------------------------------------+
| |||
//| 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
|