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
|