Unverified Commit 6f7ead51 authored by Maxim Okhotskiy's avatar Maxim Okhotskiy Committed by GitHub
Browse files

Maintain order of nodes in sequences (#668)

parent cf93f4c5
...@@ -13,10 +13,16 @@ ...@@ -13,10 +13,16 @@
#include "yaml-cpp/node/ptr.h" #include "yaml-cpp/node/ptr.h"
#include "yaml-cpp/node/type.h" #include "yaml-cpp/node/type.h"
#include <set> #include <set>
#include <atomic>
namespace YAML { namespace YAML {
namespace detail { namespace detail {
class node { class node {
private:
struct less {
bool operator ()(const node* l, const node* r) {return l->m_index < r->m_index;}
};
public: public:
node() : m_pRef(new node_ref), m_dependencies{} {} node() : m_pRef(new node_ref), m_dependencies{} {}
node(const node&) = delete; node(const node&) = delete;
...@@ -108,6 +114,7 @@ class node { ...@@ -108,6 +114,7 @@ class node {
void push_back(node& input, shared_memory_holder pMemory) { void push_back(node& input, shared_memory_holder pMemory) {
m_pRef->push_back(input, pMemory); m_pRef->push_back(input, pMemory);
input.add_dependency(*this); input.add_dependency(*this);
m_index = m_amount.fetch_add(1);
} }
void insert(node& key, node& value, shared_memory_holder pMemory) { void insert(node& key, node& value, shared_memory_holder pMemory) {
m_pRef->insert(key, value, pMemory); m_pRef->insert(key, value, pMemory);
...@@ -159,8 +166,10 @@ class node { ...@@ -159,8 +166,10 @@ class node {
private: private:
shared_node_ref m_pRef; shared_node_ref m_pRef;
using nodes = std::set<node*>; using nodes = std::set<node*, less>;
nodes m_dependencies; nodes m_dependencies;
size_t m_index;
static std::atomic<size_t> m_amount;
}; };
} // namespace detail } // namespace detail
} // namespace YAML } // namespace YAML
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
namespace YAML { namespace YAML {
namespace detail { namespace detail {
std::atomic<size_t> node::m_amount{0};
const std::string& node_data::empty_scalar() { const std::string& node_data::empty_scalar() {
static const std::string svalue; static const std::string svalue;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment