Skip to content

Instantly share code, notes, and snippets.

@crespo2014
Last active August 29, 2015 14:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save crespo2014/8a40a9053b2c21fbc840 to your computer and use it in GitHub Desktop.
Save crespo2014/8a40a9053b2c21fbc840 to your computer and use it in GitHub Desktop.
#include "rapidjson/rapidjson.h"
#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
#include "rapidjson/reader.h"
using namespace rapidjson;
class Handler
{
public:
bool Default() { return true; }
bool Null() { return Default(); }
bool Bool(bool) { return Default(); }
bool Int(int) { return Default(); }
bool Uint(unsigned) { return Default(); }
bool Int64(int64_t) { return Default(); }
bool Uint64(uint64_t) { return Default(); }
bool Double(double) { return Default(); }
bool String(const char*, SizeType, bool) { return Default(); }
bool StartObject() { return Default(); }
bool EndObject(SizeType) { return Default(); }
bool StartArray() { return Default(); }
bool EndArray(SizeType) { return Default(); }
};
int main()
{
char json[] = "{}";
Handler handler;
rapidjson::Reader reader;
rapidjson::InsituStringStream ss(json);
rapidjson::ParseResult pr = reader.Parse(ss, handler);
(void)(pr);
rapidjson::StringBuffer reply;
rapidjson::Document doc;
rapidjson::Value nv_o(rapidjson::kObjectType);
doc.AddMember(rapidjson::StringRef(""),nv_o,doc.GetAllocator());
rapidjson::Value nv_a(rapidjson::kArrayType);
doc.AddMember(rapidjson::StringRef(""),nv_a,doc.GetAllocator());
rapidjson::Value nv_s(rapidjson::kStringType);
doc.AddMember(rapidjson::StringRef(""),nv_s,doc.GetAllocator());
doc.AddMember(rapidjson::StringRef(""),(bool)true,doc.GetAllocator());
doc.AddMember(rapidjson::StringRef(""),(double)0,doc.GetAllocator());
doc.AddMember(rapidjson::StringRef(""),(unsigned)0,doc.GetAllocator());
doc.AddMember(rapidjson::StringRef(""),(signed)0,doc.GetAllocator());
Writer<StringBuffer> writer(reply);
doc.Accept(writer);
}
/opt/OSELAS.Toolchain-2012.12.1/arm-cortexa9-linux-gnueabihf/gcc-4.7.3-glibc-2.16.0-binutils-2.22-kernel-3.6-sanitized/bin/arm-cortexa9-linux-gnueabihf-g++ -v
rm rapidjson
ln -s rapidjson_1 rapidjson
/opt/OSELAS.Toolchain-2012.12.1/arm-cortexa9-linux-gnueabihf/gcc-4.7.3-glibc-2.16.0-binutils-2.22-kernel-3.6-sanitized/bin/arm-cortexa9-linux-gnueabihf-g++ -c -g -D_DEBUG -std=c++11 -DBYTE_ORDER=1234 -D_POSIX_C_SOURCE=200809L -D__STDC_CONSTANT_MACROS -Wall -Wextra -pedantic -Wmissing-declarations -Wpointer-arith -Wwrite-strings -Wformat=2 -Wlogical-op -Wcast-align -Wcast-qual -Wundef -Wmissing-include-dirs -Wfloat-equal -Wconversion main.cpp
rm rapidjson
ln -s rapidjson_2 rapidjson
/opt/OSELAS.Toolchain-2012.12.1/arm-cortexa9-linux-gnueabihf/gcc-4.7.3-glibc-2.16.0-binutils-2.22-kernel-3.6-sanitized/bin/arm-cortexa9-linux-gnueabihf-g++ -c -g -D_DEBUG -std=c++11 -DBYTE_ORDER=1234 -D_POSIX_C_SOURCE=200809L -D__STDC_CONSTANT_MACROS -Wall -Wextra -pedantic -Wmissing-declarations -Wpointer-arith -Wwrite-strings -Wformat=2 -Wlogical-op -Wcast-align -Wcast-qual -Wundef -Wmissing-include-dirs -Wfloat-equal -Wconversion main.cpp
diff -Naur --exclude=.svn rapidjson_1 rapidjson_2
++ /opt/OSELAS.Toolchain-2012.12.1/arm-cortexa9-linux-gnueabihf/gcc-4.7.3-glibc-2.16.0-binutils-2.22-kernel-3.6-sanitized/bin/arm-cortexa9-linux-gnueabihf-g++ -v
Using built-in specs.
COLLECT_GCC=/opt/OSELAS.Toolchain-2012.12.1/arm-cortexa9-linux-gnueabihf/gcc-4.7.3-glibc-2.16.0-binutils-2.22-kernel-3.6-sanitized/bin/arm-cortexa9-linux-gnueabihf-g++
COLLECT_LTO_WRAPPER=/opt/OSELAS.Toolchain-2012.12.1/arm-cortexa9-linux-gnueabihf/gcc-4.7.3-glibc-2.16.0-binutils-2.22-kernel-3.6-sanitized/bin/../libexec/gcc/arm-cortexa9-linux-gnueabihf/4.7.3/lto-wrapper
Target: arm-cortexa9-linux-gnueabihf
Configured with: /home/mol/himalia/tmp/OSELAS.Toolchain-2012.12.1/platform-arm-cortexa9-linux-gnueabihf-gcc-4.7.3-glibc-2.16.0-binutils-2.22-kernel-3.6-sanitized/build-cross/gcc-linaro-4.7-2012.11/configure --build=i686-host-linux-gnu --host=i686-host-linux-gnu --target=arm-cortexa9-linux-gnueabihf --with-sysroot=/home/mol/himalia/tmp/OSELAS.Toolchain-2012.12.1/inst/opt/OSELAS.Toolchain-2012.12.1/arm-cortexa9-linux-gnueabihf/gcc-4.7.3-glibc-2.16.0-binutils-2.22-kernel-3.6-sanitized/sysroot-arm-cortexa9-linux-gnueabihf --disable-multilib --with-float=hard --with-fpu=neon --with-cpu=cortex-a9 --enable-__cxa_atexit --disable-sjlj-exceptions --disable-nls --disable-decimal-float --disable-fixed-point --disable-win32-registry --enable-symvers=gnu --with-pkgversion='OSELAS.Toolchain-2012.12.1 linaro-4.7-2012.11' --enable-threads=posix --with-system-zlib --with-gmp=/home/mol/himalia/tmp/OSELAS.Toolchain-2012.12.1/platform-arm-cortexa9-linux-gnueabihf-gcc-4.7.3-glibc-2.16.0-binutils-2.22-kernel-3.6-sanitized/sysroot-host --with-mpfr=/home/mol/himalia/tmp/OSELAS.Toolchain-2012.12.1/platform-arm-cortexa9-linux-gnueabihf-gcc-4.7.3-glibc-2.16.0-binutils-2.22-kernel-3.6-sanitized/sysroot-host --prefix=/home/mol/himalia/tmp/OSELAS.Toolchain-2012.12.1/inst/opt/OSELAS.Toolchain-2012.12.1/arm-cortexa9-linux-gnueabihf/gcc-4.7.3-glibc-2.16.0-binutils-2.22-kernel-3.6-sanitized --enable-languages=c,c++ --enable-c99 --enable-long-long --enable-libstdcxx-debug --enable-profile --enable-shared --disable-libssp --enable-checking=release
Thread model: posix
gcc version 4.7.3 20121106 (prerelease) (OSELAS.Toolchain-2012.12.1 linaro-4.7-2012.11)
++ rm rapidjson
++ ln -s rapidjson_1 rapidjson
++ /opt/OSELAS.Toolchain-2012.12.1/arm-cortexa9-linux-gnueabihf/gcc-4.7.3-glibc-2.16.0-binutils-2.22-kernel-3.6-sanitized/bin/arm-cortexa9-linux-gnueabihf-g++ -c -g -D_DEBUG -std=c++11 -DBYTE_ORDER=1234 -D_POSIX_C_SOURCE=200809L -D__STDC_CONSTANT_MACROS -Wall -Wextra -pedantic -Wmissing-declarations -Wpointer-arith -Wwrite-strings -Wformat=2 -Wlogical-op -Wcast-align -Wcast-qual -Wundef -Wmissing-include-dirs -Wfloat-equal -Wconversion main.cpp
In file included from rapidjson/writer.h:7:0,
from main.cpp:3:
rapidjson/internal/itoa.h: In function 'char* rapidjson::internal::u32toa(uint32_t, char*)':
rapidjson/internal/itoa.h:77:50: warning: conversion to 'char' from 'int' may alter its value [-Wconversion]
rapidjson/internal/itoa.h: In function 'char* rapidjson::internal::u64toa(uint64_t, char*)':
rapidjson/internal/itoa.h:204:50: warning: conversion to 'char' from 'int' may alter its value [-Wconversion]
rapidjson/internal/itoa.h:211:56: warning: conversion to 'char' from 'int' may alter its value [-Wconversion]
In file included from rapidjson/reader.h:10:0,
from rapidjson/document.h:4,
from main.cpp:2:
rapidjson/internal/stack.h: In instantiation of 'T* rapidjson::internal::Stack<Allocator>::Push(size_t) [with T = rapidjson::Writer<rapidjson::GenericStringBuffer<rapidjson::UTF8<> > >::Level; Allocator = rapidjson::MemoryPoolAllocator<>; size_t = unsigned int]':
rapidjson/writer.h:134:3: required from 'bool rapidjson::Writer<OutputStream, SourceEncoding, TargetEncoding, Allocator>::StartObject() [with OutputStream = rapidjson::GenericStringBuffer<rapidjson::UTF8<> >; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]'
rapidjson/document.h:1025:4: required from 'bool rapidjson::GenericValue<Encoding, Allocator>::Accept(Handler&) const [with Handler = rapidjson::Writer<rapidjson::GenericStringBuffer<rapidjson::UTF8<> > >; Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]'
main.cpp:55:20: required from here
rapidjson/internal/stack.h:39:43: warning: cast from 'char*' to 'rapidjson::Writer<rapidjson::GenericStringBuffer<rapidjson::UTF8<> > >::Level*' increases required alignment of target type [-Wcast-align]
In file included from main.cpp:3:0:
rapidjson/writer.h: In instantiation of 'bool rapidjson::Writer<OutputStream, SourceEncoding, TargetEncoding, Allocator>::WriteString(const Ch*, rapidjson::SizeType) [with OutputStream = rapidjson::GenericStringBuffer<rapidjson::UTF8<> >; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; rapidjson::Writer<OutputStream, SourceEncoding, TargetEncoding, Allocator>::Ch = char; rapidjson::SizeType = unsigned int]':
rapidjson/writer.h:129:33: required from 'bool rapidjson::Writer<OutputStream, SourceEncoding, TargetEncoding, Allocator>::String(const Ch*, rapidjson::SizeType, bool) [with OutputStream = rapidjson::GenericStringBuffer<rapidjson::UTF8<> >; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; rapidjson::Writer<OutputStream, SourceEncoding, TargetEncoding, Allocator>::Ch = char; rapidjson::SizeType = unsigned int]'
rapidjson/document.h:1028:5: required from 'bool rapidjson::GenericValue<Encoding, Allocator>::Accept(Handler&) const [with Handler = rapidjson::Writer<rapidjson::GenericStringBuffer<rapidjson::UTF8<> > >; Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]'
main.cpp:55:20: required from here
rapidjson/writer.h:315:9: warning: comparison is always true due to limited range of data type [-Wtype-limits]
In file included from rapidjson/reader.h:10:0,
from rapidjson/document.h:4,
from main.cpp:2:
rapidjson/internal/stack.h: In instantiation of 'T* rapidjson::internal::Stack<Allocator>::Top() [with T = rapidjson::Writer<rapidjson::GenericStringBuffer<rapidjson::UTF8<> > >::Level; Allocator = rapidjson::MemoryPoolAllocator<>]':
rapidjson/writer.h:141:3: required from 'bool rapidjson::Writer<OutputStream, SourceEncoding, TargetEncoding, Allocator>::EndObject(rapidjson::SizeType) [with OutputStream = rapidjson::GenericStringBuffer<rapidjson::UTF8<> >; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; rapidjson::SizeType = unsigned int]'
rapidjson/document.h:1033:41: required from 'bool rapidjson::GenericValue<Encoding, Allocator>::Accept(Handler&) const [with Handler = rapidjson::Writer<rapidjson::GenericStringBuffer<rapidjson::UTF8<> > >; Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]'
main.cpp:55:20: required from here
rapidjson/internal/stack.h:54:53: warning: cast from 'char*' to 'rapidjson::Writer<rapidjson::GenericStringBuffer<rapidjson::UTF8<> > >::Level*' increases required alignment of target type [-Wcast-align]
rapidjson/internal/stack.h: In instantiation of 'T* rapidjson::internal::Stack<Allocator>::Pop(size_t) [with T = rapidjson::Writer<rapidjson::GenericStringBuffer<rapidjson::UTF8<> > >::Level; Allocator = rapidjson::MemoryPoolAllocator<>; size_t = unsigned int]':
rapidjson/writer.h:142:3: required from 'bool rapidjson::Writer<OutputStream, SourceEncoding, TargetEncoding, Allocator>::EndObject(rapidjson::SizeType) [with OutputStream = rapidjson::GenericStringBuffer<rapidjson::UTF8<> >; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; rapidjson::SizeType = unsigned int]'
rapidjson/document.h:1033:41: required from 'bool rapidjson::GenericValue<Encoding, Allocator>::Accept(Handler&) const [with Handler = rapidjson::Writer<rapidjson::GenericStringBuffer<rapidjson::UTF8<> > >; Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]'
main.cpp:55:20: required from here
rapidjson/internal/stack.h:48:41: warning: cast from 'char*' to 'rapidjson::Writer<rapidjson::GenericStringBuffer<rapidjson::UTF8<> > >::Level*' increases required alignment of target type [-Wcast-align]
In file included from rapidjson/document.h:4:0,
from main.cpp:2:
rapidjson/reader.h: In instantiation of 'rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::Token rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::Tokenize(rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::Ch) [with SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::Ch = char]':
rapidjson/reader.h:1246:32: required from 'rapidjson::ParseResult rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::IterativeParse(InputStream&, Handler&) [with unsigned int parseFlags = 0u; InputStream = rapidjson::GenericInsituStringStream<rapidjson::UTF8<> >; Handler = Handler; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]'
rapidjson/reader.h:351:49: required from 'rapidjson::ParseResult rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::Parse(InputStream&, Handler&) [with unsigned int parseFlags = 0u; InputStream = rapidjson::GenericInsituStringStream<rapidjson::UTF8<> >; Handler = Handler; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]'
rapidjson/reader.h:393:47: required from 'rapidjson::ParseResult rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::Parse(InputStream&, Handler&) [with InputStream = rapidjson::GenericInsituStringStream<rapidjson::UTF8<> >; Handler = Handler; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]'
main.cpp:34:55: required from here
rapidjson/reader.h:919:3: warning: comparison is always true due to limited range of data type [-Wtype-limits]
In file included from rapidjson/reader.h:10:0,
from rapidjson/document.h:4,
from main.cpp:2:
rapidjson/internal/stack.h: In instantiation of 'T* rapidjson::internal::Stack<Allocator>::Push(size_t) [with T = unsigned int; Allocator = rapidjson::MemoryPoolAllocator<>; size_t = unsigned int]':
rapidjson/reader.h:1109:4: required from 'rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::IterativeParsingState rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::Transit(rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::IterativeParsingState, rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::Token, rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::IterativeParsingState, InputStream&, Handler&) [with unsigned int parseFlags = 0u; InputStream = rapidjson::GenericInsituStringStream<rapidjson::UTF8<> >; Handler = Handler; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]'
rapidjson/reader.h:1248:74: required from 'rapidjson::ParseResult rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::IterativeParse(InputStream&, Handler&) [with unsigned int parseFlags = 0u; InputStream = rapidjson::GenericInsituStringStream<rapidjson::UTF8<> >; Handler = Handler; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]'
rapidjson/reader.h:351:49: required from 'rapidjson::ParseResult rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::Parse(InputStream&, Handler&) [with unsigned int parseFlags = 0u; InputStream = rapidjson::GenericInsituStringStream<rapidjson::UTF8<> >; Handler = Handler; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]'
rapidjson/reader.h:393:47: required from 'rapidjson::ParseResult rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::Parse(InputStream&, Handler&) [with InputStream = rapidjson::GenericInsituStringStream<rapidjson::UTF8<> >; Handler = Handler; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]'
main.cpp:34:55: required from here
rapidjson/internal/stack.h:39:43: warning: cast from 'char*' to 'unsigned int*' increases required alignment of target type [-Wcast-align]
rapidjson/internal/stack.h: In instantiation of 'T* rapidjson::internal::Stack<Allocator>::Top() [with T = unsigned int; Allocator = rapidjson::MemoryPoolAllocator<>]':
rapidjson/reader.h:1160:4: required from 'rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::IterativeParsingState rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::Transit(rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::IterativeParsingState, rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::Token, rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::IterativeParsingState, InputStream&, Handler&) [with unsigned int parseFlags = 0u; InputStream = rapidjson::GenericInsituStringStream<rapidjson::UTF8<> >; Handler = Handler; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]'
rapidjson/reader.h:1248:74: required from 'rapidjson::ParseResult rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::IterativeParse(InputStream&, Handler&) [with unsigned int parseFlags = 0u; InputStream = rapidjson::GenericInsituStringStream<rapidjson::UTF8<> >; Handler = Handler; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]'
rapidjson/reader.h:351:49: required from 'rapidjson::ParseResult rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::Parse(InputStream&, Handler&) [with unsigned int parseFlags = 0u; InputStream = rapidjson::GenericInsituStringStream<rapidjson::UTF8<> >; Handler = Handler; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]'
rapidjson/reader.h:393:47: required from 'rapidjson::ParseResult rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::Parse(InputStream&, Handler&) [with InputStream = rapidjson::GenericInsituStringStream<rapidjson::UTF8<> >; Handler = Handler; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]'
main.cpp:34:55: required from here
rapidjson/internal/stack.h:54:53: warning: cast from 'char*' to 'unsigned int*' increases required alignment of target type [-Wcast-align]
rapidjson/internal/stack.h: In instantiation of 'T* rapidjson::internal::Stack<Allocator>::Pop(size_t) [with T = unsigned int; Allocator = rapidjson::MemoryPoolAllocator<>; size_t = unsigned int]':
rapidjson/reader.h:1166:49: required from 'rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::IterativeParsingState rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::Transit(rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::IterativeParsingState, rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::Token, rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::IterativeParsingState, InputStream&, Handler&) [with unsigned int parseFlags = 0u; InputStream = rapidjson::GenericInsituStringStream<rapidjson::UTF8<> >; Handler = Handler; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]'
rapidjson/reader.h:1248:74: required from 'rapidjson::ParseResult rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::IterativeParse(InputStream&, Handler&) [with unsigned int parseFlags = 0u; InputStream = rapidjson::GenericInsituStringStream<rapidjson::UTF8<> >; Handler = Handler; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]'
rapidjson/reader.h:351:49: required from 'rapidjson::ParseResult rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::Parse(InputStream&, Handler&) [with unsigned int parseFlags = 0u; InputStream = rapidjson::GenericInsituStringStream<rapidjson::UTF8<> >; Handler = Handler; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]'
rapidjson/reader.h:393:47: required from 'rapidjson::ParseResult rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::Parse(InputStream&, Handler&) [with InputStream = rapidjson::GenericInsituStringStream<rapidjson::UTF8<> >; Handler = Handler; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]'
main.cpp:34:55: required from here
rapidjson/internal/stack.h:48:41: warning: cast from 'char*' to 'unsigned int*' increases required alignment of target type [-Wcast-align]
In file included from rapidjson/document.h:4:0,
from main.cpp:2:
rapidjson/reader.h: In instantiation of 'void rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::ParseStringToStream(InputStream&, OutputStream&) [with unsigned int parseFlags = 0u; SEncoding = rapidjson::UTF8<>; TEncoding = rapidjson::UTF8<>; InputStream = rapidjson::GenericInsituStringStream<rapidjson::UTF8<> >; OutputStream = rapidjson::GenericInsituStringStream<rapidjson::UTF8<> >; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]':
rapidjson/reader.h:596:4: required from 'void rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::ParseString(InputStream&, Handler&) [with unsigned int parseFlags = 0u; InputStream = rapidjson::GenericInsituStringStream<rapidjson::UTF8<> >; Handler = Handler; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]'
rapidjson/reader.h:444:4: required from 'void rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::ParseObject(InputStream&, Handler&) [with unsigned int parseFlags = 0u; InputStream = rapidjson::GenericInsituStringStream<rapidjson::UTF8<> >; Handler = Handler; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]'
rapidjson/reader.h:365:15: required from 'rapidjson::ParseResult rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::Parse(InputStream&, Handler&) [with unsigned int parseFlags = 0u; InputStream = rapidjson::GenericInsituStringStream<rapidjson::UTF8<> >; Handler = Handler; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]'
rapidjson/reader.h:393:47: required from 'rapidjson::ParseResult rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::Parse(InputStream&, Handler&) [with InputStream = rapidjson::GenericInsituStringStream<rapidjson::UTF8<> >; Handler = Handler; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]'
main.cpp:34:55: required from here
rapidjson/reader.h:634:5: warning: comparison is always true due to limited range of data type [-Wtype-limits]
rapidjson/reader.h: In instantiation of 'void rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::ParseStringToStream(InputStream&, OutputStream&) [with unsigned int parseFlags = 0u; SEncoding = rapidjson::UTF8<>; TEncoding = rapidjson::UTF8<>; InputStream = rapidjson::GenericInsituStringStream<rapidjson::UTF8<> >; OutputStream = rapidjson::GenericReader<rapidjson::UTF8<>, rapidjson::UTF8<> >::StackStream; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]':
rapidjson/reader.h:605:4: required from 'void rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::ParseString(InputStream&, Handler&) [with unsigned int parseFlags = 0u; InputStream = rapidjson::GenericInsituStringStream<rapidjson::UTF8<> >; Handler = Handler; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]'
rapidjson/reader.h:444:4: required from 'void rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::ParseObject(InputStream&, Handler&) [with unsigned int parseFlags = 0u; InputStream = rapidjson::GenericInsituStringStream<rapidjson::UTF8<> >; Handler = Handler; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]'
rapidjson/reader.h:365:15: required from 'rapidjson::ParseResult rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::Parse(InputStream&, Handler&) [with unsigned int parseFlags = 0u; InputStream = rapidjson::GenericInsituStringStream<rapidjson::UTF8<> >; Handler = Handler; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]'
rapidjson/reader.h:393:47: required from 'rapidjson::ParseResult rapidjson::GenericReader<SourceEncoding, TargetEncoding, Allocator>::Parse(InputStream&, Handler&) [with InputStream = rapidjson::GenericInsituStringStream<rapidjson::UTF8<> >; Handler = Handler; SourceEncoding = rapidjson::UTF8<>; TargetEncoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]'
main.cpp:34:55: required from here
rapidjson/reader.h:634:5: warning: comparison is always true due to limited range of data type [-Wtype-limits]
++ rm rapidjson
++ ln -s rapidjson_2 rapidjson
++ /opt/OSELAS.Toolchain-2012.12.1/arm-cortexa9-linux-gnueabihf/gcc-4.7.3-glibc-2.16.0-binutils-2.22-kernel-3.6-sanitized/bin/arm-cortexa9-linux-gnueabihf-g++ -c -g -D_DEBUG -std=c++11 -DBYTE_ORDER=1234 -D_POSIX_C_SOURCE=200809L -D__STDC_CONSTANT_MACROS -Wall -Wextra -pedantic -Wmissing-declarations -Wpointer-arith -Wwrite-strings -Wformat=2 -Wlogical-op -Wcast-align -Wcast-qual -Wundef -Wmissing-include-dirs -Wfloat-equal -Wconversion main.cpp
++ diff -Naur --exclude=.svn rapidjson_1 rapidjson_2
diff -Naur '--exclude=.svn' rapidjson_1/document.h rapidjson_2/document.h
--- rapidjson_1/document.h 2014-08-21 09:29:03.940987095 +0100
+++ rapidjson_2/document.h 2014-08-18 13:57:48.762218790 +0100
@@ -1405,7 +1405,7 @@
}
static const size_t kDefaultStackCapacity = 1024;
- internal::Stack<Allocator> stack_;
+ internal::Stack<ValueType,Allocator> stack_;
ParseResult parseResult_;
};
diff -Naur '--exclude=.svn' rapidjson_1/internal/itoa.h rapidjson_2/internal/itoa.h
--- rapidjson_1/internal/itoa.h 2014-08-21 09:29:04.104323176 +0100
+++ rapidjson_2/internal/itoa.h 2014-08-18 13:57:48.822994480 +0100
@@ -74,7 +74,7 @@
*buffer++ = cDigitsLut[i + 1];
}
else
- *buffer++ = '0' + static_cast<char>(a);
+ *buffer++ = static_cast<char>('0' + a);
const uint32_t b = value / 10000; // 0 to 9999
const uint32_t c = value % 10000; // 0 to 9999
@@ -201,14 +201,14 @@
value %= UINT64_C(10000000000000000);
if (a < 10)
- *buffer++ = '0' + static_cast<char>(a);
+ *buffer++ = (char)('0' + a);
else if (a < 100) {
const uint32_t i = a << 1;
*buffer++ = cDigitsLut[i];
*buffer++ = cDigitsLut[i + 1];
}
else if (a < 1000) {
- *buffer++ = '0' + static_cast<char>(a / 100);
+ *buffer++ = static_cast<char>('0' + a / 100);
const uint32_t i = (a % 100) << 1;
*buffer++ = cDigitsLut[i];
diff -Naur '--exclude=.svn' rapidjson_1/internal/stack.h rapidjson_2/internal/stack.h
--- rapidjson_1/internal/stack.h 2014-08-21 09:29:04.030263135 +0100
+++ rapidjson_2/internal/stack.h 2014-08-21 15:14:03.535338401 +0100
@@ -10,14 +10,14 @@
//! A type-unsafe stack for storing different types of data.
/*! \tparam Allocator Allocator for allocating stack memory.
*/
-template <typename Allocator>
+template <typename T,typename Allocator>
class Stack {
public:
- Stack(Allocator* allocator, size_t stack_capacity) : allocator_(allocator), own_allocator_(0), stack_(0), stack_top_(0), stack_end_(0), stack_capacity_(stack_capacity) {
+ Stack(Allocator* allocator, size_t stack_capacity) : allocator_(allocator), own_allocator_(0), stack_(0), stack_top_(0), stack_end_(0), stack_capacity_(stack_capacity/sizeof(T)) {
RAPIDJSON_ASSERT(stack_capacity_ > 0);
if (!allocator_)
own_allocator_ = allocator_ = new Allocator();
- stack_top_ = stack_ = (char*)allocator_->Malloc(stack_capacity_);
+ stack_top_ = stack_ = (T*)allocator_->Malloc(stack_capacity_*sizeof(T));
stack_end_ = stack_ + stack_capacity_;
}
@@ -30,31 +30,31 @@
// Optimization note: try to minimize the size of this function for force inline.
// Expansion is run very infrequently, so it is moved to another (probably non-inline) function.
- template<typename T>
+ //template<typename T>
RAPIDJSON_FORCEINLINE T* Push(size_t count = 1) {
// Expand the stack if needed
- if (stack_top_ + sizeof(T) * count >= stack_end_)
- Expand<T>(count);
+ if (stack_top_ + count >= stack_end_)
+ Expand(count);
- T* ret = reinterpret_cast<T*>(stack_top_);
- stack_top_ += sizeof(T) * count;
+ T* ret = stack_top_;
+ stack_top_ += count;
return ret;
}
- template<typename T>
+ //template<typename T>
T* Pop(size_t count) {
- RAPIDJSON_ASSERT(GetSize() >= count * sizeof(T));
- stack_top_ -= count * sizeof(T);
+ RAPIDJSON_ASSERT(GetSize() >= count);
+ stack_top_ -= count;
return reinterpret_cast<T*>(stack_top_);
}
- template<typename T>
+ //template<typename T>
T* Top() {
- RAPIDJSON_ASSERT(GetSize() >= sizeof(T));
- return reinterpret_cast<T*>(stack_top_ - sizeof(T));
+ RAPIDJSON_ASSERT(GetSize() >= 1);
+ return reinterpret_cast<T*>(stack_top_ - 1);
}
- template<typename T>
+ //template<typename T>
T* Bottom() { return (T*)stack_; }
Allocator& GetAllocator() { return *allocator_; }
@@ -63,14 +63,14 @@
size_t GetCapacity() const { return stack_capacity_; }
private:
- template<typename T>
+ //template<typename T>
void Expand(size_t count) {
size_t new_capacity = stack_capacity_ * 2;
size_t size = GetSize();
- size_t new_size = GetSize() + sizeof(T) * count;
+ size_t new_size = GetSize() + count;
if (new_capacity < new_size)
new_capacity = new_size;
- stack_ = (char*)allocator_->Realloc(stack_, stack_capacity_, new_capacity);
+ stack_ = (T*)allocator_->Realloc(stack_, stack_capacity_*sizeof(T), new_capacity * sizeof(T));
stack_capacity_ = new_capacity;
stack_top_ = stack_ + size;
stack_end_ = stack_ + stack_capacity_;
@@ -82,9 +82,9 @@
Allocator* allocator_;
Allocator* own_allocator_;
- char *stack_;
- char *stack_top_;
- char *stack_end_;
+ T *stack_;
+ T *stack_top_;
+ T *stack_end_;
size_t stack_capacity_;
};
diff -Naur '--exclude=.svn' rapidjson_1/reader.h rapidjson_2/reader.h
--- rapidjson_1/reader.h 2014-08-21 09:29:04.667779746 +0100
+++ rapidjson_2/reader.h 2014-08-18 13:57:49.406770223 +0100
@@ -572,12 +572,12 @@
public:
typedef typename TargetEncoding::Ch Ch;
- StackStream(internal::Stack<Allocator>& stack) : stack_(stack), length_(0) {}
+ StackStream(internal::Stack<Ch,Allocator>& stack) : stack_(stack), length_(0) {}
RAPIDJSON_FORCEINLINE void Put(Ch c) {
- *stack_.template Push<Ch>() = c;
+ *stack_.Push() = c;
++length_;
}
- internal::Stack<Allocator>& stack_;
+ internal::Stack<Ch,Allocator>& stack_;
SizeType length_;
private:
@@ -604,7 +604,7 @@
StackStream stackStream(stack_);
ParseStringToStream<parseFlags, SourceEncoding, TargetEncoding>(s, stackStream);
RAPIDJSON_PARSE_ERROR_EARLY_RETURN_VOID;
- if (!handler.String(stack_.template Pop<typename TargetEncoding::Ch>(stackStream.length_), stackStream.length_ - 1, true))
+ if (!handler.String(stack_.Pop(stackStream.length_), stackStream.length_ - 1, true))
RAPIDJSON_PARSE_ERROR(kParseErrorTermination, s.Tell());
}
}
@@ -631,7 +631,7 @@
if (c == '\\') { // Escape
is.Take();
Ch e = is.Take();
- if ((sizeof(Ch) == 1 || unsigned(e) < 256) && escape[(unsigned char)e]) {
+ if ((sizeof(Ch) == 1 || ((c & 0xFF) == c) ) && escape[(unsigned char)e]) {
os.Put(escape[(unsigned char)e]);
}
else if (e == 'u') { // Unicode
@@ -916,7 +916,7 @@
#undef N
#undef N16
- if (sizeof(Ch) == 1 || unsigned(c) < 256)
+ if (sizeof(Ch) == 1 || ((c & 0xFF) == c) )
return (Token)tokenMap[(unsigned char)c];
else
return NumberToken;
@@ -1106,9 +1106,9 @@
else if (src == IterativeParsingKeyValueDelimiterState)
n = IterativeParsingMemberValueState;
// Push current state.
- *stack_.template Push<SizeType>(1) = n;
+ *stack_.Push(1) = n;
// Initialize and push the member/element count.
- *stack_.template Push<SizeType>(1) = 0;
+ *stack_.Push(1) = 0;
// Call handler
bool hr = (dst == IterativeParsingObjectInitialState) ? handler.StartObject() : handler.StartArray();
// On handler short circuits the parsing.
@@ -1157,18 +1157,18 @@
case IterativeParsingElementDelimiterState:
is.Take();
// Update member/element count.
- *stack_.template Top<SizeType>() = *stack_.template Top<SizeType>() + 1;
+ *stack_.Top() = (typename TargetEncoding::Ch)(*stack_.Top() + 1);
return dst;
case IterativeParsingObjectFinishState:
{
// Get member count.
- SizeType c = *stack_.template Pop<SizeType>(1);
+ SizeType c = *stack_.Pop(1);
// If the object is not empty, count the last member.
if (src == IterativeParsingMemberValueState)
++c;
// Restore the state.
- IterativeParsingState n = static_cast<IterativeParsingState>(*stack_.template Pop<SizeType>(1));
+ IterativeParsingState n = static_cast<IterativeParsingState>(*stack_.Pop(1));
// Transit to Finish state if this is the topmost scope.
if (n == IterativeParsingStartState)
n = IterativeParsingFinishState;
@@ -1188,12 +1188,12 @@
case IterativeParsingArrayFinishState:
{
// Get element count.
- SizeType c = *stack_.template Pop<SizeType>(1);
+ SizeType c = *stack_.Pop(1);
// If the array is not empty, count the last element.
if (src == IterativeParsingElementState)
++c;
// Restore the state.
- IterativeParsingState n = static_cast<IterativeParsingState>(*stack_.template Pop<SizeType>(1));
+ IterativeParsingState n = static_cast<IterativeParsingState>(*stack_.Pop(1));
// Transit to Finish state if this is the topmost scope.
if (n == IterativeParsingStartState)
n = IterativeParsingFinishState;
@@ -1269,7 +1269,7 @@
}
static const size_t kDefaultStackCapacity = 256; //!< Default stack capacity in bytes for storing a single decoded string.
- internal::Stack<Allocator> stack_; //!< A stack for storing decoded string temporarily during non-destructive parsing.
+ internal::Stack<typename TargetEncoding::Ch,Allocator> stack_; //!< A stack for storing decoded string temporarily during non-destructive parsing.
ParseResult parseResult_;
}; // class GenericReader
diff -Naur '--exclude=.svn' rapidjson_1/stringbuffer.h rapidjson_2/stringbuffer.h
--- rapidjson_1/stringbuffer.h 2014-08-21 09:29:04.621450889 +0100
+++ rapidjson_2/stringbuffer.h 2014-08-20 10:50:05.488896697 +0100
@@ -18,25 +18,25 @@
GenericStringBuffer(Allocator* allocator = 0, size_t capacity = kDefaultCapacity) : stack_(allocator, capacity) {}
- void Put(Ch c) { *stack_.template Push<Ch>() = c; }
+ void Put(Ch c) { *stack_.Push() = c; }
void Flush() {}
void Clear() { stack_.Clear(); }
- Ch* Push(size_t count) { return stack_.template Push<Ch>(count); }
- void Pop(size_t count) { stack_.template Pop<Ch>(count); }
+ Ch* Push(size_t count) { return stack_.Push(count); }
+ void Pop(size_t count) { stack_.Pop(count); }
const Ch* GetString() const {
// Push and pop a null terminator. This is safe.
- *stack_.template Push<Ch>() = '\0';
- stack_.template Pop<Ch>(1);
+ *stack_.Push() = '\0';
+ stack_.Pop(1);
- return stack_.template Bottom<Ch>();
+ return stack_.Bottom();
}
- size_t GetSize() const { return stack_.GetSize(); }
+ size_t GetSize() const { return stack_.GetSize() * sizeof(Ch); }
static const size_t kDefaultCapacity = 256;
- mutable internal::Stack<Allocator> stack_;
+ mutable internal::Stack<Ch,Allocator> stack_;
};
//! String buffer with UTF8 encoding
@@ -45,7 +45,7 @@
//! Implement specialized version of PutN() with memset() for better performance.
template<>
inline void PutN(GenericStringBuffer<UTF8<> >& stream, char c, size_t n) {
- memset(stream.stack_.Push<char>(n), c, n * sizeof(c));
+ memset(stream.stack_.Push(n), c, n * sizeof(c));
}
} // namespace rapidjson
diff -Naur '--exclude=.svn' rapidjson_1/writer.h rapidjson_2/writer.h
--- rapidjson_1/writer.h 2014-08-21 09:29:03.888829377 +0100
+++ rapidjson_2/writer.h 2014-08-18 16:21:52.983248448 +0100
@@ -131,15 +131,15 @@
bool StartObject() {
Prefix(kObjectType);
- new (level_stack_.template Push<Level>()) Level(false);
+ new (level_stack_.Push()) Level(false);
return WriteStartObject();
}
bool EndObject(SizeType memberCount = 0) {
(void)memberCount;
- RAPIDJSON_ASSERT(level_stack_.GetSize() >= sizeof(Level));
- RAPIDJSON_ASSERT(!level_stack_.template Top<Level>()->inArray);
- level_stack_.template Pop<Level>(1);
+ RAPIDJSON_ASSERT(level_stack_.GetSize() >= 1);
+ RAPIDJSON_ASSERT(!level_stack_.Top()->inArray);
+ level_stack_.Pop(1);
bool ret = WriteEndObject();
if (level_stack_.Empty()) // end of json text
os_->Flush();
@@ -148,15 +148,15 @@
bool StartArray() {
Prefix(kArrayType);
- new (level_stack_.template Push<Level>()) Level(true);
+ new (level_stack_.Push()) Level(true);
return WriteStartArray();
}
bool EndArray(SizeType elementCount = 0) {
(void)elementCount;
- RAPIDJSON_ASSERT(level_stack_.GetSize() >= sizeof(Level));
- RAPIDJSON_ASSERT(level_stack_.template Top<Level>()->inArray);
- level_stack_.template Pop<Level>(1);
+ RAPIDJSON_ASSERT(level_stack_.GetSize() >= 1);
+ RAPIDJSON_ASSERT(level_stack_.Top()->inArray);
+ level_stack_.Pop(1);
bool ret = WriteEndArray();
if (level_stack_.Empty()) // end of json text
os_->Flush();
@@ -312,7 +312,7 @@
else
return false; // invalid code point
}
- else if ((sizeof(Ch) == 1 || (unsigned)c < 256) && escape[(unsigned char)c]) {
+ else if ( ((sizeof(Ch) == 1) | ((c & 0xFF) == c)) && escape[(unsigned char)c]) {
is.Take();
os_->Put('\\');
os_->Put(escape[(unsigned char)c]);
@@ -338,7 +338,7 @@
void Prefix(Type type) {
(void)type;
if (level_stack_.GetSize() != 0) { // this value is not at root
- Level* level = level_stack_.template Top<Level>();
+ Level* level = level_stack_.Top();
if (level->valueCount > 0) {
if (level->inArray)
os_->Put(','); // add comma if it is not the first element in array
@@ -357,7 +357,7 @@
}
OutputStream* os_;
- internal::Stack<Allocator> level_stack_;
+ internal::Stack<Level,Allocator> level_stack_;
int doublePrecision_;
bool hasRoot_;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment