示例#1
0
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, "");
    }
  }
}
示例#2
0
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, "");
		}
	}
}