Skip to content

Commit

Permalink
Merge pull request #811 from glebov-andrey/improved_new_macro
Browse files Browse the repository at this point in the history
Improved customization of RAPIDJSON_NEW macro
  • Loading branch information
miloyip committed Dec 23, 2016
2 parents 014097e + 41ceb86 commit 369e07d
Show file tree
Hide file tree
Showing 8 changed files with 24 additions and 21 deletions.
2 changes: 1 addition & 1 deletion include/rapidjson/allocators.h
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ class MemoryPoolAllocator {
*/
bool AddChunk(size_t capacity) {
if (!baseAllocator_)
ownBaseAllocator_ = baseAllocator_ = RAPIDJSON_NEW(BaseAllocator());
ownBaseAllocator_ = baseAllocator_ = RAPIDJSON_NEW(BaseAllocator)();
if (ChunkHeader* chunk = reinterpret_cast<ChunkHeader*>(baseAllocator_->Malloc(RAPIDJSON_ALIGN(sizeof(ChunkHeader)) + capacity))) {
chunk->capacity = capacity;
chunk->size = 0;
Expand Down
4 changes: 2 additions & 2 deletions include/rapidjson/document.h
Original file line number Diff line number Diff line change
Expand Up @@ -2088,7 +2088,7 @@ class GenericDocument : public GenericValue<Encoding, Allocator> {
GenericValue<Encoding, Allocator>(type), allocator_(allocator), ownAllocator_(0), stack_(stackAllocator, stackCapacity), parseResult_()
{
if (!allocator_)
ownAllocator_ = allocator_ = RAPIDJSON_NEW(Allocator());
ownAllocator_ = allocator_ = RAPIDJSON_NEW(Allocator)();
}

//! Constructor
Expand All @@ -2101,7 +2101,7 @@ class GenericDocument : public GenericValue<Encoding, Allocator> {
allocator_(allocator), ownAllocator_(0), stack_(stackAllocator, stackCapacity), parseResult_()
{
if (!allocator_)
ownAllocator_ = allocator_ = RAPIDJSON_NEW(Allocator());
ownAllocator_ = allocator_ = RAPIDJSON_NEW(Allocator)();
}

#if RAPIDJSON_HAS_CXX11_RVALUE_REFS
Expand Down
2 changes: 1 addition & 1 deletion include/rapidjson/internal/regex.h
Original file line number Diff line number Diff line change
Expand Up @@ -606,7 +606,7 @@ class GenericRegexSearch {
{
RAPIDJSON_ASSERT(regex_.IsValid());
if (!allocator_)
ownAllocator_ = allocator_ = RAPIDJSON_NEW(Allocator());
ownAllocator_ = allocator_ = RAPIDJSON_NEW(Allocator)();
stateSet_ = static_cast<unsigned*>(allocator_->Malloc(GetStateSetSize()));
state0_.template Reserve<SizeType>(regex_.stateCount_);
state1_.template Reserve<SizeType>(regex_.stateCount_);
Expand Down
2 changes: 1 addition & 1 deletion include/rapidjson/internal/stack.h
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ class Stack {
size_t newCapacity;
if (stack_ == 0) {
if (!allocator_)
ownAllocator_ = allocator_ = RAPIDJSON_NEW(Allocator());
ownAllocator_ = allocator_ = RAPIDJSON_NEW(Allocator)();
newCapacity = initialCapacity_;
} else {
newCapacity = GetCapacity();
Expand Down
4 changes: 2 additions & 2 deletions include/rapidjson/pointer.h
Original file line number Diff line number Diff line change
Expand Up @@ -758,7 +758,7 @@ class GenericPointer {
*/
Ch* CopyFromRaw(const GenericPointer& rhs, size_t extraToken = 0, size_t extraNameBufferSize = 0) {
if (!allocator_) // allocator is independently owned.
ownAllocator_ = allocator_ = RAPIDJSON_NEW(Allocator());
ownAllocator_ = allocator_ = RAPIDJSON_NEW(Allocator)();

size_t nameBufferSize = rhs.tokenCount_; // null terminators for tokens
for (Token *t = rhs.tokens_; t != rhs.tokens_ + rhs.tokenCount_; ++t)
Expand Down Expand Up @@ -806,7 +806,7 @@ class GenericPointer {

// Create own allocator if user did not supply.
if (!allocator_)
ownAllocator_ = allocator_ = RAPIDJSON_NEW(Allocator());
ownAllocator_ = allocator_ = RAPIDJSON_NEW(Allocator)();

// Count number of '/' as tokenCount
tokenCount_ = 0;
Expand Down
2 changes: 1 addition & 1 deletion include/rapidjson/rapidjson.h
Original file line number Diff line number Diff line change
Expand Up @@ -583,7 +583,7 @@ RAPIDJSON_NAMESPACE_END

#ifndef RAPIDJSON_NEW
///! customization point for global \c new
#define RAPIDJSON_NEW(x) new x
#define RAPIDJSON_NEW(TypeName) new TypeName
#endif
#ifndef RAPIDJSON_DELETE
///! customization point for global \c delete
Expand Down
4 changes: 2 additions & 2 deletions include/rapidjson/schema.h
Original file line number Diff line number Diff line change
Expand Up @@ -1344,7 +1344,7 @@ class GenericSchemaDocument {
schemaRef_(allocator, kInitialSchemaRefSize)
{
if (!allocator_)
ownAllocator_ = allocator_ = RAPIDJSON_NEW(Allocator());
ownAllocator_ = allocator_ = RAPIDJSON_NEW(Allocator)();

typeless_ = static_cast<SchemaType*>(allocator_->Malloc(sizeof(SchemaType)));
new (typeless_) SchemaType(this, PointerType(), ValueType(kObjectType).Move(), ValueType(kObjectType).Move(), 0);
Expand Down Expand Up @@ -1823,7 +1823,7 @@ RAPIDJSON_MULTILINEMACRO_END

StateAllocator& GetStateAllocator() {
if (!stateAllocator_)
stateAllocator_ = ownStateAllocator_ = RAPIDJSON_NEW(StateAllocator());
stateAllocator_ = ownStateAllocator_ = RAPIDJSON_NEW(StateAllocator)();
return *stateAllocator_;
}

Expand Down
25 changes: 14 additions & 11 deletions test/unittest/fwdtest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,9 @@ struct Foo {
#include "rapidjson/prettywriter.h"
#include "rapidjson/schema.h" // -> pointer.h

typedef Transcoder<UTF8<>, UTF8<> > TranscoderUtf8ToUtf8;
typedef BaseReaderHandler<UTF8<>, void> BaseReaderHandlerUtf8Void;

Foo::Foo() :
// encodings.h
utf8(RAPIDJSON_NEW(UTF8<>)),
Expand All @@ -111,40 +114,40 @@ Foo::Foo() :
utf32le(RAPIDJSON_NEW(UTF32LE<>)),
ascii(RAPIDJSON_NEW(ASCII<>)),
autoutf(RAPIDJSON_NEW(AutoUTF<unsigned>)),
transcoder(RAPIDJSON_NEW((Transcoder<UTF8<>, UTF8<> >))),
transcoder(RAPIDJSON_NEW(TranscoderUtf8ToUtf8)),

// allocators.h
crtallocator(RAPIDJSON_NEW(CrtAllocator)),
memorypoolallocator(RAPIDJSON_NEW(MemoryPoolAllocator<>)),

// stream.h
stringstream(RAPIDJSON_NEW(StringStream(0))),
insitustringstream(RAPIDJSON_NEW(InsituStringStream(0))),
stringstream(RAPIDJSON_NEW(StringStream)(NULL)),
insitustringstream(RAPIDJSON_NEW(InsituStringStream)(NULL)),

// stringbuffer.h
stringbuffer(RAPIDJSON_NEW(StringBuffer)),

// // filereadstream.h
// filereadstream(RAPIDJSON_NEW(FileReadStream(stdout, buffer, sizeof(buffer)))),
// filereadstream(RAPIDJSON_NEW(FileReadStream)(stdout, buffer, sizeof(buffer))),

// // filewritestream.h
// filewritestream(RAPIDJSON_NEW(FileWriteStream(stdout, buffer, sizeof(buffer)))),
// filewritestream(RAPIDJSON_NEW(FileWriteStream)(stdout, buffer, sizeof(buffer))),

// memorybuffer.h
memorybuffer(RAPIDJSON_NEW(MemoryBuffer)),

// memorystream.h
memorystream(RAPIDJSON_NEW(MemoryStream(0, 0))),
memorystream(RAPIDJSON_NEW(MemoryStream)(NULL, 0)),

// reader.h
basereaderhandler(RAPIDJSON_NEW((BaseReaderHandler<UTF8<>, void>))),
basereaderhandler(RAPIDJSON_NEW(BaseReaderHandlerUtf8Void)),
reader(RAPIDJSON_NEW(Reader)),

// writer.h
writer(RAPIDJSON_NEW((Writer<StringBuffer>))),
writer(RAPIDJSON_NEW(Writer<StringBuffer>)),

// prettywriter.h
prettywriter(RAPIDJSON_NEW((PrettyWriter<StringBuffer>))),
prettywriter(RAPIDJSON_NEW(PrettyWriter<StringBuffer>)),

// document.h
value(RAPIDJSON_NEW(Value)),
Expand All @@ -154,8 +157,8 @@ Foo::Foo() :
pointer(RAPIDJSON_NEW(Pointer)),

// schema.h
schemadocument(RAPIDJSON_NEW(SchemaDocument(*document))),
schemavalidator(RAPIDJSON_NEW(SchemaValidator(*schemadocument)))
schemadocument(RAPIDJSON_NEW(SchemaDocument)(*document)),
schemavalidator(RAPIDJSON_NEW(SchemaValidator)(*schemadocument))
{

}
Expand Down

0 comments on commit 369e07d

Please sign in to comment.