diff --git a/.clangd b/.clangd
index 86962fdf3..df5af657c 100644
--- a/.clangd
+++ b/.clangd
@@ -25,6 +25,7 @@ CompileFlags:
Diagnostics:
Suppress:
- pp_including_mainfile_in_preamble
+ - unused-includes
---
# Amalgamated files that require or partly define an implementation
If:
diff --git a/.github/workflows/aarch64.yml b/.github/workflows/aarch64.yml
new file mode 100644
index 000000000..e50544919
--- /dev/null
+++ b/.github/workflows/aarch64.yml
@@ -0,0 +1,29 @@
+name: Ubuntu ppc64le (GCC 11)
+
+on:
+ push:
+ branches:
+ - master
+ pull_request:
+ branches:
+ - master
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: uraimo/run-on-arch-action@v2
+ name: Test
+ id: runcmd
+ with:
+ arch: aarch64
+ distro: ubuntu_latest
+ githubToken: ${{ github.token }}
+ install: |
+ apt-get update -q -y
+ apt-get install -y cmake make g++
+ run: |
+ cmake -DSIMDJSON_SANITIZE_UNDEFINED=ON -DSIMDJSON_DEVELOPER_MODE=ON -DSIMDJSON_COMPETITION=OFF -B build
+ cmake --build build -j=2
+ ctest --output-on-failure --test-dir build
diff --git a/.github/workflows/cifuzz.yml b/.github/workflows/cifuzz.yml
index 5be64bb36..c0addddaf 100644
--- a/.github/workflows/cifuzz.yml
+++ b/.github/workflows/cifuzz.yml
@@ -17,7 +17,7 @@ jobs:
fuzz-seconds: 600
dry-run: false
- name: Upload Crash
- uses: actions/upload-artifact@v1
+ uses: actions/upload-artifact@v4
if: failure() && steps.build.outcome == 'success'
with:
name: artifacts
diff --git a/.github/workflows/fix-trailing-whitespace.yml b/.github/workflows/fix-trailing-whitespace.yml
index a4f7fc227..a68409813 100644
--- a/.github/workflows/fix-trailing-whitespace.yml
+++ b/.github/workflows/fix-trailing-whitespace.yml
@@ -24,7 +24,7 @@ jobs:
echo "no trailing whitespace found, good!"
fi
- name: Archive whitespace patch
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v4
if: always()
with:
name: whitespace-patch
diff --git a/.github/workflows/msys2.yml b/.github/workflows/msys2.yml
index 3372a6994..41b3a9236 100644
--- a/.github/workflows/msys2.yml
+++ b/.github/workflows/msys2.yml
@@ -22,7 +22,7 @@ jobs:
- msystem: "MINGW64"
install: mingw-w64-x86_64-cmake mingw-w64-x86_64-ninja mingw-w64-x86_64-gcc
type: Debug
- - msystem: "MINGW64"
+ - msystem: "MINGW64"
install: mingw-w64-x86_64-cmake mingw-w64-x86_64-ninja mingw-w64-x86_64-gcc
type: RelWithDebInfo
env:
diff --git a/.github/workflows/ppc64.yml b/.github/workflows/ppc64.yml
index 36f30331f..3c022f499 100644
--- a/.github/workflows/ppc64.yml
+++ b/.github/workflows/ppc64.yml
@@ -24,6 +24,6 @@ jobs:
apt-get update -q -y
apt-get install -y cmake make g++
run: |
- cmake -DCMAKE_BUILD_TYPE=Release -B build
+ cmake -DCMAKE_BUILD_TYPE=Release -DSIMDJSON_DEVELOPER_MODE=ON -DSIMDJSON_COMPETITION=OFF -B build
cmake --build build -j=2
ctest --output-on-failure --test-dir build
diff --git a/.github/workflows/riscv64.yml b/.github/workflows/riscv64.yml
index 1dc214187..2abe22e38 100644
--- a/.github/workflows/riscv64.yml
+++ b/.github/workflows/riscv64.yml
@@ -24,6 +24,6 @@ jobs:
apt-get update -q -y
apt-get install -y cmake make g++
run: |
- cmake -DCMAKE_BUILD_TYPE=Release -B build
+ cmake -DCMAKE_BUILD_TYPE=Release -DSIMDJSON_DEVELOPER_MODE=ON -DSIMDJSON_COMPETITION=OFF -B build
cmake --build build -j=2
ctest --output-on-failure --test-dir build
diff --git a/.github/workflows/s390x.yml b/.github/workflows/s390x.yml
index a750a6e4c..ea7c28aa5 100644
--- a/.github/workflows/s390x.yml
+++ b/.github/workflows/s390x.yml
@@ -24,6 +24,6 @@ jobs:
apt-get update -q -y
apt-get install -y cmake make g++
run: |
- cmake -DCMAKE_BUILD_TYPE=Release -B build
+ cmake -DCMAKE_BUILD_TYPE=Release -DSIMDJSON_DEVELOPER_MODE=ON -DSIMDJSON_COMPETITION=OFF -B build
cmake --build build -j=2
ctest --output-on-failure --test-dir build
diff --git a/.github/workflows/vs17-ci.yml b/.github/workflows/vs17-ci.yml
index 72eb96795..348e75e74 100644
--- a/.github/workflows/vs17-ci.yml
+++ b/.github/workflows/vs17-ci.yml
@@ -26,15 +26,15 @@ jobs:
run: |
cmake -G "${{matrix.gen}}" -A ${{matrix.arch}} -DSIMDJSON_DEVELOPER_MODE=ON -DSIMDJSON_COMPETITION=OFF -DBUILD_SHARED_LIBS=${{matrix.shared}} -B build
- name: Build Debug
- run: cmake --build build --config ${{build_type}} --verbose
+ run: cmake --build build --config ${{matrix.build_type}} --verbose
- name: Run tests
run: |
cd build
- ctest -C ${{build_type}} -LE explicitonly --output-on-failure
+ ctest -C ${{matrix.build_type}} -LE explicitonly --output-on-failure
- name: Install
run: |
- cmake --install build --config ${{build_type}}
+ cmake --install build --config ${{matrix.build_type}}
- name: Test Installation
run: |
cmake -G "${{matrix.gen}}" -A ${{matrix.arch}} -B build_install_test tests/installation_tests/find
- cmake --build build_install_test --config ${{build_type}}
\ No newline at end of file
+ cmake --build build_install_test --config ${{matrix.build_type}}
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
index ffdfabba8..f14cd4866 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -109,23 +109,11 @@
"numbers": "cpp",
"semaphore": "cpp",
"stop_token": "cpp",
- "cfenv": "cpp",
- "format": "cpp",
- "xlocmes": "cpp",
- "xlocmon": "cpp",
- "xlocnum": "cpp",
- "xloctime": "cpp",
- "xutility": "cpp",
- "coroutine": "cpp",
- "xfacet": "cpp",
- "xhash": "cpp",
- "xiosbase": "cpp",
- "xlocale": "cpp",
- "xlocbuf": "cpp",
- "xlocinfo": "cpp",
- "xmemory": "cpp",
- "xstring": "cpp",
- "xtr1common": "cpp",
- "xtree": "cpp"
+ "cfenv": "cpp"
+ },
+ "cmake.configureSettings": {
+ "CMAKE_EXPORT_COMPILE_COMMANDS": "YES",
+ "SIMDJSON_DEVELOPER_MODE": "ON",
+ "SIMDJSON_SINGLEHEADER": "OFF"
}
}
\ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e0b8d49f7..ca23a8a00 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.14)
project(
simdjson
# The version number is modified by tools/release.py
- VERSION 3.10.0
+ VERSION 3.10.1
DESCRIPTION "Parsing gigabytes of JSON per second"
HOMEPAGE_URL "https://simdjson.org/"
LANGUAGES CXX C
@@ -23,7 +23,11 @@ string(
set(SIMDJSON_LIB_VERSION "23.0.0" CACHE STRING "simdjson library version")
set(SIMDJSON_LIB_SOVERSION "23" CACHE STRING "simdjson library soversion")
-option(SIMDJSON_BUILD_STATIC_LIB "Build simdjson_static library along with simdjson" OFF)
+option(SIMDJSON_BUILD_STATIC_LIB "Build simdjson_static library along with simdjson (only makes sense if BUILD_SHARED_LIBS=ON)" OFF)
+if(SIMDJSON_BUILD_STATIC_LIB AND NOT BUILD_SHARED_LIBS)
+ message(WARNING "SIMDJSON_BUILD_STATIC_LIB only makes sense if BUILD_SHARED_LIBS is set to ON")
+ message(WARNING "You might be building and installing a two identical static libraries.")
+endif()
option(SIMDJSON_ENABLE_THREADS "Link with thread support" ON)
@@ -51,6 +55,7 @@ endif()
if(is_top_project)
option(SIMDJSON_DEVELOPER_MODE "Enable targets for developing simdjson" OFF)
option(BUILD_SHARED_LIBS "Build simdjson as a shared library" OFF)
+ option(SIMDJSON_SINGLEHEADER "Disable singleheader generation" ON)
endif()
include(cmake/handle-deprecations.cmake)
@@ -155,11 +160,13 @@ endif()
include(CMakePackageConfigHelpers)
include(GNUInstallDirs)
-install(
- FILES singleheader/simdjson.h
- DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
- COMPONENT simdjson_Development
-)
+if(SIMDJSON_SINGLEHEADER)
+ install(
+ FILES singleheader/simdjson.h
+ DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
+ COMPONENT simdjson_Development
+ )
+endif()
install(
TARGETS simdjson
@@ -203,6 +210,7 @@ if(SIMDJSON_BUILD_STATIC_LIB)
TARGETS simdjson_static
EXPORT simdjson_staticTargets
ARCHIVE COMPONENT simdjson_Development
+ INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
)
install(
EXPORT simdjson_staticTargets
@@ -286,8 +294,9 @@ add_subdirectory(tools) ## This needs to be before tests because of cxxopts
# most of the data has been moved to https://github.com/simdjson/simdjson-data
add_subdirectory(jsonexamples)
-
+if(SIMDJSON_SINGLEHEADER)
add_subdirectory(singleheader)
+endif()
diff --git a/Doxyfile b/Doxyfile
index 764d43421..c1b6de72f 100644
--- a/Doxyfile
+++ b/Doxyfile
@@ -38,7 +38,7 @@ PROJECT_NAME = simdjson
# could be handy for archiving the generated documentation or if some version
# control system is used.
-PROJECT_NUMBER = "3.10.0"
+PROJECT_NUMBER = "3.10.1"
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
diff --git a/README.md b/README.md
index d5ca8c73b..b92c22bb7 100644
--- a/README.md
+++ b/README.md
@@ -201,8 +201,8 @@ For the video inclined,
Funding
-------
-The work is supported by the Natural Sciences and Engineering Research Council of Canada under grant
-number RGPIN-2017-03910.
+The work is supported by the Natural Sciences and Engineering Research Council of Canada under grants
+RGPIN-2017-03910 and RGPIN-2024-03787.
[license]: LICENSE
[license img]: https://img.shields.io/badge/License-Apache%202-blue.svg
diff --git a/doc/parse_many.md b/doc/parse_many.md
index 03cf710eb..f9c20ec14 100644
--- a/doc/parse_many.md
+++ b/doc/parse_many.md
@@ -125,7 +125,7 @@ Whitespace Characters:
- **Nothing**
Some official formats **(non-exhaustive list)**:
-- [Newline-Delimited JSON (NDJSON)](http://ndjson.org/)
+- [Newline-Delimited JSON (NDJSON)](https://github.com/ndjson/ndjson-spec)
- [JSON lines (JSONL)](http://jsonlines.org/)
- [Record separator-delimited JSON (RFC 7464)](https://tools.ietf.org/html/rfc7464) <- Not supported by JsonStream!
- [More on Wikipedia...](https://en.wikipedia.org/wiki/JSON_streaming)
diff --git a/include/simdjson/arm64/bitmanipulation.h b/include/simdjson/arm64/bitmanipulation.h
index 019869b1b..9e78f3caf 100644
--- a/include/simdjson/arm64/bitmanipulation.h
+++ b/include/simdjson/arm64/bitmanipulation.h
@@ -35,6 +35,12 @@ simdjson_inline uint64_t clear_lowest_bit(uint64_t input_num) {
return input_num & (input_num-1);
}
+// We sometimes call leading_zeroes on inputs that are zero,
+// but the algorithms do not end up using the returned value.
+// Sadly, sanitizers are not smart enough to figure it out.
+// Applies only when SIMDJSON_PREFER_REVERSE_BITS is defined and true.
+// (See below.)
+SIMDJSON_NO_SANITIZE_UNDEFINED
/* result might be undefined when input_num is zero */
simdjson_inline int leading_zeroes(uint64_t input_num) {
#ifdef SIMDJSON_REGULAR_VISUAL_STUDIO
diff --git a/include/simdjson/arm64/numberparsing_defs.h b/include/simdjson/arm64/numberparsing_defs.h
index f5e85b747..a765cb9a4 100644
--- a/include/simdjson/arm64/numberparsing_defs.h
+++ b/include/simdjson/arm64/numberparsing_defs.h
@@ -51,6 +51,12 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
} // namespace arm64
} // namespace simdjson
+#ifndef SIMDJSON_SWAR_NUMBER_PARSING
+#if SIMDJSON_IS_BIG_ENDIAN
+#define SIMDJSON_SWAR_NUMBER_PARSING 0
+#else
#define SIMDJSON_SWAR_NUMBER_PARSING 1
+#endif
+#endif
#endif // SIMDJSON_ARM64_NUMBERPARSING_DEFS_H
diff --git a/include/simdjson/common_defs.h b/include/simdjson/common_defs.h
index 9d56db053..595e8015a 100644
--- a/include/simdjson/common_defs.h
+++ b/include/simdjson/common_defs.h
@@ -50,6 +50,8 @@ double from_chars(const char *first, const char* end) noexcept;
#define SIMDJSON_ISALIGNED_N(ptr, n) (((uintptr_t)(ptr) & ((n)-1)) == 0)
#if SIMDJSON_REGULAR_VISUAL_STUDIO
+ // We could use [[deprecated]] but it requires C++14
+ #define simdjson_deprecated __declspec(deprecated)
#define simdjson_really_inline __forceinline
#define simdjson_never_inline __declspec(noinline)
@@ -88,6 +90,8 @@ double from_chars(const char *first, const char* end) noexcept;
#define SIMDJSON_POP_DISABLE_UNUSED_WARNINGS
#else // SIMDJSON_REGULAR_VISUAL_STUDIO
+ // We could use [[deprecated]] but it requires C++14
+ #define simdjson_deprecated __attribute__((deprecated))
#define simdjson_really_inline inline __attribute__((always_inline))
#define simdjson_never_inline inline __attribute__((noinline))
diff --git a/include/simdjson/fallback/numberparsing_defs.h b/include/simdjson/fallback/numberparsing_defs.h
index e807423e6..490a298dd 100644
--- a/include/simdjson/fallback/numberparsing_defs.h
+++ b/include/simdjson/fallback/numberparsing_defs.h
@@ -75,6 +75,12 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
} // namespace fallback
} // namespace simdjson
+#ifndef SIMDJSON_SWAR_NUMBER_PARSING
+#if SIMDJSON_IS_BIG_ENDIAN
+#define SIMDJSON_SWAR_NUMBER_PARSING 0
+#else
#define SIMDJSON_SWAR_NUMBER_PARSING 1
+#endif
+#endif
#endif // SIMDJSON_FALLBACK_NUMBERPARSING_DEFS_H
diff --git a/include/simdjson/generic/numberparsing.h b/include/simdjson/generic/numberparsing.h
index facc2acc6..5b8fdfcd7 100644
--- a/include/simdjson/generic/numberparsing.h
+++ b/include/simdjson/generic/numberparsing.h
@@ -574,7 +574,6 @@ simdjson_unused simdjson_inline simdjson_result get_number_type(con
// Our objective is accurate parsing (ULP of 0) at high speed.
template
simdjson_inline error_code parse_number(const uint8_t *const src, W &writer) {
-
//
// Check for minus sign
//
diff --git a/include/simdjson/generic/ondemand/document-inl.h b/include/simdjson/generic/ondemand/document-inl.h
index cb70c22c4..903aea500 100644
--- a/include/simdjson/generic/ondemand/document-inl.h
+++ b/include/simdjson/generic/ondemand/document-inl.h
@@ -3,17 +3,15 @@
#ifndef SIMDJSON_CONDITIONAL_INCLUDE
#define SIMDJSON_GENERIC_ONDEMAND_DOCUMENT_INL_H
#include "simdjson/generic/ondemand/base.h"
-#include "simdjson/generic/ondemand/array-inl.h"
#include "simdjson/generic/ondemand/array_iterator.h"
#include "simdjson/generic/ondemand/document.h"
-#include "simdjson/generic/ondemand/json_iterator-inl.h"
-#include "simdjson/generic/ondemand/json_path_to_pointer_conversion.h"
-#include "simdjson/generic/ondemand/json_path_to_pointer_conversion-inl.h"
#include "simdjson/generic/ondemand/json_type.h"
-#include "simdjson/generic/ondemand/object-inl.h"
#include "simdjson/generic/ondemand/raw_json_string.h"
#include "simdjson/generic/ondemand/value.h"
#include "simdjson/generic/ondemand/value-inl.h"
+#include "simdjson/generic/ondemand/array-inl.h"
+#include "simdjson/generic/ondemand/json_iterator-inl.h"
+#include "simdjson/generic/ondemand/object-inl.h"
#include "simdjson/generic/ondemand/value_iterator-inl.h"
#include "simdjson/generic/ondemand/deserialize.h"
#endif // SIMDJSON_CONDITIONAL_INCLUDE
@@ -182,7 +180,9 @@ template<> simdjson_inline error_code document::get(value& out) & noexcept { ret
#if SIMDJSON_EXCEPTIONS
template
-simdjson_inline document::operator T() noexcept(false) { return get(); }
+simdjson_deprecated simdjson_inline document::operator T() && noexcept(false) { return get(); }
+template
+simdjson_inline document::operator T() & noexcept(false) { return get(); }
simdjson_inline document::operator array() & noexcept(false) { return get_array(); }
simdjson_inline document::operator object() & noexcept(false) { return get_object(); }
simdjson_inline document::operator uint64_t() noexcept(false) { return get_uint64(); }
@@ -469,7 +469,7 @@ simdjson_inline simdjson_result simdjson_result();
}
template
-simdjson_inline simdjson_result simdjson_result::get() && noexcept {
+simdjson_deprecated simdjson_inline simdjson_result simdjson_result::get() && noexcept {
if (error()) { return error(); }
return std::forward(first).get();
}
@@ -485,7 +485,7 @@ simdjson_inline error_code simdjson_result simdjson_inline simdjson_result simdjson_result::get() & noexcept = delete;
-template<> simdjson_inline simdjson_result simdjson_result::get() && noexcept {
+template<> simdjson_deprecated simdjson_inline simdjson_result simdjson_result::get() && noexcept {
if (error()) { return error(); }
return std::forward(first);
}
diff --git a/include/simdjson/generic/ondemand/document.h b/include/simdjson/generic/ondemand/document.h
index 70b4c36dc..f97c3ce25 100644
--- a/include/simdjson/generic/ondemand/document.h
+++ b/include/simdjson/generic/ondemand/document.h
@@ -205,7 +205,7 @@ public:
* is provided.
*/
template
- simdjson_inline simdjson_result get() &&
+ simdjson_deprecated simdjson_inline simdjson_result get() &&
#ifdef __cpp_concepts
noexcept(deserializable ? nothrow_deserializable : true)
#else
@@ -254,7 +254,7 @@ public:
#endif
}
/** @overload template error_code get(T &out) & noexcept */
- template simdjson_inline error_code get(T &out) && noexcept;
+ template simdjson_deprecated simdjson_inline error_code get(T &out) && noexcept;
#if SIMDJSON_EXCEPTIONS
/**
@@ -267,7 +267,10 @@ public:
* @returns An instance of type T
*/
template
- explicit simdjson_inline operator T() noexcept(false);
+ explicit simdjson_inline operator T() & noexcept(false);
+ template
+ explicit simdjson_deprecated simdjson_inline operator T() && noexcept(false);
+
/**
* Cast this JSON value to an array.
*
@@ -833,7 +836,7 @@ public:
simdjson_inline simdjson_result is_null() noexcept;
template simdjson_inline simdjson_result get() & noexcept;
- template simdjson_inline simdjson_result get() && noexcept;
+ template simdjson_deprecated simdjson_inline simdjson_result get() && noexcept;
template simdjson_inline error_code get(T &out) & noexcept;
template simdjson_inline error_code get(T &out) && noexcept;
diff --git a/include/simdjson/generic/ondemand/document_stream.h b/include/simdjson/generic/ondemand/document_stream.h
index 4a381db34..ef1265fb3 100644
--- a/include/simdjson/generic/ondemand/document_stream.h
+++ b/include/simdjson/generic/ondemand/document_stream.h
@@ -316,7 +316,7 @@ private:
friend class document;
friend class json_iterator;
friend struct simdjson_result;
- friend struct internal::simdjson_result_base;
+ friend struct simdjson::internal::simdjson_result_base;
}; // document_stream
} // namespace ondemand
diff --git a/include/simdjson/generic/ondemand/json_path_to_pointer_conversion-inl.h b/include/simdjson/generic/ondemand/json_path_to_pointer_conversion-inl.h
deleted file mode 100644
index 7a9095483..000000000
--- a/include/simdjson/generic/ondemand/json_path_to_pointer_conversion-inl.h
+++ /dev/null
@@ -1,67 +0,0 @@
-#pragma once
-
-#ifndef SIMDJSON_ONDEMAND_GENERIC_JSON_PATH_TO_POINTER_CONVERSION_INL_H
-#define SIMDJSON_ONDEMAND_GENERIC_JSON_PATH_TO_POINTER_CONVERSION_INL_H
-
-#ifndef SIMDJSON_CONDITIONAL_INCLUDE
-#define SIMDJSON_GENERIC_ONDEMAND_JSON_PATH_TO_POINTER_CONVERSION_INL_H
-#include "simdjson/generic/ondemand/json_path_to_pointer_conversion.h"
-#endif // SIMDJSON_CONDITIONAL_INCLUDE
-
-namespace simdjson {
-namespace SIMDJSON_IMPLEMENTATION {}
-namespace ondemand {
-
-simdjson_inline std::string json_path_to_pointer_conversion(std::string_view json_path) {
- if (json_path.empty() || (json_path.front() != '.' && json_path.front() != '[') {
- return "-1"; // Sentinel value to be handled as an error by the caller.
- }
-
- std::string result;
- // Reserve space to reduce allocations, adjusting for potential increases due
- // to escaping.
- result.reserve(json_path.size() * 2);
-
- // Skip the initial '.' as it's assumed every path starts with it.
- size_t i = 0;
-
- while (i < json_path.length()) {
- if (json_path[i] == '.') {
- result += '/';
- } else if (json_path[i] == '[') {
- result += '/';
- ++i; // Move past the '['
- while (i < json_path.length() && json_path[i] != ']') {
- if (json_path[i] == '~') {
- result += "~0";
- } else if (json_path[i] == '/') {
- result += "~1";
- } else {
- result += json_path[i];
- }
- ++i;
- }
- if (i == json_path.length() || json_path[i] != ']') {
- return "-1"; // Returning sentinel value that will be handled as an error by the caller
- }
- } else {
- if (json_path[i] == '~') {
- result += "~0";
- } else if (json_path[i] == '/') {
- result += "~1";
- } else {
- result += json_path[i];
- }
- }
- ++i;
- }
-
- return simdjson_result(result);
-}
-
-
-} // namespace ondemand
-} // namespace SIMDJSON_IMPLEMENTATION
-} // namespace simdjson
-
-#endif // SIMDJSON_ONDEMAND_GENERIC_JSON_PATH_TO_POINTER_CONVERSION_INL_H
diff --git a/include/simdjson/generic/ondemand/json_path_to_pointer_conversion.h b/include/simdjson/generic/ondemand/json_path_to_pointer_conversion.h
deleted file mode 100644
index cc7b39a0b..000000000
--- a/include/simdjson/generic/ondemand/json_path_to_pointer_conversion.h
+++ /dev/null
@@ -1,22 +0,0 @@
-#pragma once
-
-#ifndef SIMDJSON_ONDEMAND_GENERIC_JSON_PATH_TO_POINTER_CONVERSION_H
-#define SIMDJSON_ONDEMAND_GENERIC_JSON_PATH_TO_POINTER_CONVERSION_H
-
-namespace simdjson {
-namespace SIMDJSON_IMPLEMENTATION {
-namespace internal {
-
-/**
- * Converts JSONPath to JSON Pointer.
- * @param json_path The JSONPath string to be converted.
- * @return A string containing the equivalent JSON Pointer.
- * @throws simdjson_error If the conversion fails.
- */
-simdjson_inline std::string json_path_to_pointer_conversion(std::string_view json_path);
-
-} // namespace internal
-} // namespace SIMDJSON_IMPLEMENTATION
-} // namespace simdjson
-
-#endif // SIMDJSON_JSON_PATH_TO_POINTER_CONVERSION_H
diff --git a/include/simdjson/generic/ondemand/parser.h b/include/simdjson/generic/ondemand/parser.h
index 2dd617686..f1f86d484 100644
--- a/include/simdjson/generic/ondemand/parser.h
+++ b/include/simdjson/generic/ondemand/parser.h
@@ -340,7 +340,7 @@ public:
private:
/** @private [for benchmarking access] The implementation to use */
- std::unique_ptr implementation{};
+ std::unique_ptr implementation{};
size_t _capacity{0};
size_t _max_capacity;
size_t _max_depth{DEFAULT_MAX_DEPTH};
diff --git a/include/simdjson/generic/ondemand/value-inl.h b/include/simdjson/generic/ondemand/value-inl.h
index 2b84810cd..a28809095 100644
--- a/include/simdjson/generic/ondemand/value-inl.h
+++ b/include/simdjson/generic/ondemand/value-inl.h
@@ -6,8 +6,6 @@
#include "simdjson/generic/ondemand/array.h"
#include "simdjson/generic/ondemand/array_iterator.h"
#include "simdjson/generic/ondemand/json_iterator.h"
-#include "simdjson/generic/ondemand/json_path_to_pointer_conversion.h"
-#include "simdjson/generic/ondemand/json_path_to_pointer_conversion-inl.h"
#include "simdjson/generic/ondemand/json_type.h"
#include "simdjson/generic/ondemand/object.h"
#include "simdjson/generic/ondemand/raw_json_string.h"
diff --git a/include/simdjson/generic/ondemand/value_iterator-inl.h b/include/simdjson/generic/ondemand/value_iterator-inl.h
index a8ed2969a..e67bddaeb 100644
--- a/include/simdjson/generic/ondemand/value_iterator-inl.h
+++ b/include/simdjson/generic/ondemand/value_iterator-inl.h
@@ -6,9 +6,9 @@
#include "simdjson/generic/atomparsing.h"
#include "simdjson/generic/numberparsing.h"
#include "simdjson/generic/ondemand/json_iterator.h"
+#include "simdjson/generic/ondemand/value_iterator.h"
#include "simdjson/generic/ondemand/json_type-inl.h"
#include "simdjson/generic/ondemand/raw_json_string-inl.h"
-#include "simdjson/generic/ondemand/value_iterator.h"
#endif // SIMDJSON_CONDITIONAL_INCLUDE
namespace simdjson {
diff --git a/include/simdjson/lasx/numberparsing_defs.h b/include/simdjson/lasx/numberparsing_defs.h
index cb9278261..3c4020c65 100644
--- a/include/simdjson/lasx/numberparsing_defs.h
+++ b/include/simdjson/lasx/numberparsing_defs.h
@@ -36,6 +36,12 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
} // namespace lasx
} // namespace simdjson
+#ifndef SIMDJSON_SWAR_NUMBER_PARSING
+#if SIMDJSON_IS_BIG_ENDIAN
+#define SIMDJSON_SWAR_NUMBER_PARSING 0
+#else
#define SIMDJSON_SWAR_NUMBER_PARSING 1
+#endif
+#endif
#endif // SIMDJSON_LASX_NUMBERPARSING_DEFS_H
diff --git a/include/simdjson/lsx/numberparsing_defs.h b/include/simdjson/lsx/numberparsing_defs.h
index 1dfe4264e..4f90203b2 100644
--- a/include/simdjson/lsx/numberparsing_defs.h
+++ b/include/simdjson/lsx/numberparsing_defs.h
@@ -36,6 +36,12 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
} // namespace lsx
} // namespace simdjson
+#ifndef SIMDJSON_SWAR_NUMBER_PARSING
+#if SIMDJSON_IS_BIG_ENDIAN
+#define SIMDJSON_SWAR_NUMBER_PARSING 0
+#else
#define SIMDJSON_SWAR_NUMBER_PARSING 1
+#endif
+#endif
#endif // SIMDJSON_LSX_NUMBERPARSING_DEFS_H
diff --git a/include/simdjson/padded_string-inl.h b/include/simdjson/padded_string-inl.h
index abb566fa3..a3cf2a102 100644
--- a/include/simdjson/padded_string-inl.h
+++ b/include/simdjson/padded_string-inl.h
@@ -53,6 +53,9 @@ inline padded_string::padded_string(const char *data, size_t length) noexcept
if ((data != nullptr) && (data_ptr != nullptr)) {
std::memcpy(data_ptr, data, length);
}
+ if (data_ptr == nullptr) {
+ viable_size = 0;
+ }
}
#ifdef __cpp_char8_t
inline padded_string::padded_string(const char8_t *data, size_t length) noexcept
@@ -60,12 +63,17 @@ inline padded_string::padded_string(const char8_t *data, size_t length) noexcept
if ((data != nullptr) && (data_ptr != nullptr)) {
std::memcpy(data_ptr, reinterpret_cast(data), length);
}
+ if (data_ptr == nullptr) {
+ viable_size = 0;
+ }
}
#endif
// note: do not pass std::string arguments by value
inline padded_string::padded_string(const std::string & str_ ) noexcept
: viable_size(str_.size()), data_ptr(internal::allocate_padded_buffer(str_.size())) {
- if (data_ptr != nullptr) {
+ if (data_ptr == nullptr) {
+ viable_size = 0;
+ } else {
std::memcpy(data_ptr, str_.data(), str_.size());
}
}
diff --git a/include/simdjson/portability.h b/include/simdjson/portability.h
index ff65aa9de..6aa892eff 100644
--- a/include/simdjson/portability.h
+++ b/include/simdjson/portability.h
@@ -201,4 +201,43 @@ using std::size_t;
#endif
+
+
+#if defined __BYTE_ORDER__ && defined __ORDER_BIG_ENDIAN__
+#define SIMDJSON_IS_BIG_ENDIAN (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
+#elif defined _WIN32
+#define SIMDJSON_IS_BIG_ENDIAN 0
+#else
+#if defined(__APPLE__) || defined(__FreeBSD__)
+#include
+#elif defined(sun) || defined(__sun)
+#include
+#elif defined(__MVS__)
+#include
+#else
+#ifdef __has_include
+#if __has_include()
+#include
+#endif //__has_include()
+#endif //__has_include
+#endif
+#
+#ifndef __BYTE_ORDER__
+// safe choice
+#define SIMDJSON_IS_BIG_ENDIAN 0
+#endif
+#
+#ifndef __ORDER_LITTLE_ENDIAN__
+// safe choice
+#define SIMDJSON_IS_BIG_ENDIAN 0
+#endif
+#
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+#define SIMDJSON_IS_BIG_ENDIAN 0
+#else
+#define SIMDJSON_IS_BIG_ENDIAN 1
+#endif
+#endif
+
+
#endif // SIMDJSON_PORTABILITY_H
diff --git a/include/simdjson/ppc64/numberparsing_defs.h b/include/simdjson/ppc64/numberparsing_defs.h
index d21c25b18..36861c0bf 100644
--- a/include/simdjson/ppc64/numberparsing_defs.h
+++ b/include/simdjson/ppc64/numberparsing_defs.h
@@ -60,6 +60,12 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
} // namespace ppc64
} // namespace simdjson
+#ifndef SIMDJSON_SWAR_NUMBER_PARSING
+#if SIMDJSON_IS_BIG_ENDIAN
+#define SIMDJSON_SWAR_NUMBER_PARSING 0
+#else
#define SIMDJSON_SWAR_NUMBER_PARSING 1
+#endif
+#endif
#endif // SIMDJSON_PPC64_NUMBERPARSING_DEFS_H
diff --git a/include/simdjson/simdjson_version.h b/include/simdjson/simdjson_version.h
index 4f52ec7cf..059bb9a50 100644
--- a/include/simdjson/simdjson_version.h
+++ b/include/simdjson/simdjson_version.h
@@ -4,7 +4,7 @@
#define SIMDJSON_SIMDJSON_VERSION_H
/** The version of simdjson being used (major.minor.revision) */
-#define SIMDJSON_VERSION "3.10.0"
+#define SIMDJSON_VERSION "3.10.1"
namespace simdjson {
enum {
@@ -19,7 +19,7 @@ enum {
/**
* The revision (major.minor.REVISION) of simdjson being used.
*/
- SIMDJSON_VERSION_REVISION = 0
+ SIMDJSON_VERSION_REVISION = 1
};
} // namespace simdjson
diff --git a/singleheader/amalgamate.py b/singleheader/amalgamate.py
index ce9c6b2b2..b5df3df11 100755
--- a/singleheader/amalgamate.py
+++ b/singleheader/amalgamate.py
@@ -323,6 +323,10 @@ class Amalgamator:
for line in fid2:
line = line.rstrip('\n')
+ # Ignore #pragma once, it causes warnings if it ends up in a .cpp file
+ if re.search(r'^#pragma once$', line):
+ continue
+
# Ignore lines inside #ifndef SIMDJSON_CONDITIONAL_INCLUDE
if re.search(r'^#ifndef\s+SIMDJSON_CONDITIONAL_INCLUDE\s*$', line):
assert file.is_conditional_include, f"{file} uses #ifndef SIMDJSON_CONDITIONAL_INCLUDE but is not an amalgamated file!"
diff --git a/singleheader/simdjson.cpp b/singleheader/simdjson.cpp
index b5dd72438..57b5561b1 100644
--- a/singleheader/simdjson.cpp
+++ b/singleheader/simdjson.cpp
@@ -1,4 +1,4 @@
-/* auto-generated on 2024-08-01 09:31:50 -0400. Do not edit! */
+/* auto-generated on 2024-09-17 15:48:50 -0400. Do not edit! */
/* including simdjson.cpp: */
/* begin file simdjson.cpp */
#define SIMDJSON_SRC_SIMDJSON_CPP
@@ -284,6 +284,45 @@ using std::size_t;
#endif
+
+
+#if defined __BYTE_ORDER__ && defined __ORDER_BIG_ENDIAN__
+#define SIMDJSON_IS_BIG_ENDIAN (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
+#elif defined _WIN32
+#define SIMDJSON_IS_BIG_ENDIAN 0
+#else
+#if defined(__APPLE__) || defined(__FreeBSD__)
+#include
+#elif defined(sun) || defined(__sun)
+#include
+#elif defined(__MVS__)
+#include
+#else
+#ifdef __has_include
+#if __has_include()
+#include
+#endif //__has_include()
+#endif //__has_include
+#endif
+#
+#ifndef __BYTE_ORDER__
+// safe choice
+#define SIMDJSON_IS_BIG_ENDIAN 0
+#endif
+#
+#ifndef __ORDER_LITTLE_ENDIAN__
+// safe choice
+#define SIMDJSON_IS_BIG_ENDIAN 0
+#endif
+#
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+#define SIMDJSON_IS_BIG_ENDIAN 0
+#else
+#define SIMDJSON_IS_BIG_ENDIAN 1
+#endif
+#endif
+
+
#endif // SIMDJSON_PORTABILITY_H
/* end file simdjson/portability.h */
@@ -332,6 +371,8 @@ double from_chars(const char *first, const char* end) noexcept;
#define SIMDJSON_ISALIGNED_N(ptr, n) (((uintptr_t)(ptr) & ((n)-1)) == 0)
#if SIMDJSON_REGULAR_VISUAL_STUDIO
+ // We could use [[deprecated]] but it requires C++14
+ #define simdjson_deprecated __declspec(deprecated)
#define simdjson_really_inline __forceinline
#define simdjson_never_inline __declspec(noinline)
@@ -370,6 +411,8 @@ double from_chars(const char *first, const char* end) noexcept;
#define SIMDJSON_POP_DISABLE_UNUSED_WARNINGS
#else // SIMDJSON_REGULAR_VISUAL_STUDIO
+ // We could use [[deprecated]] but it requires C++14
+ #define simdjson_deprecated __attribute__((deprecated))
#define simdjson_really_inline inline __attribute__((always_inline))
#define simdjson_never_inline inline __attribute__((noinline))
@@ -545,7 +588,6 @@ SIMDJSON_PUSH_DISABLE_ALL_WARNINGS
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-#pragma once
#ifndef NONSTD_SV_LITE_H_INCLUDED
#define NONSTD_SV_LITE_H_INCLUDED
@@ -7635,6 +7677,12 @@ simdjson_inline uint64_t clear_lowest_bit(uint64_t input_num) {
return input_num & (input_num-1);
}
+// We sometimes call leading_zeroes on inputs that are zero,
+// but the algorithms do not end up using the returned value.
+// Sadly, sanitizers are not smart enough to figure it out.
+// Applies only when SIMDJSON_PREFER_REVERSE_BITS is defined and true.
+// (See below.)
+SIMDJSON_NO_SANITIZE_UNDEFINED
/* result might be undefined when input_num is zero */
simdjson_inline int leading_zeroes(uint64_t input_num) {
#ifdef SIMDJSON_REGULAR_VISUAL_STUDIO
@@ -7807,7 +7855,13 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
} // namespace arm64
} // namespace simdjson
+#ifndef SIMDJSON_SWAR_NUMBER_PARSING
+#if SIMDJSON_IS_BIG_ENDIAN
+#define SIMDJSON_SWAR_NUMBER_PARSING 0
+#else
#define SIMDJSON_SWAR_NUMBER_PARSING 1
+#endif
+#endif
#endif // SIMDJSON_ARM64_NUMBERPARSING_DEFS_H
/* end file simdjson/arm64/numberparsing_defs.h */
@@ -9424,7 +9478,6 @@ simdjson_unused simdjson_inline simdjson_result get_number_type(con
// Our objective is accurate parsing (ULP of 0) at high speed.
template
simdjson_inline error_code parse_number(const uint8_t *const src, W &writer) {
-
//
// Check for minus sign
//
@@ -10391,6 +10444,12 @@ simdjson_inline uint64_t clear_lowest_bit(uint64_t input_num) {
return input_num & (input_num-1);
}
+// We sometimes call leading_zeroes on inputs that are zero,
+// but the algorithms do not end up using the returned value.
+// Sadly, sanitizers are not smart enough to figure it out.
+// Applies only when SIMDJSON_PREFER_REVERSE_BITS is defined and true.
+// (See below.)
+SIMDJSON_NO_SANITIZE_UNDEFINED
/* result might be undefined when input_num is zero */
simdjson_inline int leading_zeroes(uint64_t input_num) {
#ifdef SIMDJSON_REGULAR_VISUAL_STUDIO
@@ -10563,7 +10622,13 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
} // namespace arm64
} // namespace simdjson
+#ifndef SIMDJSON_SWAR_NUMBER_PARSING
+#if SIMDJSON_IS_BIG_ENDIAN
+#define SIMDJSON_SWAR_NUMBER_PARSING 0
+#else
#define SIMDJSON_SWAR_NUMBER_PARSING 1
+#endif
+#endif
#endif // SIMDJSON_ARM64_NUMBERPARSING_DEFS_H
/* end file simdjson/arm64/numberparsing_defs.h */
@@ -15766,7 +15831,6 @@ simdjson_unused simdjson_inline simdjson_result get_number_type(con
// Our objective is accurate parsing (ULP of 0) at high speed.
template
simdjson_inline error_code parse_number(const uint8_t *const src, W &writer) {
-
//
// Check for minus sign
//
@@ -21980,7 +22044,6 @@ simdjson_unused simdjson_inline simdjson_result get_number_type(con
// Our objective is accurate parsing (ULP of 0) at high speed.
template
simdjson_inline error_code parse_number(const uint8_t *const src, W &writer) {
-
//
// Check for minus sign
//
@@ -26746,7 +26809,13 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
} // namespace ppc64
} // namespace simdjson
+#ifndef SIMDJSON_SWAR_NUMBER_PARSING
+#if SIMDJSON_IS_BIG_ENDIAN
+#define SIMDJSON_SWAR_NUMBER_PARSING 0
+#else
#define SIMDJSON_SWAR_NUMBER_PARSING 1
+#endif
+#endif
#endif // SIMDJSON_PPC64_NUMBERPARSING_DEFS_H
/* end file simdjson/ppc64/numberparsing_defs.h */
@@ -28350,7 +28419,6 @@ simdjson_unused simdjson_inline simdjson_result get_number_type(con
// Our objective is accurate parsing (ULP of 0) at high speed.
template
simdjson_inline error_code parse_number(const uint8_t *const src, W &writer) {
-
//
// Check for minus sign
//
@@ -29490,7 +29558,13 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
} // namespace ppc64
} // namespace simdjson
+#ifndef SIMDJSON_SWAR_NUMBER_PARSING
+#if SIMDJSON_IS_BIG_ENDIAN
+#define SIMDJSON_SWAR_NUMBER_PARSING 0
+#else
#define SIMDJSON_SWAR_NUMBER_PARSING 1
+#endif
+#endif
#endif // SIMDJSON_PPC64_NUMBERPARSING_DEFS_H
/* end file simdjson/ppc64/numberparsing_defs.h */
@@ -35086,7 +35160,6 @@ simdjson_unused simdjson_inline simdjson_result get_number_type(con
// Our objective is accurate parsing (ULP of 0) at high speed.
template
simdjson_inline error_code parse_number(const uint8_t *const src, W &writer) {
-
//
// Check for minus sign
//
@@ -40172,7 +40245,13 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
} // namespace lsx
} // namespace simdjson
+#ifndef SIMDJSON_SWAR_NUMBER_PARSING
+#if SIMDJSON_IS_BIG_ENDIAN
+#define SIMDJSON_SWAR_NUMBER_PARSING 0
+#else
#define SIMDJSON_SWAR_NUMBER_PARSING 1
+#endif
+#endif
#endif // SIMDJSON_LSX_NUMBERPARSING_DEFS_H
/* end file simdjson/lsx/numberparsing_defs.h */
@@ -41646,7 +41725,6 @@ simdjson_unused simdjson_inline simdjson_result get_number_type(con
// Our objective is accurate parsing (ULP of 0) at high speed.
template
simdjson_inline error_code parse_number(const uint8_t *const src, W &writer) {
-
//
// Check for minus sign
//
@@ -42701,7 +42779,13 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
} // namespace lsx
} // namespace simdjson
+#ifndef SIMDJSON_SWAR_NUMBER_PARSING
+#if SIMDJSON_IS_BIG_ENDIAN
+#define SIMDJSON_SWAR_NUMBER_PARSING 0
+#else
#define SIMDJSON_SWAR_NUMBER_PARSING 1
+#endif
+#endif
#endif // SIMDJSON_LSX_NUMBERPARSING_DEFS_H
/* end file simdjson/lsx/numberparsing_defs.h */
@@ -46155,7 +46239,13 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
} // namespace lasx
} // namespace simdjson
+#ifndef SIMDJSON_SWAR_NUMBER_PARSING
+#if SIMDJSON_IS_BIG_ENDIAN
+#define SIMDJSON_SWAR_NUMBER_PARSING 0
+#else
#define SIMDJSON_SWAR_NUMBER_PARSING 1
+#endif
+#endif
#endif // SIMDJSON_LASX_NUMBERPARSING_DEFS_H
/* end file simdjson/lasx/numberparsing_defs.h */
@@ -47645,7 +47735,6 @@ simdjson_unused simdjson_inline simdjson_result get_number_type(con
// Our objective is accurate parsing (ULP of 0) at high speed.
template
simdjson_inline error_code parse_number(const uint8_t *const src, W &writer) {
-
//
// Check for minus sign
//
@@ -48700,7 +48789,13 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
} // namespace lasx
} // namespace simdjson
+#ifndef SIMDJSON_SWAR_NUMBER_PARSING
+#if SIMDJSON_IS_BIG_ENDIAN
+#define SIMDJSON_SWAR_NUMBER_PARSING 0
+#else
#define SIMDJSON_SWAR_NUMBER_PARSING 1
+#endif
+#endif
#endif // SIMDJSON_LASX_NUMBERPARSING_DEFS_H
/* end file simdjson/lasx/numberparsing_defs.h */
@@ -52184,7 +52279,13 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
} // namespace fallback
} // namespace simdjson
+#ifndef SIMDJSON_SWAR_NUMBER_PARSING
+#if SIMDJSON_IS_BIG_ENDIAN
+#define SIMDJSON_SWAR_NUMBER_PARSING 0
+#else
#define SIMDJSON_SWAR_NUMBER_PARSING 1
+#endif
+#endif
#endif // SIMDJSON_FALLBACK_NUMBERPARSING_DEFS_H
/* end file simdjson/fallback/numberparsing_defs.h */
@@ -53243,7 +53344,6 @@ simdjson_unused simdjson_inline simdjson_result get_number_type(con
// Our objective is accurate parsing (ULP of 0) at high speed.
template
simdjson_inline error_code parse_number(const uint8_t *const src, W &writer) {
-
//
// Check for minus sign
//
@@ -54318,7 +54418,13 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
} // namespace fallback
} // namespace simdjson
+#ifndef SIMDJSON_SWAR_NUMBER_PARSING
+#if SIMDJSON_IS_BIG_ENDIAN
+#define SIMDJSON_SWAR_NUMBER_PARSING 0
+#else
#define SIMDJSON_SWAR_NUMBER_PARSING 1
+#endif
+#endif
#endif // SIMDJSON_FALLBACK_NUMBERPARSING_DEFS_H
/* end file simdjson/fallback/numberparsing_defs.h */
diff --git a/singleheader/simdjson.h b/singleheader/simdjson.h
index ddb6f2e4e..d4b2cf0f9 100644
--- a/singleheader/simdjson.h
+++ b/singleheader/simdjson.h
@@ -1,4 +1,4 @@
-/* auto-generated on 2024-08-01 09:31:50 -0400. Do not edit! */
+/* auto-generated on 2024-09-17 15:48:50 -0400. Do not edit! */
/* including simdjson.h: */
/* begin file simdjson.h */
#ifndef SIMDJSON_H
@@ -304,6 +304,45 @@ using std::size_t;
#endif
+
+
+#if defined __BYTE_ORDER__ && defined __ORDER_BIG_ENDIAN__
+#define SIMDJSON_IS_BIG_ENDIAN (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
+#elif defined _WIN32
+#define SIMDJSON_IS_BIG_ENDIAN 0
+#else
+#if defined(__APPLE__) || defined(__FreeBSD__)
+#include
+#elif defined(sun) || defined(__sun)
+#include
+#elif defined(__MVS__)
+#include
+#else
+#ifdef __has_include
+#if __has_include()
+#include
+#endif //__has_include()
+#endif //__has_include
+#endif
+#
+#ifndef __BYTE_ORDER__
+// safe choice
+#define SIMDJSON_IS_BIG_ENDIAN 0
+#endif
+#
+#ifndef __ORDER_LITTLE_ENDIAN__
+// safe choice
+#define SIMDJSON_IS_BIG_ENDIAN 0
+#endif
+#
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+#define SIMDJSON_IS_BIG_ENDIAN 0
+#else
+#define SIMDJSON_IS_BIG_ENDIAN 1
+#endif
+#endif
+
+
#endif // SIMDJSON_PORTABILITY_H
/* end file simdjson/portability.h */
@@ -352,6 +391,8 @@ double from_chars(const char *first, const char* end) noexcept;
#define SIMDJSON_ISALIGNED_N(ptr, n) (((uintptr_t)(ptr) & ((n)-1)) == 0)
#if SIMDJSON_REGULAR_VISUAL_STUDIO
+ // We could use [[deprecated]] but it requires C++14
+ #define simdjson_deprecated __declspec(deprecated)
#define simdjson_really_inline __forceinline
#define simdjson_never_inline __declspec(noinline)
@@ -390,6 +431,8 @@ double from_chars(const char *first, const char* end) noexcept;
#define SIMDJSON_POP_DISABLE_UNUSED_WARNINGS
#else // SIMDJSON_REGULAR_VISUAL_STUDIO
+ // We could use [[deprecated]] but it requires C++14
+ #define simdjson_deprecated __attribute__((deprecated))
#define simdjson_really_inline inline __attribute__((always_inline))
#define simdjson_never_inline inline __attribute__((noinline))
@@ -565,7 +608,6 @@ SIMDJSON_PUSH_DISABLE_ALL_WARNINGS
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-#pragma once
#ifndef NONSTD_SV_LITE_H_INCLUDED
#define NONSTD_SV_LITE_H_INCLUDED
@@ -2366,7 +2408,7 @@ namespace std {
#define SIMDJSON_SIMDJSON_VERSION_H
/** The version of simdjson being used (major.minor.revision) */
-#define SIMDJSON_VERSION "3.10.0"
+#define SIMDJSON_VERSION "3.10.1"
namespace simdjson {
enum {
@@ -2381,7 +2423,7 @@ enum {
/**
* The revision (major.minor.REVISION) of simdjson being used.
*/
- SIMDJSON_VERSION_REVISION = 0
+ SIMDJSON_VERSION_REVISION = 1
};
} // namespace simdjson
@@ -3907,6 +3949,9 @@ inline padded_string::padded_string(const char *data, size_t length) noexcept
if ((data != nullptr) && (data_ptr != nullptr)) {
std::memcpy(data_ptr, data, length);
}
+ if (data_ptr == nullptr) {
+ viable_size = 0;
+ }
}
#ifdef __cpp_char8_t
inline padded_string::padded_string(const char8_t *data, size_t length) noexcept
@@ -3914,12 +3959,17 @@ inline padded_string::padded_string(const char8_t *data, size_t length) noexcept
if ((data != nullptr) && (data_ptr != nullptr)) {
std::memcpy(data_ptr, reinterpret_cast(data), length);
}
+ if (data_ptr == nullptr) {
+ viable_size = 0;
+ }
}
#endif
// note: do not pass std::string arguments by value
inline padded_string::padded_string(const std::string & str_ ) noexcept
: viable_size(str_.size()), data_ptr(internal::allocate_padded_buffer(str_.size())) {
- if (data_ptr != nullptr) {
+ if (data_ptr == nullptr) {
+ viable_size = 0;
+ } else {
std::memcpy(data_ptr, str_.data(), str_.size());
}
}
@@ -9850,6 +9900,12 @@ simdjson_inline uint64_t clear_lowest_bit(uint64_t input_num) {
return input_num & (input_num-1);
}
+// We sometimes call leading_zeroes on inputs that are zero,
+// but the algorithms do not end up using the returned value.
+// Sadly, sanitizers are not smart enough to figure it out.
+// Applies only when SIMDJSON_PREFER_REVERSE_BITS is defined and true.
+// (See below.)
+SIMDJSON_NO_SANITIZE_UNDEFINED
/* result might be undefined when input_num is zero */
simdjson_inline int leading_zeroes(uint64_t input_num) {
#ifdef SIMDJSON_REGULAR_VISUAL_STUDIO
@@ -10022,7 +10078,13 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
} // namespace arm64
} // namespace simdjson
+#ifndef SIMDJSON_SWAR_NUMBER_PARSING
+#if SIMDJSON_IS_BIG_ENDIAN
+#define SIMDJSON_SWAR_NUMBER_PARSING 0
+#else
#define SIMDJSON_SWAR_NUMBER_PARSING 1
+#endif
+#endif
#endif // SIMDJSON_ARM64_NUMBERPARSING_DEFS_H
/* end file simdjson/arm64/numberparsing_defs.h */
@@ -11639,7 +11701,6 @@ simdjson_unused simdjson_inline simdjson_result get_number_type(con
// Our objective is accurate parsing (ULP of 0) at high speed.
template
simdjson_inline error_code parse_number(const uint8_t *const src, W &writer) {
-
//
// Check for minus sign
//
@@ -12683,7 +12744,13 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
} // namespace fallback
} // namespace simdjson
+#ifndef SIMDJSON_SWAR_NUMBER_PARSING
+#if SIMDJSON_IS_BIG_ENDIAN
+#define SIMDJSON_SWAR_NUMBER_PARSING 0
+#else
#define SIMDJSON_SWAR_NUMBER_PARSING 1
+#endif
+#endif
#endif // SIMDJSON_FALLBACK_NUMBERPARSING_DEFS_H
/* end file simdjson/fallback/numberparsing_defs.h */
@@ -13742,7 +13809,6 @@ simdjson_unused simdjson_inline simdjson_result get_number_type(con
// Our objective is accurate parsing (ULP of 0) at high speed.
template
simdjson_inline error_code parse_number(const uint8_t *const src, W &writer) {
-
//
// Check for minus sign
//
@@ -16337,7 +16403,6 @@ simdjson_unused simdjson_inline simdjson_result get_number_type(con
// Our objective is accurate parsing (ULP of 0) at high speed.
template
simdjson_inline error_code parse_number(const uint8_t *const src, W &writer) {
-
//
// Check for minus sign
//
@@ -18931,7 +18996,6 @@ simdjson_unused simdjson_inline simdjson_result get_number_type(con
// Our objective is accurate parsing (ULP of 0) at high speed.
template
simdjson_inline error_code parse_number(const uint8_t *const src, W &writer) {
-
//
// Check for minus sign
//
@@ -20036,7 +20100,13 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
} // namespace ppc64
} // namespace simdjson
+#ifndef SIMDJSON_SWAR_NUMBER_PARSING
+#if SIMDJSON_IS_BIG_ENDIAN
+#define SIMDJSON_SWAR_NUMBER_PARSING 0
+#else
#define SIMDJSON_SWAR_NUMBER_PARSING 1
+#endif
+#endif
#endif // SIMDJSON_PPC64_NUMBERPARSING_DEFS_H
/* end file simdjson/ppc64/numberparsing_defs.h */
@@ -21640,7 +21710,6 @@ simdjson_unused simdjson_inline simdjson_result get_number_type(con
// Our objective is accurate parsing (ULP of 0) at high speed.
template
simdjson_inline error_code parse_number(const uint8_t *const src, W &writer) {
-
//
// Check for minus sign
//
@@ -24672,7 +24741,6 @@ simdjson_unused simdjson_inline simdjson_result get_number_type(con
// Our objective is accurate parsing (ULP of 0) at high speed.
template
simdjson_inline error_code parse_number(const uint8_t *const src, W &writer) {
-
//
// Check for minus sign
//
@@ -25701,7 +25769,13 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
} // namespace lsx
} // namespace simdjson
+#ifndef SIMDJSON_SWAR_NUMBER_PARSING
+#if SIMDJSON_IS_BIG_ENDIAN
+#define SIMDJSON_SWAR_NUMBER_PARSING 0
+#else
#define SIMDJSON_SWAR_NUMBER_PARSING 1
+#endif
+#endif
#endif // SIMDJSON_LSX_NUMBERPARSING_DEFS_H
/* end file simdjson/lsx/numberparsing_defs.h */
@@ -27175,7 +27249,6 @@ simdjson_unused simdjson_inline simdjson_result get_number_type(con
// Our objective is accurate parsing (ULP of 0) at high speed.
template
simdjson_inline error_code parse_number(const uint8_t *const src, W &writer) {
-
//
// Check for minus sign
//
@@ -28201,7 +28274,13 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
} // namespace lasx
} // namespace simdjson
+#ifndef SIMDJSON_SWAR_NUMBER_PARSING
+#if SIMDJSON_IS_BIG_ENDIAN
+#define SIMDJSON_SWAR_NUMBER_PARSING 0
+#else
#define SIMDJSON_SWAR_NUMBER_PARSING 1
+#endif
+#endif
#endif // SIMDJSON_LASX_NUMBERPARSING_DEFS_H
/* end file simdjson/lasx/numberparsing_defs.h */
@@ -29691,7 +29770,6 @@ simdjson_unused simdjson_inline simdjson_result get_number_type(con
// Our objective is accurate parsing (ULP of 0) at high speed.
template
simdjson_inline error_code parse_number(const uint8_t *const src, W &writer) {
-
//
// Check for minus sign
//
@@ -30664,6 +30742,12 @@ simdjson_inline uint64_t clear_lowest_bit(uint64_t input_num) {
return input_num & (input_num-1);
}
+// We sometimes call leading_zeroes on inputs that are zero,
+// but the algorithms do not end up using the returned value.
+// Sadly, sanitizers are not smart enough to figure it out.
+// Applies only when SIMDJSON_PREFER_REVERSE_BITS is defined and true.
+// (See below.)
+SIMDJSON_NO_SANITIZE_UNDEFINED
/* result might be undefined when input_num is zero */
simdjson_inline int leading_zeroes(uint64_t input_num) {
#ifdef SIMDJSON_REGULAR_VISUAL_STUDIO
@@ -30836,7 +30920,13 @@ simdjson_inline internal::value128 full_multiplication(uint64_t value1, uint64_t
} // namespace arm64
} // namespace simdjson
+#ifndef SIMDJSON_SWAR_NUMBER_PARSING
+#if SIMDJSON_IS_BIG_ENDIAN
+#define SIMDJSON_SWAR_NUMBER_PARSING 0
+#else
#define SIMDJSON_SWAR_NUMBER_PARSING 1
+#endif
+#endif
#endif // SIMDJSON_ARM64_NUMBERPARSING_DEFS_H
/* end file simdjson/arm64/numberparsing_defs.h */
@@ -34014,7 +34104,7 @@ public:
private:
/** @private [for benchmarking access] The implementation to use */
- std::unique_ptr implementation{};
+ std::unique_ptr implementation{};
size_t _capacity{0};
size_t _max_capacity;
size_t _max_depth{DEFAULT_MAX_DEPTH};
@@ -34557,7 +34647,7 @@ public:
" You may also add support for custom types, see our documentation.");
}
/** @overload template simdjson_result get() & noexcept */
- template simdjson_inline simdjson_result get() && noexcept {
+ template simdjson_deprecated simdjson_inline simdjson_result get() && noexcept {
// Unless the simdjson library or the user provides an inline implementation, calling this method should
// immediately fail.
static_assert(!sizeof(T), "The get method with given type is not implemented by the simdjson library. "
@@ -34580,7 +34670,7 @@ public:
*/
template simdjson_inline error_code get(T &out) & noexcept;
/** @overload template error_code get(T &out) & noexcept */
- template simdjson_inline error_code get(T &out) && noexcept;
+ template simdjson_deprecated simdjson_inline error_code get(T &out) && noexcept;
#if SIMDJSON_EXCEPTIONS
/**
@@ -34593,7 +34683,10 @@ public:
* @returns An instance of type T
*/
template
- explicit simdjson_inline operator T() noexcept(false);
+ explicit simdjson_inline operator T() & noexcept(false);
+ template
+ explicit simdjson_deprecated simdjson_inline operator T() && noexcept(false);
+
/**
* Cast this JSON value to an array.
*
@@ -35159,7 +35252,7 @@ public:
simdjson_inline simdjson_result is_null() noexcept;
template simdjson_inline simdjson_result get() & noexcept;
- template simdjson_inline simdjson_result get() && noexcept;
+ template simdjson_deprecated simdjson_inline simdjson_result get() && noexcept;
template simdjson_inline error_code get(T &out) & noexcept;
template simdjson_inline error_code get(T &out) && noexcept;
@@ -35599,7 +35692,7 @@ private:
friend class document;
friend class json_iterator;
friend struct simdjson_result;
- friend struct internal::simdjson_result_base;
+ friend struct simdjson::internal::simdjson_result_base;
}; // document_stream
} // namespace ondemand
@@ -36561,16 +36654,14 @@ simdjson_inline simdjson_result &simdjson_resul
/* amalgamation skipped (editor-only): #ifndef SIMDJSON_CONDITIONAL_INCLUDE */
/* amalgamation skipped (editor-only): #define SIMDJSON_GENERIC_ONDEMAND_DOCUMENT_INL_H */
/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/base.h" */
-/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/array-inl.h" */
/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/array_iterator.h" */
/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/document.h" */
-/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/json_iterator-inl.h" */
-/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/json_path_to_pointer_conversion.h" */
-/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/json_path_to_pointer_conversion-inl.h" */
/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/json_type.h" */
-/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/object-inl.h" */
/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/raw_json_string.h" */
/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/value.h" */
+/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/array-inl.h" */
+/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/json_iterator-inl.h" */
+/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/object-inl.h" */
/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/value_iterator-inl.h" */
/* amalgamation skipped (editor-only): #endif // SIMDJSON_CONDITIONAL_INCLUDE */
@@ -36725,24 +36816,26 @@ template<> simdjson_inline simdjson_result document::get() & noexcept {
template<> simdjson_inline simdjson_result document::get() & noexcept { return get_bool(); }
template<> simdjson_inline simdjson_result document::get() & noexcept { return get_value(); }
-template<> simdjson_inline simdjson_result document::get() && noexcept { return get_raw_json_string(); }
-template<> simdjson_inline simdjson_result document::get() && noexcept { return get_string(false); }
-template<> simdjson_inline simdjson_result document::get() && noexcept { return std::forward(*this).get_double(); }
-template<> simdjson_inline simdjson_result document::get() && noexcept { return std::forward(*this).get_uint64(); }
-template<> simdjson_inline simdjson_result document::get() && noexcept { return std::forward(*this).get_int64(); }
-template<> simdjson_inline simdjson_result document::get() && noexcept { return std::forward(*this).get_bool(); }
-template<> simdjson_inline simdjson_result document::get() && noexcept { return get_value(); }
+template<> simdjson_deprecated simdjson_inline simdjson_result document::get() && noexcept { return get_raw_json_string(); }
+template<> simdjson_deprecated simdjson_inline simdjson_result document::get() && noexcept { return get_string(false); }
+template<> simdjson_deprecated simdjson_inline simdjson_result document::get() && noexcept { return std::forward(*this).get_double(); }
+template<> simdjson_deprecated simdjson_inline simdjson_result document::get() && noexcept { return std::forward(*this).get_uint64(); }
+template<> simdjson_deprecated simdjson_inline simdjson_result document::get() && noexcept { return std::forward(*this).get_int64(); }
+template<> simdjson_deprecated simdjson_inline simdjson_result document::get() && noexcept { return std::forward(*this).get_bool(); }
+template<> simdjson_deprecated simdjson_inline simdjson_result document::get() && noexcept { return get_value(); }
template simdjson_inline error_code document::get(T &out) & noexcept {
return get().get(out);
}
-template simdjson_inline error_code document::get(T &out) && noexcept {
+template simdjson_deprecated simdjson_inline error_code document::get(T &out) && noexcept {
return std::forward(*this).get().get(out);
}
#if SIMDJSON_EXCEPTIONS
template
-simdjson_inline document::operator T() noexcept(false) { return get(); }
+simdjson_deprecated simdjson_inline document::operator T() && noexcept(false) { return get(); }
+template
+simdjson_inline document::operator T() & noexcept(false) { return get(); }
simdjson_inline document::operator array() & noexcept(false) { return get_array(); }
simdjson_inline document::operator object() & noexcept(false) { return get_object(); }
simdjson_inline document::operator uint64_t() noexcept(false) { return get_uint64(); }
@@ -37029,7 +37122,7 @@ simdjson_inline simdjson_result simdjson_result::g
return first.get();
}
template
-simdjson_inline simdjson_result simdjson_result::get() && noexcept {
+simdjson_deprecated simdjson_inline simdjson_result simdjson_result::get() && noexcept {
if (error()) { return error(); }
return std::forward(first).get();
}
@@ -37045,7 +37138,7 @@ simdjson_inline error_code simdjson_result::get(T &ou
}
template<> simdjson_inline simdjson_result simdjson_result::get() & noexcept = delete;
-template<> simdjson_inline simdjson_result simdjson_result::get() && noexcept {
+template<> simdjson_deprecated simdjson_inline simdjson_result simdjson_result::get() && noexcept {
if (error()) { return error(); }
return std::forward(first);
}
@@ -40014,8 +40107,6 @@ simdjson_inline simdjson_result::simdjson_resul
/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/array.h" */
/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/array_iterator.h" */
/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/json_iterator.h" */
-/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/json_path_to_pointer_conversion.h" */
-/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/json_path_to_pointer_conversion-inl.h" */
/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/json_type.h" */
/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/object.h" */
/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/raw_json_string.h" */
@@ -40561,9 +40652,9 @@ simdjson_inline simdjson_result simdjson_result implementation{};
+ std::unique_ptr implementation{};
size_t _capacity{0};
size_t _max_capacity;
size_t _max_depth{DEFAULT_MAX_DEPTH};
@@ -45023,7 +45120,7 @@ public:
" You may also add support for custom types, see our documentation.");
}
/** @overload template simdjson_result get() & noexcept */
- template simdjson_inline simdjson_result get() && noexcept {
+ template simdjson_deprecated simdjson_inline simdjson_result get() && noexcept {
// Unless the simdjson library or the user provides an inline implementation, calling this method should
// immediately fail.
static_assert(!sizeof(T), "The get method with given type is not implemented by the simdjson library. "
@@ -45046,7 +45143,7 @@ public:
*/
template simdjson_inline error_code get(T &out) & noexcept;
/** @overload template error_code get(T &out) & noexcept */
- template simdjson_inline error_code get(T &out) && noexcept;
+ template simdjson_deprecated simdjson_inline error_code get(T &out) && noexcept;
#if SIMDJSON_EXCEPTIONS
/**
@@ -45059,7 +45156,10 @@ public:
* @returns An instance of type T
*/
template
- explicit simdjson_inline operator T() noexcept(false);
+ explicit simdjson_inline operator T() & noexcept(false);
+ template
+ explicit simdjson_deprecated simdjson_inline operator T() && noexcept(false);
+
/**
* Cast this JSON value to an array.
*
@@ -45625,7 +45725,7 @@ public:
simdjson_inline simdjson_result is_null() noexcept;
template simdjson_inline simdjson_result get() & noexcept;
- template simdjson_inline simdjson_result get() && noexcept;
+ template simdjson_deprecated simdjson_inline simdjson_result get() && noexcept;
template simdjson_inline error_code get(T &out) & noexcept;
template simdjson_inline error_code get(T &out) && noexcept;
@@ -46065,7 +46165,7 @@ private:
friend class document;
friend class json_iterator;
friend struct simdjson_result;
- friend struct internal::simdjson_result_base;
+ friend struct simdjson::internal::simdjson_result_base;
}; // document_stream
} // namespace ondemand
@@ -47027,16 +47127,14 @@ simdjson_inline simdjson_result &simdjson_re
/* amalgamation skipped (editor-only): #ifndef SIMDJSON_CONDITIONAL_INCLUDE */
/* amalgamation skipped (editor-only): #define SIMDJSON_GENERIC_ONDEMAND_DOCUMENT_INL_H */
/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/base.h" */
-/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/array-inl.h" */
/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/array_iterator.h" */
/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/document.h" */
-/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/json_iterator-inl.h" */
-/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/json_path_to_pointer_conversion.h" */
-/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/json_path_to_pointer_conversion-inl.h" */
/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/json_type.h" */
-/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/object-inl.h" */
/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/raw_json_string.h" */
/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/value.h" */
+/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/array-inl.h" */
+/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/json_iterator-inl.h" */
+/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/object-inl.h" */
/* amalgamation skipped (editor-only): #include "simdjson/generic/ondemand/value_iterator-inl.h" */
/* amalgamation skipped (editor-only): #endif // SIMDJSON_CONDITIONAL_INCLUDE */
@@ -47191,24 +47289,26 @@ template<> simdjson_inline simdjson_result document::get() & noexcept {
template<> simdjson_inline simdjson_result document::get() & noexcept { return get_bool(); }
template<> simdjson_inline simdjson_result document::get() & noexcept { return get_value(); }
-template<> simdjson_inline simdjson_result document::get() && noexcept { return get_raw_json_string(); }
-template<> simdjson_inline simdjson_result document::get() && noexcept { return get_string(false); }
-template<> simdjson_inline simdjson_result document::get() && noexcept { return std::forward(*this).get_double(); }
-template<> simdjson_inline simdjson_result document::get() && noexcept { return std::forward(*this).get_uint64(); }
-template<> simdjson_inline simdjson_result document::get() && noexcept { return std::forward(*this).get_int64(); }
-template<> simdjson_inline simdjson_result document::get() && noexcept { return std::forward(*this).get_bool(); }
-template<> simdjson_inline simdjson_result document::get() && noexcept { return get_value(); }
+template<> simdjson_deprecated simdjson_inline simdjson_result document::get() && noexcept { return get_raw_json_string(); }
+template<> simdjson_deprecated simdjson_inline simdjson_result document::get() && noexcept { return get_string(false); }
+template<> simdjson_deprecated simdjson_inline simdjson_result document::get() && noexcept { return std::forward(*this).get_double(); }
+template<> simdjson_deprecated simdjson_inline simdjson_result document::get() && noexcept { return std::forward(*this).get_uint64(); }
+template<> simdjson_deprecated simdjson_inline simdjson_result document::get() && noexcept { return std::forward(*this).get_int64(); }
+template<> simdjson_deprecated simdjson_inline simdjson_result document::get() && noexcept { return std::forward(*this).get_bool(); }
+template<> simdjson_deprecated simdjson_inline simdjson_result document::get() && noexcept { return get_value(); }
template simdjson_inline error_code document::get(T &out) & noexcept {
return get().get(out);
}
-template simdjson_inline error_code document::get(T &out) && noexcept {
+template simdjson_deprecated simdjson_inline error_code document::get(T &out) && noexcept {
return std::forward(*this).get().get(out);
}
#if SIMDJSON_EXCEPTIONS
template
-simdjson_inline document::operator T() noexcept(false) { return get(); }
+simdjson_deprecated simdjson_inline document::operator T() && noexcept(false) { return get(); }
+template
+simdjson_inline document::operator T() & noexcept(false) { return get(); }
simdjson_inline document::operator array() & noexcept(false) { return get_array(); }
simdjson_inline document::operator object() & noexcept(false) { return get_object(); }
simdjson_inline document::operator uint64_t() noexcept(false) { return get_uint64(); }
@@ -47495,7 +47595,7 @@ simdjson_inline simdjson_result simdjson_result