+ guard call to std::ios_base::sync_with_stdio

This commit is contained in:
Niels 2015-01-04 12:05:28 +01:00
parent 9537c70b67
commit 481f377cfe
2 changed files with 16 additions and 3 deletions

View file

@ -22,6 +22,7 @@
//////////////////// ////////////////////
std::mutex JSON::_token; std::mutex JSON::_token;
bool JSON::Parser::firstCall = true;
/////////////////////////////////// ///////////////////////////////////
@ -1776,9 +1777,17 @@ Initialize the JSON parser given an input stream \p _is.
*/ */
JSON::Parser::Parser(std::istream& _is) JSON::Parser::Parser(std::istream& _is)
{ {
// from http://www.manticmoo.com/articles/jeff/programming/c++/making-io-streams-efficient-in-c++.php // On first call, switch off syncing between C++ and C I/O. This call must
// be done before first I/O operation as the behavior may be undefined
// otherwise.
if (firstCall)
{
firstCall = false;
// Don't sync C++ and C I/O // Don't sync C++ and C I/O
// from http://www.manticmoo.com/articles/jeff/programming/c++/making-io-streams-efficient-in-c++.php
std::ios_base::sync_with_stdio(false); std::ios_base::sync_with_stdio(false);
}
while (_is) while (_is)
{ {
std::string input_line; std::string input_line;

View file

@ -432,6 +432,10 @@ class JSON
char _current {}; char _current {};
/// the position inside the input buffer /// the position inside the input buffer
size_t _pos = 0; size_t _pos = 0;
private:
/// variable to guard std::ios_base::sync_with_stdio
static bool firstCall;
}; };
}; };