diff --git a/emscripten/a.cpp b/emscripten/a.cpp new file mode 100644 index 0000000..9114857 --- /dev/null +++ b/emscripten/a.cpp @@ -0,0 +1,24 @@ +#include +#include +#include +#include + +#define private public +#include "rapidjson/document.h" + +int main() { + // std::ifstream in_file("config.json", std::ios::in); + rapidjson::Document json_config_; + // std::string json_string( + // (std::istreambuf_iterator(in_file)), + // std::istreambuf_iterator()); + std::string json_string("{\"float_test\": 75.0}"); + // if (!json_string.empty()) { + json_config_.Parse(json_string.c_str()); + // } + + printf("%p\n", &json_config_); + printf("%p\n", &json_config_.data_.o.members[0].value.data_.n.d); + + std::cout << json_config_["float_test"].GetDouble() << std::endl; +} \ No newline at end of file diff --git a/include/rapidjson/allocators.h b/include/rapidjson/allocators.h index f615ffd..6be2776 100644 --- a/include/rapidjson/allocators.h +++ b/include/rapidjson/allocators.h @@ -181,7 +181,7 @@ public: if (chunkHead_ == 0 || chunkHead_->size + size > chunkHead_->capacity) AddChunk(chunk_capacity_ > size ? chunk_capacity_ : size); - void *buffer = reinterpret_cast(chunkHead_ + 1) + chunkHead_->size; + void *buffer = reinterpret_cast(chunkHead_) + RAPIDJSON_ALIGN(sizeof(ChunkHeader)) + chunkHead_->size; chunkHead_->size += size; return buffer; } @@ -199,7 +199,7 @@ public: return originalPtr; // Simply expand it if it is the last allocation and there is sufficient space - if (originalPtr == (char *)(chunkHead_ + 1) + chunkHead_->size - originalSize) { + if (originalPtr == (char *)(chunkHead_) + RAPIDJSON_ALIGN(sizeof(ChunkHeader)) + chunkHead_->size - originalSize) { size_t increment = static_cast(newSize - originalSize); increment = RAPIDJSON_ALIGN(increment); if (chunkHead_->size + increment <= chunkHead_->capacity) { @@ -231,7 +231,7 @@ private: void AddChunk(size_t capacity) { if (!baseAllocator_) ownBaseAllocator_ = baseAllocator_ = RAPIDJSON_NEW(BaseAllocator()); - ChunkHeader* chunk = reinterpret_cast(baseAllocator_->Malloc(sizeof(ChunkHeader) + capacity)); + ChunkHeader* chunk = reinterpret_cast(baseAllocator_->Malloc(RAPIDJSON_ALIGN(sizeof(ChunkHeader)) + capacity)); chunk->capacity = capacity; chunk->size = 0; chunk->next = chunkHead_; diff --git a/include/rapidjson/rapidjson.h b/include/rapidjson/rapidjson.h index f5d5630..b0dabc7 100644 --- a/include/rapidjson/rapidjson.h +++ b/include/rapidjson/rapidjson.h @@ -223,7 +223,7 @@ //! Whether using 64-bit architecture #ifndef RAPIDJSON_64BIT -#if defined(__LP64__) || defined(_WIN64) +#if defined(__LP64__) || defined(_WIN64) || defined(__EMSCRIPTEN__) #define RAPIDJSON_64BIT 1 #else #define RAPIDJSON_64BIT 0