mirror of
https://github.com/pocoproject/poco.git
synced 2025-04-26 18:11:29 +02:00
JSON Stringifier fails with preserve insert order #819
This commit is contained in:
parent
375eca2ec4
commit
4ac92e5cb2
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user