From a518d87cfcaae62a5da824f3a2be5d49764cd43d Mon Sep 17 00:00:00 2001 From: Jesse Beder Date: Thu, 3 Mar 2011 08:11:14 +0000 Subject: [PATCH] Switched the emitter state's stack of groups to a ptr_stack --- src/emitterstate.cpp | 32 ++++++++++---------------------- src/emitterstate.h | 31 +++++++++++++++---------------- src/ptr_stack.h | 1 + 3 files changed, 26 insertions(+), 38 deletions(-) diff --git a/src/emitterstate.cpp b/src/emitterstate.cpp index 6b8476f..dfe2b2b 100644 --- a/src/emitterstate.cpp +++ b/src/emitterstate.cpp @@ -25,18 +25,6 @@ namespace YAML EmitterState::~EmitterState() { - while(!m_groups.empty()) - _PopGroup(); - } - - std::auto_ptr EmitterState::_PopGroup() - { - if(m_groups.empty()) - return std::auto_ptr (0); - - std::auto_ptr pGroup(m_groups.top()); - m_groups.pop(); - return pGroup; } // SetLocalValue @@ -57,10 +45,10 @@ namespace YAML void EmitterState::BeginGroup(GROUP_TYPE type) { - unsigned lastIndent = (m_groups.empty() ? 0 : m_groups.top()->indent); + unsigned lastIndent = (m_groups.empty() ? 0 : m_groups.top().indent); m_curIndent += lastIndent; - std::auto_ptr pGroup(new Group(type)); + std::auto_ptr pGroup(new Group(type)); // transfer settings (which last until this group is done) pGroup->modifiedSettings = m_modifiedSettings; @@ -70,7 +58,7 @@ namespace YAML pGroup->indent = GetIndent(); pGroup->usingLongKey = (GetMapKeyFormat() == LongKey ? true : false); - m_groups.push(pGroup.release()); + m_groups.push(pGroup); } void EmitterState::EndGroup(GROUP_TYPE type) @@ -80,13 +68,13 @@ namespace YAML // get rid of the current group { - std::auto_ptr pFinishedGroup = _PopGroup(); + std::auto_ptr pFinishedGroup = m_groups.pop(); if(pFinishedGroup->type != type) return SetError(ErrorMsg::UNMATCHED_GROUP_TAG); } // reset old settings - unsigned lastIndent = (m_groups.empty() ? 0 : m_groups.top()->indent); + unsigned lastIndent = (m_groups.empty() ? 0 : m_groups.top().indent); assert(m_curIndent >= lastIndent); m_curIndent -= lastIndent; @@ -100,7 +88,7 @@ namespace YAML if(m_groups.empty()) return GT_NONE; - return m_groups.top()->type; + return m_groups.top().type; } FLOW_TYPE EmitterState::GetCurGroupFlowType() const @@ -108,26 +96,26 @@ namespace YAML if(m_groups.empty()) return FT_NONE; - return (m_groups.top()->flow == Flow ? FT_FLOW : FT_BLOCK); + return (m_groups.top().flow == Flow ? FT_FLOW : FT_BLOCK); } bool EmitterState::CurrentlyInLongKey() { if(m_groups.empty()) return false; - return m_groups.top()->usingLongKey; + return m_groups.top().usingLongKey; } void EmitterState::StartLongKey() { if(!m_groups.empty()) - m_groups.top()->usingLongKey = true; + m_groups.top().usingLongKey = true; } void EmitterState::StartSimpleKey() { if(!m_groups.empty()) - m_groups.top()->usingLongKey = false; + m_groups.top().usingLongKey = false; } void EmitterState::ClearModifiedSettings() diff --git a/src/emitterstate.h b/src/emitterstate.h index 697aafc..9c8136e 100644 --- a/src/emitterstate.h +++ b/src/emitterstate.h @@ -6,6 +6,7 @@ #endif +#include "ptr_stack.h" #include "setting.h" #include "yaml-cpp/emittermanip.h" #include @@ -155,19 +156,19 @@ namespace YAML std::string m_lastError; // other state - std::stack m_stateStack; + std::stack m_stateStack; - Setting m_charset; - Setting m_strFmt; - Setting m_boolFmt; - Setting m_boolLengthFmt; - Setting m_boolCaseFmt; - Setting m_intFmt; - Setting m_indent; - Setting m_preCommentIndent, m_postCommentIndent; - Setting m_seqFmt; - Setting m_mapFmt; - Setting m_mapKeyFmt; + Setting m_charset; + Setting m_strFmt; + Setting m_boolFmt; + Setting m_boolLengthFmt; + Setting m_boolCaseFmt; + Setting m_intFmt; + Setting m_indent; + Setting m_preCommentIndent, m_postCommentIndent; + Setting m_seqFmt; + Setting m_mapFmt; + Setting m_mapKeyFmt; SettingChanges m_modifiedSettings; SettingChanges m_globalModifiedSettings; @@ -182,10 +183,8 @@ namespace YAML SettingChanges modifiedSettings; }; - - std::auto_ptr _PopGroup(); - - std::stack m_groups; + + ptr_stack m_groups; unsigned m_curIndent; bool m_requiresSoftSeparation; bool m_requiresHardSeparation; diff --git a/src/ptr_stack.h b/src/ptr_stack.h index 7a3a51c..75fc923 100644 --- a/src/ptr_stack.h +++ b/src/ptr_stack.h @@ -35,6 +35,7 @@ public: return t; } T& top() { return *m_data.back(); } + const T& top() const { return *m_data.back(); } private: std::vector m_data;