diff options
| author | 2023-11-30 16:08:49 +0100 | |
|---|---|---|
| committer | 2023-11-30 16:08:49 +0100 | |
| commit | 9babfaff10e9921dc84cd28cd37c04e68eb6f4a5 (patch) | |
| tree | 2906a5c143310606bd0c940d6c06a2e1c121425e | |
| parent | Removed unused travis files and 10-years-not-updated changelog. (#2572) (diff) | |
| download | KVIrc-9babfaff10e9921dc84cd28cd37c04e68eb6f4a5.tar.gz KVIrc-9babfaff10e9921dc84cd28cd37c04e68eb6f4a5.tar.bz2 KVIrc-9babfaff10e9921dc84cd28cd37c04e68eb6f4a5.zip | |
KviCString::getToken(): add option to skip empty elements (default off) (#2574)
| -rw-r--r-- | src/kvilib/core/KviCString.cpp | 12 | ||||
| -rw-r--r-- | src/kvilib/core/KviCString.h | 4 | ||||
| -rw-r--r-- | src/kvirc/sparser/KviIrcServerParser_numericHandlers.cpp | 2 |
3 files changed, 13 insertions, 5 deletions
diff --git a/src/kvilib/core/KviCString.cpp b/src/kvilib/core/KviCString.cpp index b4c8b4f07..9514fa5ad 100644 --- a/src/kvilib/core/KviCString.cpp +++ b/src/kvilib/core/KviCString.cpp @@ -2657,7 +2657,7 @@ KviCString & KviCString::stripLeft(char c) return (*this); } -bool KviCString::getToken(KviCString & str, char sep) +bool KviCString::getToken(KviCString & str, char sep, bool skipEmpty) { KVI_ASSERT(str.m_ptr); KVI_ASSERT(str.m_ptr != m_ptr); @@ -2673,7 +2673,11 @@ bool KviCString::getToken(KviCString & str, char sep) KviMemory::copy(str.m_ptr, m_ptr, str.m_len); *(str.m_ptr + str.m_len) = '\0'; while(*p && (*p == sep)) + { p++; + if(!skipEmpty) + break; + } cutLeft(p - m_ptr); return (m_len != 0); } @@ -2700,14 +2704,18 @@ bool KviCString::getLine(KviCString & str) return true; } -KviCString KviCString::getToken(char sep) +KviCString KviCString::getToken(char sep, bool skipEmpty) { char * p = m_ptr; while(*p && (*p != sep)) p++; KviCString ret(m_ptr, p); while(*p && (*p == sep)) + { p++; + if(!skipEmpty) + break; + } cutLeft(p - m_ptr); return ret; } diff --git a/src/kvilib/core/KviCString.h b/src/kvilib/core/KviCString.h index 43fb25b2f..459ee8b29 100644 --- a/src/kvilib/core/KviCString.h +++ b/src/kvilib/core/KviCString.h @@ -349,10 +349,10 @@ public: // and returns true if there are more tokens to extract<br> // Does not strip initial separators!!<br> // str can NOT be this string. - bool getToken(KviCString & str, char sep); + bool getToken(KviCString & str, char sep, bool skipEmpty = false); // Does not strip initial separators!<br> // Can assign also to this string. - KviCString getToken(char sep); + KviCString getToken(char sep, bool skipEmpty = false); // Extracts a line from the string.<br> // Returns false if there was no data to extract bool getLine(KviCString & str); diff --git a/src/kvirc/sparser/KviIrcServerParser_numericHandlers.cpp b/src/kvirc/sparser/KviIrcServerParser_numericHandlers.cpp index 5a4b274a8..208718e00 100644 --- a/src/kvirc/sparser/KviIrcServerParser_numericHandlers.cpp +++ b/src/kvirc/sparser/KviIrcServerParser_numericHandlers.cpp @@ -907,7 +907,7 @@ void KviIrcServerParser::parseNumericWhoReply(KviIrcMessage * msg) bool bIrcOp = szFlag.indexOf('*') != -1; KviCString trailing = msg->safeTrailing(); - KviCString hops = trailing.getToken(' '); + KviCString hops = trailing.getToken(' ', true); bool bHopsOk = false; int iHops = hops.toInt(&bHopsOk); |
