Commit bf1e56ec by Maarten L. Hekkelman

Another attempt

parent 040b4e4f
......@@ -257,7 +257,7 @@ class sac_parser
CIFToken m_lookahead;
std::string m_token_value;
CIFValue mTokenType;
std::string m_buffer; // retract buffer, used to be a stack<char>
std::vector<int> m_buffer; // retract buffer, used to be a stack<char>
};
// --------------------------------------------------------------------
......
......@@ -64,13 +64,13 @@ int sac_parser::get_next_char()
{
int result = std::char_traits<char>::eof();
if (not m_buffer.empty())
if (m_buffer.empty())
result = m_source.sbumpc();
else
{
result = m_buffer.back();
m_buffer.pop_back();
}
else
result = m_source.sbumpc();
// very simple CR/LF translation into LF
if (result == '\r')
......@@ -81,7 +81,10 @@ int sac_parser::get_next_char()
result = '\n';
}
m_token_value.push_back(static_cast<char>(result));
if (result == std::char_traits<char>::eof())
m_token_value.push_back(0);
else
m_token_value.push_back(std::char_traits<char>::to_char_type(result));
if (result == '\n')
++m_line_nr;
......@@ -106,7 +109,7 @@ void sac_parser::retract()
if (ch == '\n')
--m_line_nr;
m_buffer.push_back(ch);
m_buffer.push_back(ch == 0 ? std::char_traits<char>::eof() : std::char_traits<char>::to_int_type(ch));
m_token_value.pop_back();
}
......
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