//+------------------------------------------------------------------+ //| 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