result_t Message::decode(SymbolString& masterData, SymbolString& slaveData, ostringstream& output, OutputFormat outputFormat, bool leadingSeparator) { unsigned char offset = (unsigned char)(m_id.size() - 2); size_t startPos = output.str().length(); result_t result = m_data->read(pt_masterData, masterData, offset, output, outputFormat, leadingSeparator, NULL, -1); if (result < RESULT_OK) return result; bool empty = result == RESULT_EMPTY; offset = 0; leadingSeparator |= output.str().length() > startPos; result = m_data->read(pt_slaveData, slaveData, offset, output, outputFormat, leadingSeparator, NULL, -1); if (result < RESULT_OK) return result; if (result == RESULT_EMPTY && !empty) result = RESULT_OK; // OK if at least one part was non-empty time(&m_lastUpdateTime); switch (masterData.compareMaster(m_lastMasterData)) { case 1: // completely different m_lastChangeTime = m_lastUpdateTime; m_lastMasterData = masterData; break; case 2: // only master address is different m_lastMasterData = masterData; break; } if (slaveData != m_lastSlaveData) { m_lastChangeTime = m_lastUpdateTime; m_lastSlaveData = slaveData; } return result; }
result_t Message::decode(const PartType partType, SymbolString& data, ostringstream& output, OutputFormat outputFormat, bool leadingSeparator, const char* fieldName, signed char fieldIndex) { unsigned char offset; if (partType == pt_masterData) offset = (unsigned char)(m_id.size() - 2); else offset = 0; result_t result = m_data->read(partType, data, offset, output, outputFormat, leadingSeparator, fieldName, fieldIndex); if (result < RESULT_OK) return result; if (result == RESULT_EMPTY && fieldName != NULL) return RESULT_ERR_NOTFOUND; time(&m_lastUpdateTime); if (partType == pt_masterData) { switch (data.compareMaster(m_lastMasterData)) { case 1: // completely different m_lastChangeTime = m_lastUpdateTime; m_lastMasterData = data; break; case 2: // only master address is different m_lastMasterData = data; break; } } else if (partType == pt_slaveData) { if (data != m_lastSlaveData) { m_lastChangeTime = m_lastUpdateTime; m_lastSlaveData = data; } } return result; }