2026-10-05 17:54:12 -05:00 | | | //+------------------------------------------------------------------+
|
| | | //| Number.mqh |
|
| | | //| Copyright 2026, Niquel Mendoza. |
|
| | | //| https://www.mql5.com |
|
| | | //+------------------------------------------------------------------+
|
2026-10-19 07:27:06 -05:00 | | | #ifndef TSNPARSERIN_CPP_DLL
|
2026-10-05 17:54:12 -05:00 | | | #property copyright "Copyright 2026, Niquel Mendoza."
|
| | | #property link "https://www.mql5.com"
|
| | | #property strict
|
2026-10-19 07:27:06 -05:00 | | | #endif // TSNPARSERIN_CPP_DLL
|
2026-10-05 17:54:12 -05:00 | | |
|
| | | #ifndef BASESPARSERSLAN_SRC_UTILS_NUMBER_MQH
|
| | | #define BASESPARSERSLAN_SRC_UTILS_NUMBER_MQH
|
| | |
|
| | | //+------------------------------------------------------------------+
|
| | | //| |
|
| | | //+------------------------------------------------------------------+
|
| | | //--- conv str a -> val
|
2026-10-19 07:27:06 -05:00 | | | #ifndef TSNPARSERIN_CPP_DLL
|
2026-10-09 13:18:05 -05:00 | | | #include <TSN\\Std\\Str\\Conv.mqh>
|
2026-10-19 07:27:06 -05:00 | | | #else // TSNPARSERIN_CPP_DLL
|
| | | // En c++ solo hacen falta las macros STRCONV_* (sin includes de mql5)
|
| | | #include "..\\..\\..\\TSNStd\\Src\\String\\ConvDef\\Def.mqh"
|
| | | #endif // TSNPARSERIN_CPP_DLL
|
2026-10-05 17:54:12 -05:00 | | |
|
| | | //+------------------------------------------------------------------+
|
| | | //| |
|
| | | //+------------------------------------------------------------------+
|
| | | namespace TSN
|
| | | {
|
| | | //+------------------------------------------------------------------+
|
| | | //| Numeros |
|
| | | //+------------------------------------------------------------------+
|
| | | #define DOMBASEUTIL_PARSE_NUM_U1(V) \
|
| | | STRCONV_TOV_ALG(V, ch) \
|
| | | if((ch = m_raw[++m_pos] ^ '0') > 9) \
|
| | | break;
|
| | |
|
| | | //--- skio lz
|
| | | #define DOMBASEUTIL_PARSE_SKIP_LZ \
|
| | | while((ch = m_raw[++m_pos]) == '0') {} \
|
| | | if((ch^='0') > 9) \
|
| | | break;
|
| | |
|
| | | //--- unrolled 9
|
| | | #define DOMBASEUTIL_PARSE_NUM_UNROLLED_8(V) \
|
| | | DOMBASEUTIL_PARSE_NUM_U1(V) \
|
| | | DOMBASEUTIL_PARSE_NUM_U1(V) \
|
| | | DOMBASEUTIL_PARSE_NUM_U1(V) \
|
| | | DOMBASEUTIL_PARSE_NUM_U1(V) \
|
| | | DOMBASEUTIL_PARSE_NUM_U1(V) \
|
| | | DOMBASEUTIL_PARSE_NUM_U1(V) \
|
| | | DOMBASEUTIL_PARSE_NUM_U1(V) \
|
| | | DOMBASEUTIL_PARSE_NUM_U1(V)
|
| | |
|
| | | //--- unrolled 17 (8+8+1)
|
| | | #define DOMBASEUTIL_PARSE_NUM_UNROLLED_17(V) \
|
| | | DOMBASEUTIL_PARSE_NUM_UNROLLED_8(V) \
|
| | | DOMBASEUTIL_PARSE_NUM_UNROLLED_8(V) \
|
| | | DOMBASEUTIL_PARSE_NUM_U1(V)
|
| | |
|
| | | //--- unrolled 18 (8+8+2)
|
| | | #define DOMBASEUTIL_PARSE_NUM_UNROLLED_18(V) \
|
| | | DOMBASEUTIL_PARSE_NUM_UNROLLED_17(V) \
|
| | | DOMBASEUTIL_PARSE_NUM_U1(V)
|
| | |
|
| | | //--- saltar un numero
|
| | | #define DOMBASEUTIL_NUM_SKIP_NUMBER while((ch = m_raw[++m_pos] ^ '0') < 10) {}
|
| | |
|
| | | //--- la parte decimal
|
| | | // la idea es que los digitos tipo 0.000564135641 o esos no coman tantos digitos
|
| | | #define DOMBASEUTIL_NUM_PROCCES_FIRST_DEC(V, CH, POS, DS, DIG) \
|
| | | DOMBASEUTIL_PARSE_NUM_U1(V) \
|
| | | if(!V) \
|
| | | { \
|
| | | if(CH == 0) \
|
| | | { \
|
| | | while((CH = m_raw[++POS]) == '0') {} \
|
| | | DIG = (DS - POS); \
|
| | | if((CH^='0') > 9) \
|
| | | break; \
|
| | | } \
|
| | | else \
|
| | | DIG = (DS - POS); \
|
| | | DOMBASEUTIL_PARSE_NUM_U1(V, CH) \
|
| | | }
|
| | |
|
| | | //---
|
| | | }
|
| | |
|
| | | #endif // BASESPARSERSLAN_SRC_UTILS_NUMBER_MQH
|