void Preferences::ValueChanged(std::shared_ptr<ITable> table, const std::string &key, EntryValue value, bool isNew) { if (key == kSaveField) { if (table->GetBoolean(kSaveField, false)) Save(); } else { std::unique_lock<priority_recursive_mutex> sync(m_tableLock); if (!isKeyAcceptable(key) || table->GetString(key, "").find('"') != std::string::npos) { if (m_values.find(key) != m_values.end()) { m_values.erase(key); auto it = m_keys.begin(); for (; it != m_keys.end(); it++) { if (key == *it) { m_keys.erase(it); break; } } table->PutString(key, "\""); } } else { std::pair<StringMap::iterator, bool> ret = m_values.insert( StringMap::value_type(key, table->GetString(key, ""))); if (ret.second) m_keys.push_back(key); else ret.first->second = table->GetString(key, ""); } } }
void Preferences::ValueChanged(ITable* table, const std::string& key, EntryValue value, bool isNew) { if (key==kSaveField) { if (table->GetBoolean(kSaveField, false)) Save(); } else { Synchronized sync(m_tableLock); if (!isKeyAcceptable(key) || table->GetString(key, "").find('"')!=std::string::npos) { table->PutString(key, "\""); m_values.erase(key); std::vector<std::string>::iterator it = m_keys.begin(); for (; it != m_keys.end(); it++) { if (key==*it) { m_keys.erase(it); break; } } } else { std::pair<StringMap::iterator, bool> ret = m_values.insert(StringMap::value_type(key, table->GetString(key, ""))); if (ret.second) m_keys.push_back(key); else ret.first->second = table->GetString(key, ""); } } }