Switched the scanner list of owned indent markers to a ptr_vector

This commit is contained in:
Jesse Beder
2011-03-03 08:34:30 +00:00
parent a518d87cfc
commit d6aeb16450
2 changed files with 10 additions and 12 deletions

View File

@@ -14,9 +14,6 @@ namespace YAML
Scanner::~Scanner() Scanner::~Scanner()
{ {
for(unsigned i=0;i<m_indentRefs.size();i++)
delete m_indentRefs[i];
m_indentRefs.clear();
} }
// empty // empty
@@ -237,9 +234,9 @@ namespace YAML
{ {
m_startedStream = true; m_startedStream = true;
m_simpleKeyAllowed = true; m_simpleKeyAllowed = true;
IndentMarker *pIndent = new IndentMarker(-1, IndentMarker::NONE); std::auto_ptr<IndentMarker> pIndent(new IndentMarker(-1, IndentMarker::NONE));
m_indentRefs.push_back(pIndent); m_indentRefs.push_back(pIndent);
m_indents.push(pIndent); m_indents.push(&m_indentRefs.back());
} }
// EndStream // EndStream
@@ -299,8 +296,8 @@ namespace YAML
// and then the indent // and then the indent
m_indents.push(&indent); m_indents.push(&indent);
m_indentRefs.push_back(pIndent.release()); m_indentRefs.push_back(pIndent);
return m_indentRefs.back(); return &m_indentRefs.back();
} }
// PopIndentToHere // PopIndentToHere

View File

@@ -12,6 +12,7 @@
#include <stack> #include <stack>
#include <set> #include <set>
#include <map> #include <map>
#include "ptr_vector.h"
#include "stream.h" #include "stream.h"
#include "token.h" #include "token.h"
@@ -114,16 +115,16 @@ namespace YAML
Stream INPUT; Stream INPUT;
// the output (tokens) // the output (tokens)
std::queue <Token> m_tokens; std::queue<Token> m_tokens;
// state info // state info
bool m_startedStream, m_endedStream; bool m_startedStream, m_endedStream;
bool m_simpleKeyAllowed; bool m_simpleKeyAllowed;
bool m_canBeJSONFlow; bool m_canBeJSONFlow;
std::stack <SimpleKey> m_simpleKeys; std::stack<SimpleKey> m_simpleKeys;
std::stack <IndentMarker *> m_indents; std::stack<IndentMarker *> m_indents;
std::vector <IndentMarker *> m_indentRefs; // for "garbage collection" ptr_vector<IndentMarker> m_indentRefs; // for "garbage collection"
std::stack <FLOW_MARKER> m_flows; std::stack<FLOW_MARKER> m_flows;
}; };
} }