JSON Stringifier fails with preserve insert order #819

This commit is contained in:
unknown 2015-06-01 09:28:00 -05:00
parent 375eca2ec4
commit 4ac92e5cb2
2 changed files with 14 additions and 14 deletions

View File

@ -239,16 +239,16 @@ private:
out << '}'; out << '}';
} }
typedef std::deque<Dynamic::Var*> KeyPtrList; typedef std::deque<std::string> KeyList;
typedef Poco::DynamicStruct::Ptr StructPtr; typedef Poco::DynamicStruct::Ptr StructPtr;
const std::string& getKey(ValueMap::const_iterator& it) const; const std::string& getKey(ValueMap::const_iterator& it) const;
const Dynamic::Var& getValue(ValueMap::const_iterator& it) const; const Dynamic::Var& getValue(ValueMap::const_iterator& it) const;
const std::string& getKey(KeyPtrList::const_iterator& it) const; const std::string& getKey(KeyList::const_iterator& it) const;
const Dynamic::Var& getValue(KeyPtrList::const_iterator& it) const; const Dynamic::Var& getValue(KeyList::const_iterator& it) const;
ValueMap _values; ValueMap _values;
KeyPtrList _keys; KeyList _keys;
bool _preserveInsOrder; bool _preserveInsOrder;
mutable StructPtr _pStruct; mutable StructPtr _pStruct;
}; };
@ -318,9 +318,9 @@ inline const Dynamic::Var& Object::getValue(ValueMap::const_iterator& it) const
} }
inline const Dynamic::Var& Object::getValue(KeyPtrList::const_iterator& it) const inline const Dynamic::Var& Object::getValue(KeyList::const_iterator& it) const
{ {
return **it; return _values.at(*it);
} }

View File

@ -101,16 +101,16 @@ void Object::stringify(std::ostream& out, unsigned int indent, int step) const
} }
const std::string& Object::getKey(KeyPtrList::const_iterator& iter) const const std::string& Object::getKey(KeyList::const_iterator& iter) const
{ {
ValueMap::const_iterator it = _values.begin(); ValueMap::const_iterator it = _values.begin();
ValueMap::const_iterator end = _values.end(); ValueMap::const_iterator end = _values.end();
for (; it != end; ++it) for (; it != end; ++it)
{ {
if (it->second == **iter) return it->first; if (it->first == *iter) return it->first;
} }
throw NotFoundException((*iter)->convert<std::string>()); throw NotFoundException(*iter);
} }
@ -119,13 +119,13 @@ void Object::set(const std::string& key, const Dynamic::Var& value)
_values[key] = value; _values[key] = value;
if (_preserveInsOrder) if (_preserveInsOrder)
{ {
KeyPtrList::iterator it = _keys.begin(); KeyList::iterator it = _keys.begin();
KeyPtrList::iterator end = _keys.end(); KeyList::iterator end = _keys.end();
for (; it != end; ++it) for (; it != end; ++it)
{ {
if (key == **it) return; if (key == *it) return;
} }
_keys.push_back(&_values[key]); _keys.push_back(key);
} }
} }