+ fixed a bug in the stream input

pull/6/head
Niels 2014-12-29 21:13:03 +01:00
parent 15a9d3cff6
commit 4e44390090
4 changed files with 20 additions and 7 deletions

2
.gitignore vendored
View File

@ -34,3 +34,5 @@ test-driver
Makefile.in
*.plist
json_parser

View File

@ -1,4 +1,4 @@
noinst_PROGRAMS = json_unit
noinst_PROGRAMS = json_unit json_parser
FLAGS = -Wall -Wextra -pedantic -Weffc++ -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -Wformat=2 -Winit-self -Wmissing-declarations -Wmissing-include-dirs -Wold-style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-conversion -Wsign-promo -Wstrict-overflow=5 -Wswitch -Wundef -Wno-unused -Wnon-virtual-dtor -Wreorder
@ -6,6 +6,10 @@ json_unit_SOURCES = src/JSON.cc src/JSON.h test/catch.hpp test/JSON_unit.cc
json_unit_CXXFLAGS = $(FLAGS) -std=c++11
json_unit_CPPFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/test -Dprivate=public
json_parser_SOURCES = src/JSON.cc src/JSON.h benchmark/parse.cc
json_parser_CXXFLAGS = $(FLAGS) -std=c++11
json_parser_CPPFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/benchmark
cppcheck:
cppcheck --enable=all --inconclusive --std=c++11 src/JSON.*

View File

@ -0,0 +1,8 @@
#include "JSON.h"
int main()
{
JSON j;
j << std::cin;
return 0;
}

View File

@ -1775,14 +1775,13 @@ Initialize the JSON parser given an input stream \p _is.
*/
JSON::Parser::Parser(std::istream& _is)
{
// determine length of input stream
_is.seekg(0, std::ios::end);
_length = static_cast<size_t>(_is.tellg());
_is.seekg(0, std::ios::beg);
// copy stream to string
std::istreambuf_iterator<char> eos;
std::string string_input(std::istreambuf_iterator<char>(_is), eos);
// copy stream to buffer
_length = string_input.size();
_buffer = new char[_length + 1];
_is.read(_buffer, static_cast<std::streamsize>(_length));
std::strcpy(_buffer, string_input.c_str());
// read first character
next();