From 398ec19e817d65f80402e296b395994e01cb67ff Mon Sep 17 00:00:00 2001 From: Hannes Janetzek Date: Fri, 3 Jul 2015 15:09:58 +0200 Subject: [PATCH] convert ptr_stack to unique_ptr --- src/emitterstate.cpp | 2 +- src/ptr_stack.h | 28 ++++++++++++++++------------ 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/emitterstate.cpp b/src/emitterstate.cpp index 469040f..3ea5570 100644 --- a/src/emitterstate.cpp +++ b/src/emitterstate.cpp @@ -136,7 +136,7 @@ void EmitterState::StartedGroup(GroupType::value type) { pGroup->flowType = FlowType::Flow; pGroup->indent = GetIndent(); - m_groups.push(pGroup); + m_groups.push(std::move(pGroup)); } void EmitterState::EndedGroup(GroupType::value type) { diff --git a/src/ptr_stack.h b/src/ptr_stack.h index 3757432..7767813 100644 --- a/src/ptr_stack.h +++ b/src/ptr_stack.h @@ -18,36 +18,40 @@ template class ptr_stack : private YAML::noncopyable { public: ptr_stack() {} - ~ptr_stack() { clear(); } void clear() { - for (std::size_t i = 0; i < m_data.size(); i++) - delete m_data[i]; m_data.clear(); } std::size_t size() const { return m_data.size(); } bool empty() const { return m_data.empty(); } - void push(std::unique_ptr &t) { - m_data.push_back(NULL); - m_data.back() = t.release(); + void push(std::unique_ptr&& t) { + m_data.push_back(std::move(t)); } std::unique_ptr pop() { - std::unique_ptr t(m_data.back()); + std::unique_ptr t(std::move(m_data.back())); m_data.pop_back(); return t; } - T& top() { return *m_data.back(); } - const T& top() const { return *m_data.back(); } - T& top(std::ptrdiff_t diff) { return **(m_data.end() - 1 + diff); } + T& top() { + return *(m_data.back().get()); + } + const T& top() const { + return *(m_data.back().get()); + } + + T& top(std::ptrdiff_t diff) { + return *((m_data.end() - 1 + diff)->get()); + } + const T& top(std::ptrdiff_t diff) const { - return **(m_data.end() - 1 + diff); + return *((m_data.end() - 1 + diff)->get()); } private: - std::vector m_data; + std::vector> m_data; }; #endif // PTR_STACK_H_62B23520_7C8E_11DE_8A39_0800200C9A66