From 09b2d969beab1e4832670569642ef4cc51bbbe60 Mon Sep 17 00:00:00 2001 From: john30 Date: Wed, 3 Dec 2014 23:02:30 +0100 Subject: [PATCH] added SymbolString(SymbolString), optimized --- src/lib/ebus/symbol.cpp | 15 +++++++++++++-- src/lib/ebus/symbol.h | 9 +++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/lib/ebus/symbol.cpp b/src/lib/ebus/symbol.cpp index 5f6a33ce..6e35772c 100644 --- a/src/lib/ebus/symbol.cpp +++ b/src/lib/ebus/symbol.cpp @@ -48,7 +48,7 @@ static const unsigned char CRC_LOOKUP_TABLE[] = }; -SymbolString::SymbolString(const string str) +SymbolString::SymbolString(const string& str) : m_unescapeState(0), m_crc(0) { // parse + escape @@ -60,7 +60,18 @@ SymbolString::SymbolString(const string str) push_back(m_crc, false, false); } -SymbolString::SymbolString(const string str, bool isEscaped) +SymbolString::SymbolString(const SymbolString& str) + : m_unescapeState(0), m_crc(0) +{ + // escape + for (size_t i = 0; i < str.size(); i++) { + push_back(str[i], false, true); + } + // add CRC + escape + push_back(m_crc, false, false); +} + +SymbolString::SymbolString(const string& str, bool isEscaped) : m_unescapeState(1), m_crc(0) { // parse + optionally unescape diff --git a/src/lib/ebus/symbol.h b/src/lib/ebus/symbol.h index b30d0467..adf5501b 100644 --- a/src/lib/ebus/symbol.h +++ b/src/lib/ebus/symbol.h @@ -50,13 +50,18 @@ public: * @brief Creates a new escaped instance from an unescaped hex string and adds the calculated CRC. * @param str the unescaped hex string. */ - SymbolString(const string str); + SymbolString(const string& str); + /** + * @brief Creates a new escaped instance from an unescaped @a SymbolString and adds the calculated CRC. + * @param str the unescaped SymbolString. + */ + SymbolString(const SymbolString& str); /** * @brief Creates a new unescaped instance from a hex string. * @param isEscaped whether the hex string is escaped and shall be unescaped. * @param str the hex string. */ - SymbolString(const string str, const bool isEscaped); + SymbolString(const string& str, const bool isEscaped); /** * @brief Returns the symbols as hex string. * @param unescape whether to unescape an escaped instance.