_cargo-index/web
2026-09-22 03:45:45 +00:00

100 lines
3.7 KiB
Text

//+------------------------------------------------------------------+
//| Main.mqh |
//| Copyright 2026, Niquel Mendoza. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2026, Niquel Mendoza."
#property link "https://www.mql5.com"
#property strict
#ifndef MQLARTICLES_UTILS_BUFFERBUILD_MAIN_MQH
#define MQLARTICLES_UTILS_BUFFERBUILD_MAIN_MQH
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#include "UrlEncode\\Main.mqh"
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
namespace TSN
{
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
// Esta clase noramlte se usara con web requeset.. para evita concatener string
// cuando se arma los datos.. es como un builder general...
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#define MQLART_BUFFER_INCREASE(req) \
if((req) >= m_r) \
{ \
m_r += (req) + 128; \
ArrayResize(m_raw, m_r, m_r); \
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
struct CBufferBuild
{
public:
CBufferBuild(int reserve) : m_s(0), m_r(reserve) { ArrayResize(m_raw, reserve, reserve); }
CBufferBuild() : m_s(0), m_r(0) {}
//---
int m_s;
int m_r;
uchar m_raw[];
//---
// Escribe decodificando con URL Encode
// retorna i (posicion leida en str)
void WriteUrlEncode(const string& str, int len = WHOLE_ARRAY);
//---
// Escribe tal cual un CharArrayToString
void WriteRaw(const string& str, uint cp = CP_UTF8);
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CBufferBuild::WriteRaw(const string &str, uint cp = CP_UTF8)
{
//---
const int l = StringLen(str);
const int max_bytes = (l << 2) + 1;
MQLART_BUFFER_INCREASE(max_bytes)
//---
int written = StringToCharArray(str, m_raw, m_s, WHOLE_ARRAY, cp);
if(written > 0 && m_raw[m_s + written - 1] == 0)
written--;
//---
m_s += written;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CBufferBuild::WriteUrlEncode(const string &str, int len = WHOLE_ARRAY)
{
//---
if(len == WHOLE_ARRAY)
len = StringLen(str);
//---
const int req = (len << 3) + len; // *9
MQLART_BUFFER_INCREASE(req)
//---
CUrlEncode::UrlEncode(str, len, m_raw, m_s);
}
}
//+------------------------------------------------------------------+
#endif // MQLARTICLES_UTILS_BUFFERBUILD_MAIN_MQH